CoreJava variable

第二章(續)

一.基本數據類型變量和引用數據類型變量:

   1)使用基本數據類型定義的變量叫做基本數據類型變量

    int a=10;

       保存是數據本身的數值(二進制)

   2)使用引用數據類型定義的變量叫做引用數據類型變量

    Teacher t=new Teacher();

       保存是堆區開闢的地址

   new關鍵字:

     a)在棧區開闢空間保存對象的引用

     b)在堆區開闢空間保存對象本身

     c)堆區的地址賦值給棧區的對象的引用

二:運行時數據區

一個完整的Java程序運行過程會涉及以下內存區域

方法區/代碼區:存放類的信息

堆區:用來存放動態產生的數據,比如new出來的對象。

     注意創建出來的對象只包含屬於各自的成員變量,

     並不包括成員方法。因爲同一個類的對象擁有各自

     的成員變量,存儲在各自的堆中,但是他們共享該

     類的方法,並不是每創建一個對象就把成員方法複製一次。

棧區:保存局部變量的值,包括:

     1.用來保存基本數據類型的值;

     2.保存類的實例,即堆區對象的引用(指針)。

       也可以用來保存加載方法時的幀

常量池:JVM爲每個已加載的類型維護一個常量池,

        常量池就是這個類型用到的常量的一個有序集合。

常量池存在於堆中。

PC寄存器:指向下一條需要執行的指令,將該數據傳遞給CPU

 

第三章: Expressions and Flow Control

一:局部變量和實例變量

定義變量是指設定變量的數據類型和變量的名字,

Java語言要求變量遵循先定義,再初始化,然後使用的規則。

作用域:指它的存在範圍,只有在這個範圍內,程序代碼才能訪問它。

變量的生命週期是指從一個變量被創建並分配內存空間開始,

            到這個變量被銷燬並清除其所佔用內存空間的過程

局部變量(參數變量也可以看成是局部變量):

   1)位置:定義在方法中或者在方法中的{}

   2)使用:先賦值後使用

   3)作用域:定義的方法中或者定義的{}中

   4)生命週期:從變量的定義到方法調用結束

實例變量:

   1)位置:定義方法外,類裏面

   2)使用:系統會進行默認初始化

   3)作用域:作用於整個類

   4)生命週期:從對象創建的時候到gc回收內存結束

局部變量的例子:

public void method1() {

    int a = 0;   //局部變量,作用域爲整個method01方法;

     { int b = 0; //局部變量,作用域爲所處的代碼塊;

         b = a;

     }

     b = 20;   //編譯出錯,b不能被訪問;

}

實例變量的例子:

class Test {

          private int n1=0;

          private int n2=0;

 

          public int add() {

             int result = n2 + n2;

             return result;

           }

}

 

二:操作符:操作符能與相應類型的數據組成表達式,來完成相應的運算。

a)數學運算操作符    

   +數據類型值相加或字符串連接;

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

 

b) 賦值操作符:

      = :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會向數據類型高的類型轉換

 

c) 比較操作符

   >  大於

   >= 大於等於

   <  小於

   <= 小於等於

以上操作符只適用於整數類型和浮點數類型;

 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的關係

 

d)相等操作符                     

== 等於

!= 不等於

既可以是基本類型,也可以是引用類型:

基本數據類型比較是真正的數值

引用類型比較的是地址,如果要比較引用類型真正的數據使用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

 

e) 移位操作符,針對二進制操作  

>> 算術右移位運算,也稱做帶符號右移位運算。最高爲補符號位。

>>> 邏輯右移位運算,也稱爲不帶符號右移位運算。

<< 左移位運算,也稱爲不帶符號左移位運算。

 

f) 位運算操作符  

& :與運算,運算規則爲: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===>輸出相應的二進制

 

f) 邏輯操作符

   短路操作符,如果能根據操作左邊的布爾表達式

   就能推算出整個表達式的布爾值,將不執行操作

   符右邊的布爾表達式;

&&:左邊的布爾表達式的值爲false, 整個表達式值肯定爲false, 

         此時會忽略執行右邊的布爾表達式。

||:左邊的布爾表達式的值爲true, 整個表達式值肯定爲true, 

         此時會忽略執行右邊的布爾表達式。 

if(條件1&&條件2){}  

   if條件1爲假,不會執行條件2

   if條件1爲真,會執行條件2

if(條件1||條件2){}  

   if條件1爲真,不會執行條件2

   if條件1爲假,會執行條件2 

 

g) 條件操作符

布爾表達式 ? 表達式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);

 

三.數據類型的轉換

    1)基本數據類型轉換

      隱式的數據類型轉換:精度小的數據給精度大的數據

      強制(顯式)的數據類型轉換:(type)精度大的數據給精度小的數據

       System.out.println((int)(char)(byte)-1);

  00000000 00000000 00000000 0000 0001

  11111111 11111111 11111111 111111111

  11111111

  11111111 11111111

  00000000 00000000 11111111 111111111

  65535

       數據類型在轉換的時候注意:

              a)如果將精度小的數據轉爲精度大的數據時。

                  如果轉之前是有符號數,在前面補符號位

                  如果轉之前是無符號數,在前面補0

              b)如果將精度大的數據轉爲精度小的數據時。

                  從低位竊取位數   

  2)引用數據類型轉換

      隱式的數據類型轉換:子類轉換父類

      強制(顯式)的數據類型轉換:父類轉換子類

      String str="hello";

      Object o=str;

      String str2=(String)o;

 

 Person p = new Student();

 Student s = (Student)new person();

 

 

 System.out.println((int)(char)(byte)-1);

 

0000 0000 0000 0000 1111 1111 1111 1111

1+2+4+8+16+32+64+128+

256+512+1024+2048+

4096+8192+16384+32768

 

int c=a>b?a:b;

等價於

if(a>b)c=a;

else c=b;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章