定義變量是指設定變量的數據類型和變量的名字,Java語言要求變量遵循先定義,再初始化,而後使用的規則。java
做用域:指它的存在範圍,只有在這個範圍內,程序代碼才能訪問它。
變量的生命週期是指從一個變量被建立並分配內存空間開始,到這個變量被銷燬並清除其所佔用內存空間的過程。code
1)位置:定義在方法中或者在方法中的{}
2)使用:先賦值後使用
3)做用域:定義的方法中或者定義的{}中
4)生命週期:從變量的定義到方法調用結束對象
public void method1() { int a = 0; //局部變量,做用域爲整個method01方法; { int b = 0; //局部變量,做用域爲所處的代碼塊; b = a; } b = 20; //編譯出錯,b不能被訪問; }
1)位置:定義方法外,類裏面
2)使用:系統會進行默認初始化
3)做用域:做用於整個類
4)生命週期:從對象建立的時候到gc回收內存結束繼承
class Test { private int n1=0; private int n2=0; public int add() { int result = n2 + n2; return result; } }
操做符能與相應類型的數據組成表達式,來完成相應的運算。接口
System.out.println(1+2+"a"); //輸出3a System.out.println(1+2.0+"a"); //輸出3.0a System.out.println(1+2.0+"a"+true); //輸出3.0atrue System.out.println("a"+1+2); //輸出a12 System.out.println(1+"a"+2); //輸出1a2
int a1=12/5; //a1變量的取值爲2 int a2=13/5; //a2變量的取值爲2 int a3=-12/5; //a3變量的取值爲-2 int a4=-13/5; //a4變量的取值爲-2 int a5=1/5; //a5變量的取值爲0 double a6=-12/5; //a6變量的取值爲-2.0 double a7=-12/5.0; //a7變量的取值爲-2.4
int a1=1%5; //a1變量的取值爲1 int a2=13%5; //a2變量的取值爲3 double a3=1%5; //a3變量的取值爲1.0 double a4=12%5.1; //a4變量的取值爲1.8000000000000007 /整除, 如操做數均爲整數,運算結果爲商的整數部分 int a1=12/5; //a1變量的取值爲2 int a2=13/5; //a2變量的取值爲2 int a3=-12/5; //a3變量的取值爲-2 int a4=-13/5; //a4變量的取值爲-2 int a5=1/5; //a5變量的取值爲0 double a6=-12/5; //a6變量的取值爲-2.0 double a7=-12/5.0; //a7變量的取值爲-2.4
int a1=1%5; //a1變量的取值爲1 int a2=13%5; //a2變量的取值爲3 double a3=1%5; //a3變量的取值爲1.0 double a4=12%5.1; //a4變量的取值爲1.8000000000000007
= : int x=0,i=1,j=1; *=: 這裏的"*="由操做符"*"和"="複合而成,它等價於 a=a*b,這種 複合操做符能使程序變得更加簡潔。 /=: a/=b 等價於 a=a/b; %=: a%=b 等價於 a=a%b;
注意:+=和+的區別 如:short a=0; int b=123456; a+=b;和a=a+b;的區別: +=系統會進行隱式的數據類型轉換,向=左邊的數據類型進行轉換。 a+b會向數據類型高的類型轉換
>大於 >= 大於等於 < 小於 <= 小於等於 以上操做符只適用於整數類型和浮點數類型; int a=1,b=1; double d=1.0; boolean result1 = a>b; //result1的值爲false; boolean result2 = a<b; //result2的值爲false; boolean result3 = a>=d; //result3的值爲true; boolean result4 = a<=b; //result4的值爲true;
#### instanceof生命週期
判斷一個引用類型所引用的對象是不是一個類的實例。該操做符左邊是一個對象,右邊是一個類名或接口名。形式以下:內存
如:String str="hello" System.out.println(str instanceof String); System.out.println(str instanceof Object); System.out.println(str instanceof Student); //false
java.lang.Object是全部類的父類, 每個類都會默認繼承Object
子類是一個父類 是is a的關係作用域
== 等於
!= 不等於
既能夠是基本類型,也能夠是引用類型:
基本數據類型比較是真正的數值
引用類型比較的是地址,若是要比較引用類型真正的數據使用equals字符串
如:int a=1,b=1; System.out.println(a==b); //輸出true; 如:String s1="hello"; String s2="hello"; String s3=new String("hello"); String s4=new String("hello"); System.out.println(s1==s2); //true System.out.println(s3==s4); //false System.out.println(s1==s3); //false System.out.println(s3.equals(s4)); //true
算術右移位運算,也稱作帶符號右移位運算。最高爲補符號位。 > 邏輯右移位運算,也稱爲不帶符號右移位運算。 > << 左移位運算,也稱爲不帶符號左移位運算。
&: 與運算,運算規則爲:1&1->1, 1&0->0, 0&1->0, 0&0->0; |: 或運算,運算規則爲:1|1->1, 1|0->1, 0|1->1, 0|0->0; ^: 異或運算,運算規則爲:1^1->0, 1^0->1, 0^1->1, 0^0->0; 兩個值相同爲0,不一樣爲1; ~ : 取反運算, ~1->0, ~0->1; 例如:8>>2====>8/2^2=2 8:0000...00001000 0000.........10 ====>2 8>>>3=====>8/2^3=1 8:0000...00001000 00000000.000001=====>1 8<<2======>8*2^2=32 8:0000...00001000 000000000100000======>32 1&1=1 1&0=0 0&0=0 1|1=1 1|0=1 0|0=0 1^1=0 1^0=1 0^0=0 ~1=0 ~0=1 8&2=0 8|2=10 8^2=10 ~8= ~2= 1010 10===>第三位置1===>14 10===>第二位清0===>8 10===>第一位置反===>11 10===>輸出相應的二進制
短路操做符: 若是能根據操做左邊的布爾表達式就能推算出整個表達式的布爾值,將不執行操做符右邊的布爾表達式; &&:左邊的布爾表達式的值爲false, 整個表達式值確定爲false, 此時會忽略執行右邊的布爾表達式。 ||:左邊的布爾表達式的值爲true, 整個表達式值確定爲true, 此時會忽略執行右邊的布爾表達式。 if(條件1&&條件2){} if條件1爲假,不會執行條件2 if條件1爲真,會執行條件2 if(條件1||條件2){} if條件1爲真,不會執行條件2 if條件1爲假,會執行條件2
布爾表達式 ? 表達式1 : 表達式2 若是布爾表達式的值爲true,就返回表達式1的值,不然返回表達式2的值。 int score = 61; String result = score>=60?"及格":"不及格"; h)++,-- 前++與後++ 前--與後-- int a=10; b=++a =====>a=11,b=11,先計算,後賦值 b=a++ =====>a=11,b=10,先賦值,後計算 System.out.println("a:"+a+" b:"+b);
隱式的數據類型轉換:精度小的數據給精度大的數據 強制(顯式)的數據類型轉換:(type)精度大的數據給精度小的數據 System.out.println((int)(char)(byte)-1); 數據類型在轉換的時候注意: a)若是將精度小的數據轉爲精度大的數據時。 若是轉以前是有符號數,在前面補符號位 若是轉以前是無符號數,在前面補0 b)若是將精度大的數據轉爲精度小的數據時。 從低位竊取位數
隱式的數據類型轉換:子類轉換父類 強制(顯式)的數據類型轉換:父類轉換子類 String str="hello"; Object o=str; String str2=(String)o;