反碼:正數的反碼和原碼相同,負數的反碼是原碼取反,但符号位不變。
補碼:整數的補碼和原碼一樣,負數的補碼是反碼加1
移位運算:
數 x x>2 x>>>2
17 00010001 00 01000100 00000100 01 00000100 01
-17 11101111 11 10111100 11111011 11 00111011 11
面向過程和面向對象的差別:
過程化程式設計先确定算法,再确定資料結構
面向過程設計先建立資料結構,再确定算法
類:把相似的對象歸成一類,類就是一個模闆,它定義了一個通用于特定種類的所有對象的狀态和方法
類是建立對象的模闆,對象是類的執行個體
class Point
{
int x,y;
void output()
{
System.out.println(x);
System.out.println(y);
}
public static void main(String[] args)
Point pt = new Point();
pt.x = 10;
pt.y = 20;
pt.output();
}
對象的初始化需要new關鍵字
構造函數:為類的對象定義初始化狀态,不能直接調用構造方法,必須通過new關鍵字來調用。java的類都有構造方法,沒有寫的,編譯器會提供一個預設的預設構造方法。
預設構造方法中各種資料的預設值:數值型 0, boolean false, char '\0', 對象 null
當類中定義了一個構造函數,無論是有參數的還是無參數的,系統都不提供構造函數。
Point()
x=5;
y=5;
Point(int a, int b)
x=a;
y=b;
函數重載:名稱相同,但是參數的個數,或者參數的形式不同,這樣就構成了函數的重載。系統會根據調用時傳遞的參數類型來确定調用哪個函數。
Point(int a, int b)
Point()
this(1,1); //this 前面不能有東西,必須是第一句話
void output(int x, int y) //參數x與成員變量同名沖突 ,導緻沒有指派成功
x = x; //應該使用this.x = x;
y = y; //應該使用this.y = y;
pt.output(3,3);
Point pt1 = new Point();
pt.x = 6;
pt1.x = 7;
System.out.println(pt.x); // 6
System.out.println(pt1.x); // 7
this變量代表對象本身,當類中有兩個同名變量,一個屬于類(全局變量),一個屬于方法(局部變量),使用this變量來區分。
this變量可以簡化構造函數的調用,無參構造函數調用有參構造函數
類的方法在記憶體中隻有一份拷貝,但是類的變量在每個對象中都有一份拷貝
static 方法,類的方法,屬于類,而不是屬于某一個對象。 調用的時候直接用類名調用,在類加載時就配置設定了空間。
static 變量,類的變量,屬于類。static方法隻能通路static變量,而非靜态的方法既可以調用靜态變量,又可以調用非靜态變量
常量定義 fianl double PI = 3.1415926; 常量在定義時必須初始化,或者在構造函數中初始化。
類的繼承: extends 關鍵字,被繼承的叫做基類或者父類, 繼承的叫做子類。java不允許多繼承
class Animal
int height;
void eat();{}
void breath(){System.out.println("animal');}
class Fish extends Animal
super.breath();
void breath(){System.out.println("fish);}
子類的方法覆寫了父類的方法,如果要通路父類的方法,那麼就調用super方法通路父類中被隐藏的方法。每一個子類在初始化的時候都隐含的調用super(),這就是調用了父類中一個不帶參數的構造方法,如果父類中沒有相應的方法,那麼就會出錯。構造方法不可以重載
instanceof 判斷一個對象是否是類的執行個體
class Inter
public static void main(String[] args)
Animal an = new Animal();
if(an instanceof Animal ){}