java中最常見的就是數據類型和變量了,所有的一切都是基於這兩個產生的,所以這兩個東西是十分基礎頁是十分重要的,今天就具體的消化一下數據類型和變量的存儲
數據類型
基礎數據類型
1.Java基本類型共有八種:char、boolean、byte、short、int、long、float、double
而基本類型可以分爲三類:
字符類型:char
布爾類型:boolean
數值類型:
- 整數類型:byte、short、int、long
- 浮點數類型:float、double
JAVA中的數值類型不存在無符號的,它們的取值範圍是固定的,不會隨着機器硬件環境或者操作系統的改變而改變。
2.基本數據類型的區別與使用範圍
基本類型 |
含義 |
最小值 |
最大值 |
默認值 |
使用範圍 |
byte |
8位、有符號的、以二進制補碼錶示的整數 |
-128(-2^7) |
127(2^7-1) |
0 |
在大型數組中節約空間,爲int的四分之一 |
short |
16 位、有符號的、以二進制補碼錶示的整數 |
-2^15 |
2^15-1 |
0 |
可以像 byte 那樣節省空間,爲int的二分之一 |
int |
32位、有符號的、以二進制補碼錶示的整數 |
-2^31 |
2^31 - 1 |
0 |
一般地整型變量默認爲 int 類型 |
long |
64 位、有符號的、以二進制補碼錶示的整數 |
-2^63 |
2^63 -1 |
0L |
使用在需要比較大整數的系統上 |
float |
單精度、32位、符合IEEE 754標準的浮點數 |
2的-149次方 |
2的128次方-1 |
0.0f |
在儲存大型浮點數組的時候可節省內存空間 |
double |
雙精度、64 位、符合IEEE 754標準的浮點數 |
2的-1074次方 |
2的1024次方-1 |
0.0d |
浮點數的默認類型爲double類型 |
boolean |
只有兩個取值:true 和 false |
無 |
無 |
false |
只作爲一種標誌來記錄 true/false 情況 |
char |
一個單一的16位Unicode字符 |
\u0000(即爲0) |
\uffff (即爲2^16-1) |
無 |
可以儲存任何字符 |
上表中的float和double的最大值和最小值沒有符號位,即可以當做正數的時候的最大最小值,而負數的時候最大最小值在最前面添加符號後相反即是。
變量在jvm中的存儲
變量和常量
說起變量,不得不提到常量,說直白一點
變量是可以改變的量,如int size=0;
常量是不可以改變的量,如 final int SIZE=0;
看出來區別了嗎?常量即是在最前方加了一個final。
標識符
這裏再提一下上述例子的“size”是什麼東西——標識符
標識符最常見的就是一個字母,一個單詞,或者一個拼音
比如 int i=0 中的i就是標識符,int a 中的a也是標識符
百度的標識符的定義:標識符是用來給類、對象、方法、變量、接口和自定義數據類型命名的。
標識符的使用合法標準:
1.類和接口名 |
每個字的首字母大寫,含有大小寫。例如,MyClass,HelloWorld,Time等。 |
2.方法名 |
首字符小寫,其餘的首字母大寫,含大小寫。儘量少用下劃線。例如,myName,setTime等。這種命名方法叫做駝峯式命名。 |
3.常量名 |
基本數據類型的常量名使用全部大寫字母,單詞與單詞之間用下劃線分隔。對象常量可大小混寫。例如,SIZE_NAME。 |
4.變量名 |
首字符小寫,單詞間分隔符用字母的首字母大寫。不用下劃線,少用美元符號。給變量命名是儘量做到見名知義。列如:int moneySize;(表示錢的大小範圍) |
這裏主要看常量和變量的命名方式~
按照上面的標識符命名方式是絕對正確的,在公司也是可以直接上手的,
而標識符的誤區就是一定不能寫系統關鍵字
abstract |
default |
if |
private |
this |
boolean |
do |
implements |
protected |
throw |
break |
double |
import |
public |
throws |
byte |
else |
instanceof |
return |
transient |
case |
extends |
int |
short |
try |
catch |
final |
interface |
static |
void |
char |
finally |
long |
stricftp |
volatile |
class |
float |
native |
super |
while |
const |
for |
new |
switch |
|
continue |
goto |
package |
synchronized |
|
萌新一看~哇~這麼多不能寫的關鍵字啊,不小心把標識符寫成這個了怎麼辦?
不要緊,這些東西剛開始看起來就是一堆難懂的單詞,但逐漸學習的過程中就會慢慢記住這些關鍵字,根本不用擔心會錯寫成關鍵字噢,這裏列出來不是讓你記住,而是看一哈而已。
往對了寫就不會錯嘛!
變量在jvm中的存儲
講了這麼多別的,主要是爲了萌新,這篇文章的意願是想讓小白也能看的懂,能講到的分支我都會一一去講,缺點是沒有突出重點
1.什麼是jvm?爲什麼變量在jvm中存儲?是如何存儲的?
什麼是jvm?
JVM是Java Virtual Machine(Java虛擬機)的縮寫,它是由軟件技術模擬出計算機運行的一個虛擬的計算機。
java代碼(通過javac.exe編譯)→.class文件(通過java.exe運行)→jvm開始執行操作
我們知道,java程序寫好後通過javac.exe編譯成.class文件,.class文件纔是jvm能夠識別的語言。
而jvm通過識別你的操作系統匹配出適合你操作系統的虛擬機,執行.class文件,這就是java能夠跨平臺運行的原因。
說白了,java之所以可以無視平臺運行,就是因爲jvm這個利器!
爲什麼變量在jvm中存儲?
下圖爲jvm的執行圖
我們可以看到,class文件通過類加載子系統(類加載器),把你的程序分爲五個區域存在內存中。
java棧:這裏存放的是“對象的引用”、“基本數據類型的數據”
- 對象的引用:也就是程序中new出來的那個對象的名字,比如我有個Student類,Student stu=new Student();,這個stu是我創建的對象名,將它放在java棧中,而stu所擁有的屬性和方法放在java堆內,而對象的引用的意思就是把這個stu所對應的java堆中的屬性和方法對應到java棧的stu對象名,如下圖:
- 基本數據類型的數據:char、boolean、byte、short、int、long、float、double這八大基本數據類型都直接存放在java棧內,因爲他們不是類的對象,如下圖:
java堆:這裏存放的是“對象的屬性和方法”,仍然是對象的引用那張圖,堆跟棧的關係密不可分。