天天看點

Java基本資料類型、資料類型轉換、常量聲明規範和final關鍵字

一、基本資料類型

Java語言提供了八種基本類型。六種數字類型(四個整數型,兩個浮點型),一種字元類型,還有一種布爾型。

1、整型byte 、short 、int 、long

2、浮點型float 、 double

3、字元型char

4、布爾型boolean

1.1 整型(byte、short、int、long)

雖然byte、short、int、long 資料類型都是表示整數的,但是它們的取值範圍可不一樣。

1.byte 的取值範圍:-128~127(-2的7次方到2的7次方-1)

2.short 的取值範圍:-32768~32767(-2的15次方到2的15次方-1)

3.int 的取值範圍:-2147483648~2147483647(-2的31次方到2的31次方-1)

4.long 的取值範圍:-9223372036854774808~9223372036854774807(-2的63次方到2的63次方-1)

1.2 浮點型(float、double)

float 和 double 都是表示浮點型的資料類型,它們之間的差別在于精确度的不同。

1.float(單精度浮點型)取值範圍:3.402823e+38~1.401298e-45(e+38 表示乘以10的38次方,而e-45 表示乘以10的負45次方)

2.double(雙精度浮點型)取值範圍:1.797693e+308~4.9000000e-324(同上)

double 類型比float 類型存儲範圍更大,精度更高。

通常的浮點型資料在不聲明的情況下都是double型的,如果要表示一個資料時float 型的,可以在資料後面加上 “F” 。

浮點型的資料是不能完全精确的,有時候在計算時可能出現小數點最後幾位出現浮動,這時正常的。

1.3 字元型(char)

char 有以下的初始化方式:

char ch = 'a'; // 可以是漢字,因為是Unicode編碼
char ch = 1010;// 可以是十進制數、八進制數、十六進制數等等。
char ch = '\0'; // 可以用字元編碼來初始化,如:'\0' 表示結束符,它的ascll碼是0,這句話的意思和 ch = 0 是一個意思。
           

1.4 布爾型(boolean)

boolean 取值:true 、false 。

二、Java資料類型轉換

資料類型的轉換,分為自動轉換和強制轉換。自動轉換不需要使用者提前聲明,一般是從位數低的類型向位數高的類型轉換;強制類型轉換則必須在代碼中聲明,轉換順序不受限制。

2.1 自動資料類型轉換

自動轉換按從低到高的順序轉換。不同類型資料間的優先關系如下:

低--------------------------------------------->高

byte,short,char-> int -> long -> float -> double

運算中,不同類型的資料先轉化為同一類型,然後進行運算,轉換規則如下:

操作數1類型 操作數2類型 轉換後的類型
byte、short、char int int
byte、short、char、int long long
byte、short、char、int、long float float
byte、short、char、int、long、float double double

自動轉換也要小心資料溢出問題,看下面的例子。

int count = 100000000;
int price = 1999;
long totalPrice = count * price;
           

編譯沒任何問題,但結果卻輸出的是負數,這是因為兩個 int 相乘得到的結果是 int, 相乘的結果超出了 int 的代表範圍。這種情況,一般把第一個資料轉換成範圍大的資料類型再和其他的資料進行運算。

int count = 100000000;
int price = 1999;
long totalPrice = (long) count * price;
           

另外,向下轉換時可以直接将 int 常量字面量指派給 byte、short、char 等資料類型,而不需要強制轉換,隻要該常量值不超過該類型的表示範圍都能自動轉換。

2.2 強制資料類型轉換

強制轉換的格式是在需要轉型的資料前加上“( )”,然後在括号内加入需要轉化的資料類型。有的資料經過轉型運算後,精度會丢失,而有的會更加精确。

public class Demo {

   public static void main(String[] args){

   int x;

   double y;

   x = (int)34.56 + (int)11.2;  // 丢失精度

   y = (double)x + (double)10 + 1;  // 提高精度

   System.out.println("x=" + x);

   System.out.println("y=" + y);
   }
}
           

三、常量的聲明規範

**定義:**常量通常指的是一個固定的值,被final修飾的變量,初始化一次後,就不能再次更改其值。

在為所有的對象共享時,常量時非常有用的。

聲明常量,執行個體代碼如下:

final double PI = 3.1415926D; //聲明double型常量PI并指派
final double BOOL = true; //聲明double型常量BOOL并指派
           

