【java基礎】數據類型和變量在jvm中的存儲

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堆:這裏存放的是“對象的屬性和方法”,仍然是對象的引用那張圖,堆跟棧的關係密不可分。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章