全面解析Java支持的數(shù)據(jù)類型及Java的常量和變量類型
基本數(shù)據(jù)類型
變量就是用來(lái)儲(chǔ)存值而保留的內(nèi)存位置。這就意味著當(dāng)你創(chuàng)建一個(gè)變量時(shí)就會(huì)在內(nèi)存中占用一定的空間。
基于變量的數(shù)據(jù)類型,操作系統(tǒng)會(huì)進(jìn)行內(nèi)存分配并且決定什么將被儲(chǔ)存在保留內(nèi)存中。因此,通過(guò)給變量分配不同的數(shù)據(jù)類型,你可以在這些變量中存儲(chǔ)整數(shù),小數(shù)或者字字母。
Java 中有兩種有效地?cái)?shù)據(jù)類型:
- 原始數(shù)據(jù)類型
- 引用數(shù)據(jù)類型
原始數(shù)據(jù)類型
Java 支持 8 種原始數(shù)據(jù)類型。原始數(shù)據(jù)類型是由該語(yǔ)言預(yù)先定義的并用關(guān)鍵詞命名的。下面讓我們深入學(xué)習(xí)一下這 8 種數(shù)據(jù)類型。
字節(jié)型(byte)
字節(jié)型是一種 8 位有正負(fù)的二進(jìn)制整數(shù)
最小值是 -128(-2^7)
最大值是 127(2^7-1)
默認(rèn)值為 0
字節(jié)型數(shù)據(jù)類型主要是為了在大型數(shù)組內(nèi)節(jié)省空間,主要是替代整數(shù)由于字節(jié)型比整數(shù)小 4 倍。
例如:
byte a = 100 , byte b = -50
短整數(shù)(short)
短整數(shù)是一種 16 位有正負(fù)的二進(jìn)制整數(shù)
最小值是 -32768(-2^15)
最大值是 32767(2^15-1)
短整數(shù)類型的數(shù)據(jù)也可以像字節(jié)型一樣用于節(jié)省空間。短整數(shù)比整數(shù)小兩倍
默認(rèn)值為 0
例如:
short s = 10000, short r = -20000
整數(shù)型(int)
整數(shù)型是一種 32 位有正負(fù)的二進(jìn)制整數(shù)
最小值是 - 2,147,483,648(-2^31)
最大值是 2,147,483,647(2^31 -1)
整數(shù)型一般默認(rèn)被應(yīng)用于整數(shù)值除非擔(dān)心內(nèi)存不夠用。
默認(rèn)值為 0
例如:
int a = 100000, int b = -200000
長(zhǎng)整型(long)
長(zhǎng)整型是一種 64 位有正負(fù)的二進(jìn)制整數(shù)
最小值是 -9,223,372,036,854,775,808(-2^63)
最大值是 9,223,372,036,854,775,807 (2^63 -1)
這種數(shù)據(jù)類型一般是在需要比整數(shù)型范圍更大時(shí)應(yīng)用。
默認(rèn)值為 0L
例如:
long a = 100000L, int b = -200000L
浮點(diǎn)型(float)
浮點(diǎn)型數(shù)據(jù)是一種單精度的 32 位 IEEE 754 標(biāo)準(zhǔn)下的浮點(diǎn)數(shù)據(jù)。
浮點(diǎn)型數(shù)據(jù)主要是為了在大型浮點(diǎn)數(shù)字?jǐn)?shù)組中節(jié)約內(nèi)存。
默認(rèn)值是 0.0f。
浮點(diǎn)型數(shù)據(jù)不能用于如貨幣這樣的精確數(shù)據(jù)。
例如:
float f1 = 234.5f
雙精度型(double)
雙精度型數(shù)據(jù)是一種雙精度的 64 位 IEEE 754 標(biāo)準(zhǔn)下的浮點(diǎn)數(shù)據(jù)。
這種數(shù)據(jù)類型主要是默認(rèn)被用于表示小數(shù)的值,一般是默認(rèn)的選擇。
雙精度型數(shù)據(jù)不能用于如貨幣這樣的精確數(shù)據(jù)。
默認(rèn)值是 0.0d
例如:
double d1 = 123.4
布爾型(boolean)
布爾型數(shù)據(jù)代表一個(gè)信息比特。
它只有兩個(gè)可能的值:真(true)和假(false)
這種數(shù)據(jù)類型用于真假條件下的簡(jiǎn)單標(biāo)記。
默認(rèn)值是假(false)
例如:
boolean one = true
字符型(char)
字符型數(shù)據(jù)是簡(jiǎn)單的 16 位 Unicode 標(biāo)準(zhǔn)下的字符。
最小值是: '\u0000' (或 0)。
最大值是: '\uffff' (或 65,535 )。
字符型數(shù)據(jù)可以用來(lái)儲(chǔ)存任意字母。
例如: char letter A(字符型的字母A) ='A'
引用數(shù)據(jù)類型
引用數(shù)據(jù)類型是由類的編輯器定義的。他們是用于訪問(wèn)對(duì)象的。這些變量被定義為不可更改的特定類型。例如:Employee, Puppy 等等。
類對(duì)象和數(shù)組變量就是這種引用數(shù)據(jù)類型。
任何引用數(shù)據(jù)類型的默認(rèn)值都為空。
一個(gè)引用數(shù)據(jù)類型可以被用于任何聲明類型和兼容類型的對(duì)象。
例如:
Animal animal = new Animal("giraffe");
Java 常量
常量是代表固定值的源代碼。他們直接以代碼的形式代表而沒(méi)有任何估計(jì)。
常量可以被分配給任意的原始變量類型。例如:
byte a = 68; char a = 'A'
字節(jié)型,整數(shù)型,長(zhǎng)整型和短整型也可以由十進(jìn)制,十六進(jìn)制和八進(jìn)制計(jì)數(shù)系統(tǒng)表示。
當(dāng)用這些技術(shù)系統(tǒng)表示直接量時(shí),前綴 0 是為了標(biāo)明八進(jìn)制,前綴 0x 是為了標(biāo)明十六進(jìn)制。例如:
int decimal = 100; int octal = 0144; int hexa = 0x64;
Java 中的字符串型常量的規(guī)定和其他大多數(shù)語(yǔ)言一樣,也是要寫在雙引號(hào)中間。字符串型直接量的例子如下:
"Hello World" "two\nlines" "\"This is in quotes\""
字符和字符串型常量可以包含任意的 Unicode 字母。例如:
char a = '\u0001'; String a = "\u0001";
Java 語(yǔ)言也支持一些特殊的轉(zhuǎn)義序列的字符和字符串直接量。他們是:
轉(zhuǎn)義字符 | |
---|---|
\n | 換行 (0x0a) |
\r | 回車 (0x0d) |
\f | 換頁(yè) (0x0c) |
\b | 退格 (0x08) |
\s | 空格 (0x20) |
\t | tab |
\" | 雙引號(hào) |
\' | 單引號(hào) |
\ | 反斜杠 |
\ddd | 八進(jìn)制字符 (ddd) |
\uxxxx | 十六進(jìn)制 UNICODE 字符 (xxxx) |
變量類型
變量可以給我們提供我們程序可以操縱的命名的存儲(chǔ)。Java 中的每種變量都有特定的類型,這決定了變量的大小和它的設(shè)計(jì)占用內(nèi)存空間;這一些列的值可以存儲(chǔ)在那個(gè)內(nèi)存空間中;變量可以應(yīng)用的操作。
在使用前你必須現(xiàn)將所要使用的變量進(jìn)行聲明。聲明變量的基本格式如下:
data type variable [ = value][, variable [= value] ...] ;
這里的 data type 是 Java 的一種數(shù)據(jù)類型,variable 是一種變量的名稱。要聲明一個(gè)以上的特定變量類型,你可以采用逗號(hào)分隔開(kāi)。
下面是 Java 中有效的變量聲明和賦值的例子:
int a, b, c; // Declares three ints, a, b, and c. int a = 10, b = 10; // Example of initialization byte B = 22; // initializes a byte type variable B. double pi = 3.14159; // declares and assigns a value of PI. char a = 'a'; // the char variable a iis initialized with value 'a'
Java 中共有三種變量:
- 本地變量
- 實(shí)例變量
- 類、靜態(tài)變量
本地變量
- 本地變量在方法、構(gòu)造器或者塊中聲明
- 本地變量在方法、構(gòu)造器或者塊進(jìn)入時(shí)被創(chuàng)建,一旦退出該變量就會(huì)被摧毀
- 可訪問(wèn)描述符不能用于本地變量
- 本地變量?jī)H在已經(jīng)聲明的方法、構(gòu)造器或者塊中可見(jiàn)
- 本地變量在棧深度內(nèi)部實(shí)施
- 本地變量沒(méi)有默認(rèn)值,因此本地變量必須被聲明并且在第一次使用前要給它賦值
例子
這里,age(年齡)是本地變量。這是在 pupAge() 方法下定義的,它的范圍僅限于這個(gè)方法。
public class Test{ public void pupAge(){ int age = 0; age = age + 7; System.out.println("Puppy age is : " + age); } public static void main(String args[]){ Test test = new Test(); test.pupAge(); } }
上述代碼會(huì)輸出如下結(jié)果:
Puppy age is: 7
例子
下面的例子使用了本地變量 age 但是沒(méi)有進(jìn)行初始化,所以在編輯是就會(huì)顯示錯(cuò)誤。
public class Test{ public void pupAge(){ int age; age = age + 7; System.out.println("Puppy age is : " + age); } public static void main(String args[]){ Test test = new Test(); test.pupAge(); } }
編輯時(shí)會(huì)產(chǎn)生如下錯(cuò)誤:
Test.java:4:variable number might not have been initialized age = age + 7; ^ 1 error
實(shí)例變量
- 實(shí)例變量在類中聲明,但是它在方法、構(gòu)造器或者塊外。
- 當(dāng)堆中的對(duì)象被分配了一個(gè)空間時(shí),每個(gè)實(shí)例變量的位置就被創(chuàng)建了。
- 當(dāng)對(duì)象采用關(guān)鍵字“ new ”創(chuàng)建時(shí)實(shí)例變量就被創(chuàng)建了,當(dāng)對(duì)象被銷毀時(shí)它也就被銷毀了。
- 實(shí)例變量的值必須被一個(gè)以上的方法、構(gòu)造器或者塊,或者類中必須出現(xiàn)的對(duì)象的狀態(tài)的重要部分所引用。
- 實(shí)例變量可以在類水平上在使用前或者使用后聲明。
- 實(shí)例變量可以用可訪問(wèn)描述符。
- 實(shí)例變量對(duì)類中的所有方法、構(gòu)造器或者塊可見(jiàn)。一般來(lái)講,推薦將這些變量私有(訪問(wèn)層面)。然而子類的可見(jiàn)性可用可訪問(wèn)描述符給予那些變量。
- 實(shí)例變量有默認(rèn)值。數(shù)字的默認(rèn)值為零,布爾型默認(rèn)值為假,對(duì)象引用默認(rèn)值為空。在聲明或者構(gòu)造器內(nèi)可以進(jìn)行賦值。
- 實(shí)例變量可以采用直接在類中叫名字方式訪問(wèn)。然而在靜態(tài)方法和不同的類(實(shí)例變量可以被訪問(wèn))中應(yīng)當(dāng)使用完全限定名稱。ObjectReference.VariableName
例子
import java.io.*; public class Employee{ // this instance variable is visible for any child class. public String name; // salary variable is visible in Employee class only. private double salary; // The name variable is assigned in the constructor. public Employee (String empName){ name = empName; } // The salary variable is assigned a value. public void setSalary(double empSal){ salary = empSal; } // This method prints the employee details. public void printEmp(){ System.out.println("name : " + name ); System.out.println("salary :" + salary); } public static void main(String args[]){ Employee empOne = new Employee("Ransika"); empOne.setSalary(1000); empOne.printEmp(); } }
上述代碼會(huì)輸出如下結(jié)果:
name : Ransika salary :1000.0
類、靜態(tài)變量
- 類變量也叫靜態(tài)變量,它是在類中用 static 關(guān)鍵字聲明的,但是它在方法、構(gòu)造器或者塊之外。
- 每個(gè)類中只有一個(gè)類變量,不管這個(gè)類有多少對(duì)象。
- 除了作為常量被聲明之外,類變量很少被應(yīng)用。常量是被作為 public、private, final 和 static 被聲明的變量。實(shí)例變量的初始值不會(huì)被改變。
- 靜態(tài)變量存儲(chǔ)在靜態(tài)內(nèi)存中,很少采用靜態(tài)變量而不是聲明結(jié)束或者用常量public 或 private 之一。
- 靜態(tài)變量隨著程序的開(kāi)始和結(jié)束而開(kāi)始和結(jié)束。
- 可見(jiàn)性和實(shí)例變量相似。然而大多數(shù)靜態(tài)變量被聲明為public由于他們必須為類的使用者所用。
- 默認(rèn)值和實(shí)例變量相似。對(duì)于數(shù)字的默認(rèn)值為零,布爾型默認(rèn)值為假,對(duì)象引用默認(rèn)值為空。在聲明或者構(gòu)造器內(nèi)可以進(jìn)行賦值。除此之外,可以在特殊的靜態(tài)初始化區(qū)賦值。
- 靜態(tài)變量可以用類的名稱訪問(wèn)。ClassName.VariableName
- 當(dāng)靜態(tài)變量被作為 public static final 聲明時(shí),變量(常量)名稱都要用大寫字母。如果靜態(tài)變量不是 public 和 final,它的命名方法和實(shí)例變量和本地變量相同。
例子
import java.io.*; public class Employee{ // salary variable is a private static variable private static double salary; // DEPARTMENT is a constant public static final String DEPARTMENT = "Development "; public static void main(String args[]){ salary = 1000; System.out.println(DEPARTMENT+"average salary:"+salary); } }
上述代碼會(huì)輸出如下結(jié)果:
Development average salary:1000
注:如果變量從類外訪問(wèn),常量就必須以 Employee.DEPARTMENT 訪問(wèn)。
相關(guān)文章
springboot如何獲取接口下所有實(shí)現(xiàn)類
這篇文章主要介紹了springboot如何獲取接口下所有實(shí)現(xiàn)類問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09SpringBoot自動(dòng)配置@EnableAutoConfiguration過(guò)程示例
這篇文章主要為大家介紹了SpringBoot自動(dòng)配置@EnableAutoConfiguration的過(guò)程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10Java實(shí)現(xiàn)較大二進(jìn)制文件的讀、寫方法
本篇文章主要介紹了Java實(shí)現(xiàn)較大二進(jìn)制文件的讀、寫方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02java+jsp+struts2實(shí)現(xiàn)發(fā)送郵件功能
這篇文章主要為大家詳細(xì)介紹了java+jsp+struts2實(shí)現(xiàn)發(fā)送郵件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03Java中System.currentTimeMillis()計(jì)算方式與時(shí)間單位轉(zhuǎn)換講解
本文詳細(xì)講解了Java中System.currentTimeMillis()計(jì)算方式與時(shí)間單位轉(zhuǎn)換,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12java前后端傳值,參數(shù)有集合類型的數(shù)據(jù)時(shí)的兩種操作方式
這篇文章主要介紹了java前后端傳值,參數(shù)有集合類型的數(shù)據(jù)時(shí)的兩種操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11JDK8 new ReentrantLock((true)加鎖流程
這篇文章主要介紹了java面試中常遇到的問(wèn)題JDK8 new ReentrantLock((true)加鎖流程示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07