定義的一般規則,類名首字母全部大寫,常量全部大寫用下劃線分隔,變量用駝峰形式。注意使用long指派用L時不能寫小寫的L要寫大寫的,不然會和數字“1”傻傻分不清。

public class Client{

public static final int SUM_PEOPLE_NUMBER = 2;

public static void main(String[] args){
    String studentName = "wang";
    long number = 1L;
  	}
}
           

四、Java中的static和final關鍵字

4.1 static

被static修飾的成員變量和成員方法獨立于該類的任何對象。也就是說,它不依賴類特定的執行個體,被類的所有執行個體共享。隻要這個類被加載,Java虛拟機就能根據類名在運作時資料區的方法區内找到他們。是以,static對象可以在它的任何對象建立之前通路,無需引用任何對象。

static變量前可以有private修飾,表示這個變量可以在類的靜态代碼塊中,或者類的其他靜态成員方法中使用(當然也可以在非靜态成員方法中使用–廢話),但是不能在其他類中通過類名來直接引用,這一點很重要。實際上你需要搞明白,private是通路權限限定,static表示不要執行個體化就可以使用

用static修飾的代碼塊表示靜态代碼塊,當Java虛拟機(JVM)加載類時,就會執行該代碼塊

4.1.1 static變量

按照是否靜态的對類成員變量進行分類可分兩種:

  • 一種是被static修飾的變量,叫靜态變量或類變量
  • 另一種是沒有被static修飾的變量,叫執行個體變量。

    兩者差別:

  • 靜态變量被所有的對象所共享,在記憶體中隻有一個副本,它當且僅當在類初次加載時會被初始化。
  • 非靜态變量是對象所擁有的,在建立對象的時候被初始化,存在多個副本,各個對象擁有的副本互不影響。
  • static是不允許用來修飾局部變量

private是通路權限限定,static表示不要執行個體化就可以使用

在加載類的過程中完成靜态變量的記憶體配置設定,可用類名直接通路(友善),當然也可以通過對象來通路(但是這是不推薦的)。

4.1.2 static修飾方法

static修飾的方法不需要針對某些對象進行操作,其運作結果僅僅與參數有關,調用的話直接用類名就可以調用了。是以static方法中不能對非static成員進行通路。

4.1.3 static代碼塊

static代碼塊也叫靜态代碼塊,是在類中獨立于類成員的static語句塊,可以有多個,位置可以随便放,它不在任何的方法體内。

JVM加載類時會執行這些靜态的代碼塊,如果static代碼塊有多個,JVM将按照它們在類中出現的先後順序依次執行它們,每個代碼塊隻會被執行一次。

在類加載期間執行并且隻執行一次,可以用來加載靜态資源。(如圖檔、音頻和視訊等檔案)。

4.2 final

4.2.1 final變量

當你在類中定義變量時,在其前面加上final關鍵字,那便是說,這個變量一旦被初始化便不可改變,這裡不可改變的意思對基本類型來說是其值不可變,而對于對象變量來說其引用不可再變。

  • 首先,用final關鍵字修飾的變量,隻能進行一次指派操作,并且在生存期内不可以改變它的值。
  • 然後,final修飾的成員變量,我們有且隻有兩個地方可以給它指派,一個是聲明該成員時指派,另一個是在構造方法中指派,在這兩個地方我們必須給它們賦初始值。

4.2.2 final方法

  • 表示該方法無法被重寫,但是能被繼承。

4.2.3 final類

  • 用final修飾的類是無法被繼承的。

final類不能被繼承,是以final類的成員方法沒有機會被重寫,預設都是final的。在設計類時候,如果這個類不需要有子類,類的實作細節不允許改變,并且确信這個類不會載被擴充,那麼就設計為final類。

4.3 static和final一塊用表示什麼

static final用來修飾成員變量和成員方法,可簡單了解為全局常量。

  • 對于變量,表示一旦給值就不可修改,并且通過類名可以通路。
  • 對于方法,表示不可覆寫,并且可以通過類名直接通路。

    引用參考:

  1. http://www.runoob.com/java/java-modifier-types.html
  2. https://www.cnblogs.com/linkstar/p/5228054.html
  3. https://www.cnblogs.com/xuyunqi/p/7875998.html
  4. https://blog.csdn.net/zhangyanli0414/article/details/79008681