JAVA定義變量和基礎的數據類型和關鍵字


    標識符語法

  1)java中定義標識符格式以字母,數字,下划線,$符合組成,不能以數字開頭,且不能為    

      java中的關鍵字。
    
      2)標識符意義要明確,不要亂起
    
      3)標識符區分大小寫例如 z和Z是不同的兩個標識符

   4)java常用關鍵字

 

                  Java中的關鍵字

abstract

assert

boolean

break

byte

case

catch

char

class

continue

const

default

do

double

else

extends

enum

final

finally

float

for

goto

if

implements

import

instanceof

int

interface

long

native

new

package

private

protected

public

return

short

static

synchronized

super

strictfp

this

throw

throws

transient

try

void

volatile

while 

 

數據類型分類和轉換

  

四類

八種

字節數

數據表示范圍

byte

1

-128~127

 

short

2

-32768~32767

 

int

4

-2147483648~2147483648

 

long

8

-263~263-1

浮點型

float

4

-3.403E38~3.403E38

 

double

8

-1.798E308~1.798E308

字符型

char

2

表示一個字符,如('a','A','0','家')

布爾型

boolean

1

只有兩個值true與false

 

1)布爾

基本數據類型中,布爾類型boolean占有一個字節,由於其本身所代碼的特殊含義,boolean類型與其他基本類型不能進行類型的轉換(既不能進行自動類型的提升,也不能強制類型轉換), 否則,將編譯出錯

2)基本數據類型中數值類型的自動類型提升

圖中依次表示了各數值類型的字節數和相應的取值范圍。在Java中,整數類型(byte/short/int/long)中,對於未聲明數據類型的整形,其默認類型為int型。在浮點類型(float/double)中,對於未聲明數據類型的浮點型,默認為double型。

1 public class TestCast {
2  5     
3  6     public static void main(String[] args) {
4  7         byte a = 1000;   // 編譯出錯 
5  8         float b = 1.5;   // 編譯出錯 
6  9         byte c = 3;      // 編譯正確
7 10     }
8 11     
9 12 }

jvm在編譯過程中,對於默認為int類型的數值時,當賦給一個比int型數值范圍小的數值類型變量(在此統一稱為數值類型k,k可以是byte/char/short類型),會進行判斷,如果此int型數值超過數值類型k,那么會直接編譯出錯。因為你將一個超過了范圍的數值賦給類型為k的變量,k裝不下,你又沒有進行強制類型轉換,當然報錯了。但是如果此int型數值尚在數值類型k范圍內,jvm會自定進行一次隱式類型轉換,將此int型數值轉換成類型k。如圖中的虛線箭頭。這一點有點特別,需要稍微注意下。

在其他情況下,當將一個數值范圍小的類型賦給一個數值范圍大的數值型變量,jvm在編譯過程中俊將此數值的類型進行了自動提升

 

 自動類型轉換

 

表示范圍小的數據類型轉換成范圍大的數據類型,這種方式稱為自動類型轉換

自動類型轉換格式:

范圍大的數據類型 變量 = 范圍小的數據類型值

強制類型轉換格式

范圍小的數據類型  變量 = (范圍小的數據類型) 范圍大的數據類型值;

 

public class TestCast {

    public static void main(String[] args) {
        byte p = 3; // 編譯正確:int到byte編譯過程中發生隱式類型轉換
        int  a = 3;
        byte b = a; // 編譯出錯
        byte c = (byte) a; // 編譯正確
        float d = (float) 4.0;
    }

 }

 

區別在於前者3是直接量,編譯期間可以直接進行判定,后者a為一變量,需要到運行期間才能確定,也就是說,編譯期間為以防萬一,當然不可能編譯通過了。此時,需要進行強制類型轉換。

 

3)其他情況

public class TestCast {

    public static void main(String[] args) {
        long a = 10000000000; //編譯出錯
        long b = 10000000000L; //編譯正確
        int c = 1000;
        long d = c;
        float e = 1.5F;
        double f = e;
    }
 }

如上:定義long類型的a變量時,將編譯出錯,原因在於10000000000默認是int類型,同時int類型的數值范圍是-2^31 ~ 2^31-1,因此,10000000000已經超過此范圍內的最大值,故而其自身已經編譯出錯,更談不上賦值給long型變量a了。

此時,若想正確賦值,改變10000000000自身默認的類型即可,直接改成10000000000L即可將其自身類型定義為long型。此時再賦值編譯正確。

將值為1000的int型變量c賦值給long型變量d,按照上文所述,此時直接發生了自動類型提升, 編譯正確。同理,將e賦給f編譯正確。

接下來,還有一個地方需要注意的是:char型其本身是unsigned型,同時具有兩個字節,其數值范圍是0 ~ 2^16-1,因為,這直接導致byte型不能自動類型提升到char,char和short直接也不會發生自動類型提升(因為負數的問題),同時,byte當然可以直接提升到short型。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM