【Java】第三章 變量

1 什麼是變量

用來命名一個數據的標示符java

  • year這個標識符就是一個變量,它表明1949這個值
int year = 1949;
  • int是數據類型,表示是整數
  • year是一個標識符
  • =是賦值操做符
  • 1949 是一個數字類型的值
  • ;表示該行結束

2 基本變量類型

(1) 整型

clipboard.png

public class HelloWorld{
    public static void main(String[] args){
        byte b = 1;
        short s = 200;
        int i = 300;
        long l = 400;
        /*若是試圖給byte類型的變量賦予超出其範圍的值,就會產生編譯錯誤*/
        byte b2 = 200;
    }
}

(2) 字符型

  • char類型用於存放一個字符,值用單引號'表示 (雙引號表示字符串)
  • 其長度和short同樣,也是16位的
  • 只能存放一個字符,超過一個字符就會產生編譯錯誤
public class HelloWorld{
    public static void main(String[] args){
        char c = '中';
        //char 只能存放一個字符,超過一個字符就會產生編譯錯誤
        char c2 = '中國'; //報錯
        char c3 = 'ab'; //報錯
    }
}

(3) 浮點型

clipboard.png

  • 默認的小數值是double類型的
    因此float f=54.321會出現編譯錯誤,由於54.321的默認類型是double,其類型長度爲64,超過了float的長度32
  • 在數字後面加一個字母f,直接把該數字聲明成float類型,float f2 = 54.321f,這樣就不會出錯了
public class HelloWorld{
    public static void main(String[] args){
        double d = 123.45;
        //該行會出現編譯錯誤,由於54.321是double型的
        float f = 54.321;
        float f2 = 54.321f;
    }
}

(4) 布爾型

clipboard.png

public class HelloWorld {
    public static void main(String[] args) {
        boolean b1 = true;
        boolean b2 = false;
        // 雖然布爾型真正存放的數據是0(false) 1(true)
        // 可是,不能直接使用0 1 進行賦值
        boolean b3 = 1;
    }
}

(5) String類型

  • String類型其實並不是基本類型,可是它是如此普遍的被使用,經常被誤覺得是一種基本類型
  • String類型是Immutable,一旦建立就不可以被改變

3 字面值

(1) 整數字面值

  • 當以L結尾的時候,一個整數字面值是long類型,不然就是int類型
  • byte,short,int和long的值均可以經過int類型的字面值來建立
public class HelloWorld {
    public static void main(String[] args) {
        long val = 26L; //以L結尾的字面值表示long型
        int decVal = 26; //默認就是int型
        int hexVal = 0x1a; //16進制
        int oxVal = 032; //8進制
        int binVal = 0b11010; //2進制
        System.out.println(oxVal);
    }
}

(2) 浮點數字面值

  • 當以F結尾的時候,就表示一個float類型的浮點數,不然就是double類型
  • 浮點數還能夠用E或者e表示(科學計數法)
    e2表示10的二次方,即100,1.234e2 = 1.234x100

(3) 字符和字符串字面值

  • 字符的字面值放在單引號中
  • 字符串的字面值放在雙引號中
  • 表示轉義,好比須要表示製表符,回車換行,雙引號等就須要用 \t \r \n \" 的方式進行
public class HelloWorld {
    public static void main(String[] args) {
        String name = "蓋倫";
        char a= 'c';
 
        //如下是轉義字符
        char tab = '\t'; //製表符
        char carriageReturn = '\r'; //回車
        char newLine = '\n'; //換行
        char doubleQuote = '\"'; //雙引號
        char singleQuote = '\''; //單引號
        char backslash = '\\'; //反斜槓
         
    }
}

4 類型轉換

(1) 轉換規則

clipboard.png

  • 精度高的數據類型就像容量大的杯子,能夠放更大的數據
  • 精度低的數據類型就像容量小的杯子,只能放更小的數據
  • 小杯子往大杯子裏倒東西,大杯子怎麼都放得下
  • 大杯子往小杯子裏倒東西,有的時候放的下,有的時候就會有溢出
public class HelloWorld {
    public static void main(String[] args) {

        char c = 'A';
        short s = 80;
         
        //雖然short和char都是16位的,長度是同樣的
        //可是彼此之間,依然須要進行強制轉換
        c = (char) s;
        //直接進行轉換,會出現編譯錯誤
        s = c;
         
    }
}

(2) 低精度向高精度轉換

clipboard.png

  • 把i的值賦給l,首先l和i彼此的類型是不同的,那麼可否轉換就取決於彼此的精度
  • L的精度,比i的精度要高
  • 低精度向高精度轉換,正常
public class HelloWorld {
  
    public static void main(String[] args) {
  
        long l = 50;
        int i = 50;
        //int比較小,要放進比較大的long,隨便怎麼樣,都放的進去
        l = i;
    }
}

(3) 高精度向低精度轉換

clipboard.png

把int類型的數據轉成爲byte類型的數據,是有風險的spa

  • 有的時候是能夠轉換的,好比 b = i1 (i1=10);
  • 有的時候不能夠轉換 好比 b= i2 (i2=300) 由於放不下了

強制轉換的意思就是,轉是能夠轉的,可是不對轉換以後的值負責code

public class HelloWorld {
  
    public static void main(String[] args) {
  
        byte b = 5;
        int i1 = 10;
        int i2 = 300;
          
        b = (byte) i1;
        //由於i1的值是在byte範圍以內,因此即使進行強制轉換
        //最後獲得的值,也是10
        System.out.println(b);
          
        //由於i2的值是在byte範圍以外,因此就會按照byte的長度進行截取
        //i2的值是300,其對應的二進制數是 100101100
        //按照byte的長度8位進行截取後,其值爲 00101100 即44
        b =(byte) i2;
        System.out.println(b);
         
        //查看一個整數對應的二進制的方法:
        System.out.println(Integer.toBinaryString(i2));
         
    }
}

5 命名規則

(1) 命名規則

  • 變量命名只能使用字母 數字 $ _
  • 變量第一個字符 只能使用 字母 $ _
  • 變量第一個字符 不能使用數字
  • _ 是下劃線,不是-減號或者—— 破折號

(2) 使用完整的單詞命名,而非縮寫

在命名的時候,儘可能使用完整的單詞進行命名,好比name,moveSpeed,而不是使用縮寫 n,mblog

(3) 關鍵字列表

clipboard.png

clipboard.png

(4) 不能只使用關鍵字,可是能夠包含關鍵字

(5) 中文也是能夠用來命名變量的

6 做用域

(1) 字段,屬性,Field

當一個變量被聲明在類下面,變量就叫作字段者屬性成員變量Fieldip

  • 好比變量i,就是一個屬性

從變量聲明的位置開始,整個類均可以訪問獲得,因此其做用域就是從其聲明的位置開始的整個類作用域

public class HelloWorld {
    int i = 1;
    int j = i;  //其餘的屬性能夠訪問i
    public void method1(){
        System.out.println(i); //方法1裏能夠訪問i
    }
    public void method2(){
        System.out.println(i); //方法2裏能夠訪問i
    }
}

(2) 參數

若是一個變量,是聲明在一個方法上的,就叫作參數字符串

  • 參數的做用域即爲該方法內的全部代碼
  • 其餘方法不能訪問該參數
  • 裏面也不能訪問該參數
public class HelloWorld {
 
    public void method1(int i){ //參數i的做用域即方法method1
        System.out.println(i);
    }
    public void method2(){ 
        System.out.println(i); //method2 不能訪問參數i
    }
    int j = i;  //類裏面也不能訪問參數i
}

(3) 局部變量

  • 聲明在方法內的變量,叫作局部變量
  • 做用域在聲明開始的位置,到其所處於的塊結束位置
public class HelloWorld {
 
    public void method1() {
        int i  = 5;  //其做用範圍是從聲明的第4行,到其所處於的塊結束12行位置
        System.out.println(i);
        {            //子塊
            System.out.println(i); //能夠訪問i
            int j = 6;
            System.out.println(j); //能夠訪問j
        }
        System.out.println(j); //不能訪問j,由於其做用域到第10行就結束了
    }
 
}

7 final

當一個變量被final修飾的時候,該變量只有一次賦值的機會it

(1) 在聲明的時候賦值

public class HelloWorld {
 
    public void method1() {
        final int i = 5;
        i = 10; //i在第4行已經被賦值過了,因此這裏會出現編譯錯誤
    }

}

(2) 在聲明的時候沒有賦值

public class HelloWorld {
 
    public void method1() {
        final int i;
        i = 10; //i在第4行,只是被聲明,可是沒有被賦值,因此在這裏能夠進行第一次賦值
        i = 11; //i在第6行已經被賦值過了,因此這裏會出現編譯錯誤
    }
}

(3) final 修飾其餘

final 除了修飾變量,還能夠修飾類,修飾方法編譯

8 表達式

(1) 以;結尾的一段代碼,即爲一個表達式

表達式是由變量、操做符以及方法調用所構成的結構table

public class HelloWorld {
    public static void main(String[] args) {
        //每一句話都是一個表達式
        int i = 5;  
        System.out.println(5);
    }
}

(2) ;

public class HelloWorld {
    public static void main(String[] args) {
        //一個空;也是一個表達式
        ;
        ;
        ;       
        ;
    }
}

9 塊

從{開始到對應的}結束,即一個塊

public class HelloWorld { //類對應的塊
    public static void main(String[] args) { //主方法對應的塊
        System.out.println("abc");
    }
}
相關文章
相關標籤/搜索