日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java-基础-变量

發(fā)布時(shí)間:2025/3/18 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java-基础-变量 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在java中,數(shù)據(jù)是以常量和變量兩種方法形式進(jìn)行存儲(chǔ)和表示的(實(shí)際上,所有程序的數(shù)據(jù)都是這兩種形式)。

四類八種

第一類:邏輯型boolean 默認(rèn)初始值是false 1Byte
第二類:文本型char 2Byte unicode編碼,一個(gè)漢字兩個(gè)字節(jié)
第三類:整數(shù)型(byte、short、int、long)
byte 1 Byte -128-127
short 2Byte
int 4Byte java默認(rèn)是INT
long 8Byte L
不受操作系統(tǒng)的影響保證了java的移植性。
第四類:浮點(diǎn)型(float、double)
double 是默認(rèn)的
float F
在數(shù)學(xué)中0到1有無數(shù)個(gè)浮點(diǎn)數(shù);而計(jì)算機(jī)是離散的,所以表示的時(shí)候有誤差,計(jì)算機(jī)用精度(小數(shù)點(diǎn)后幾位來表示正確),比較浮點(diǎn)數(shù)時(shí)a==0.1是不合適的,應(yīng)該a-0.1==0;如果a是0.1,則即使有誤差 a-0.1==0因?yàn)閍和0.1都被表示為一個(gè)有誤差的計(jì)算機(jī)二進(jìn)制。比較按照精度來算。

變量

type variableName [=value][, variableName[=value]...];

type可以是java的基本類型之一。
type可以是Java的引用類型(即類及接口類型)的名字,外部類或接口必須有訪
問權(quán)限,使用非lang包下的類必須先導(dǎo)入。
變量名(variableName),java約定變量名以能描述該變量意義的單詞表示(單詞小寫),以增加程序的可讀性。駝峰法則。
“=”,表示賦值,不是數(shù)學(xué)意義上的“等于”,java環(huán)境下的“等于”通常用于邏輯表達(dá)式,用符號(hào)“==”(雙等號(hào))表示。賦值同樣不等于就相等喲,比如:

Integer a =129,b =129; System.out.println(a==b); //結(jié)果:false

其中a、b為Integer型引用變量,賦的值都是129,但是兩者并不相等。
聲明格式
變量的訪問權(quán)限修飾符,訪問權(quán)限標(biāo)識(shí)符比照類的訪問權(quán)限
static,靜態(tài)成員變量修飾符,與它相對(duì)應(yīng)的是實(shí)例變量
final,最終變量修飾符,即常量
類變量與實(shí)例變量的相同點(diǎn):
1)都可以用任意權(quán)限修飾符對(duì)訪問權(quán)限加以限制;2)都可以被類自身的方法直接調(diào)用。
類變量與實(shí)例變量的區(qū)別是:
1)存儲(chǔ)位置不同。靜態(tài)變量存儲(chǔ)于方法區(qū) method area,而實(shí)例變量存儲(chǔ)于堆區(qū)heap area。
2)生命周期不同。靜態(tài)變量在加載類過程中優(yōu)先加載,其生命周期取決于類的生命周期;實(shí)例變量在創(chuàng)建實(shí)例時(shí)才創(chuàng)建,它的生命周期取決于實(shí)例的生命周期。
3)引用對(duì)象不同。靜態(tài)變量屬于類,被類的所有實(shí)例共享,可以直接使用類名來引用也可以通過類的實(shí)例引用;而實(shí)例變量則屬于某個(gè)對(duì)象,它必須在創(chuàng)建對(duì)象后才可以
通過這個(gè)對(duì)象來使用。
4)使用方法不同。一個(gè)類只能有一個(gè)同名靜態(tài)變量,無論是通過類或者任何一個(gè)實(shí)例對(duì)靜態(tài)變量重新賦值,結(jié)果都是一樣;而一個(gè)類創(chuàng)建多少個(gè)實(shí)例就會(huì)有多少個(gè)同名實(shí)
例變量,各實(shí)例變量存儲(chǔ)空間不同,對(duì)其中一個(gè)實(shí)例變量重新賦值不影響其它實(shí)例的同名變量

JVM

method area,又叫靜態(tài)區(qū),跟堆一樣,被所有的線程共享,它包含所有的class和static變量;方法區(qū)中包含的都是在整個(gè)程序中永遠(yuǎn)唯一的元素。
Stack area 棧(stack)區(qū)(VM棧和本地棧),分為3部分:基本類型變量區(qū)、執(zhí)行環(huán)境上下文、操作指令區(qū)。每個(gè)棧中的數(shù)據(jù)(原始類型和對(duì)象引用)都是私有的,其他棧不能訪問。每個(gè)線程包含一個(gè)棧區(qū),棧中只保存基礎(chǔ)數(shù)據(jù)類型的對(duì)象的引用和自定義對(duì)象的引用,對(duì)象都存放在堆區(qū)中。棧區(qū)另外存放方法參數(shù)和局部變量,用于計(jì)算;
堆(heap)區(qū)存放對(duì)象,即類的實(shí)例。每個(gè)對(duì)象都包含一個(gè)與之對(duì)應(yīng)的類的信息。jvm只含一個(gè)堆,被所有線程共享。堆中不存放基本類型的對(duì)象引用,只存放對(duì)象本身。

Java變量的分類

package codetest;public class Variable {public Variable(){}public Variable(int constructorVar){//No Initialization but only declare,and final only is permitted.System.out.println("constructorVar: "+ constructorVar);}static{int staticBlockVar ;//only final is permittedstaticBlockVar=2;//Modify the value of the static variableclassVar=1;System.out.println("staticBlockVar's value: "+staticBlockVar);//The variable is define in a static block, and Can't use out the block}{System.out.println("non-quasi-static");}int instanceVar=1;//The default value of 0 is automatically assigned to classVarint samenameVar;//instance variablestatic int classVar;void changVar(int newValOfMemberVar){//No Initialization but only declare,and final only is permitted.int samenameVar=1;//local variable,only final is permittedtry{this.samenameVar=3;//The use of a instance variable of the same name with local variable.System.out.println("The samenameVar local variable: "+ samenameVar);System.out.println("The samenameVar instance variable: "+this.samenameVar);instanceVar=newValOfMemberVar;classVar=2;int[] a;//do not initializeint[] array=new int[2];//Initialized to the default valuesarray[1]=2;//To the second element to the assignmentSystem.out.println("array[0]:"+ array[0]+ " array[1]:"+ array[1]);//System.out.println(a[0]);//error}catch(Exception ex){ex.toString();}//System.out.println(staticBlockVar);}public static void main(String[] args) {//靜態(tài)變量可以直接使用類名引用 System.out.println("classVar: "+Variable.classVar);//實(shí)例變量必須通過對(duì)象來使用//System.out.println(Variable.member);//error:instanceVar is not a fieldVariable varObject =new Variable();System.out.println("varObject's instanceVar: "+varObject.instanceVar);//同一類的不同實(shí)例,分別為實(shí)例變量分配存儲(chǔ)空間Variable varOb =new Variable();varOb.changVar(2);System.out.println("varOb's instanceVar: "+varOb.instanceVar);System.out.println("varObject's instanceVar: "+varObject.instanceVar);//同一類的靜態(tài)變量,只分配一個(gè)存儲(chǔ)空間System.out.println("classVar: "+Variable.classVar);System.out.println("varOb classVar: "+varOb.classVar);System.out.println("varObject classVar:" + varObject.classVar);} }

1.1 class variable(類變量):聲明在class內(nèi),method之外,且使用static修飾的變量,如上例中的classVar
1.2 instance variable(實(shí)例變量):聲明在class內(nèi),method之外,且未使用static修飾的變量。如上例中的instanceVar
類變量與實(shí)例變量的相同點(diǎn):
1)兩者都可以用任意權(quán)限修飾符對(duì)訪問權(quán)限加以限制;2)兩者都可以被類自身的方法直接調(diào)用。3)兩者都可以不顯式初始化直接使用。java虛擬機(jī)會(huì)自動(dòng)以默認(rèn)值對(duì)它
們進(jìn)行初始化,因此它沒有違反java所有的變量必須初始化以后才能使用的約定。
類變量與實(shí)例變量的區(qū)別是:
1)存儲(chǔ)位置不同。靜態(tài)變量存儲(chǔ)于方法區(qū),而實(shí)例變量存儲(chǔ)于堆區(qū)。
2)生命周期不同。靜態(tài)變量在加載類過程中優(yōu)先加載,其生命周期取決于類的生命周期;實(shí)例變量在創(chuàng)建實(shí)例時(shí)才創(chuàng)建,它的生命周期取決于實(shí)例的生命周期。
3)引用對(duì)象不同。靜態(tài)變量屬于類,被類的所有實(shí)例共享,可以直接使用類名來引用也可以通過類的實(shí)例引用;而實(shí)例變量則屬于某個(gè)對(duì)象,它必須在創(chuàng)建對(duì)象后才可以
通過這個(gè)對(duì)象來使用。
4)使用方法不同。一個(gè)類只能有一個(gè)同名靜態(tài)變量,無論是通過類或者任何一個(gè)實(shí)例對(duì)靜態(tài)變量重新賦值,結(jié)果都是一樣;而一個(gè)類創(chuàng)建多少個(gè)實(shí)例就會(huì)有多少個(gè)同名實(shí)
例變量,各實(shí)例變量存儲(chǔ)空間不同,對(duì)其中一個(gè)實(shí)例變量重新賦值不影響其它實(shí)例的同名變量。
1.3 formal parameter variable(形參變量),包括一般方法參數(shù)變量(method parameter,聲明在method小括號(hào)內(nèi)的變量,如上例中的newValOfMemberVar)和構(gòu)造器參數(shù)
變量(constructor parameter,聲明在constructor小括號(hào)內(nèi)的變量,如上例中的constructorVar)。java要求形參變量,只能使用默認(rèn)訪問權(quán)限和final聲明,并且聲明
時(shí)不能同時(shí)初始化。
1.4 local variable(狹義的局部變量):聲明在method內(nèi)的變量,只能以final修飾。
當(dāng)方法內(nèi)的局部變量與成員變量(指類變量或?qū)嵗兞?#xff09;同名時(shí),以”this”關(guān)鍵字加以區(qū)別。如上例中實(shí)例變量sameanmeVar與方法changVar()中定義的局部變量
sameanmeVar同名,實(shí)例變量在使用時(shí)加前綴“this.”與局部變量加以區(qū)別。
1.5 exception-handler parameter(異常標(biāo)識(shí)變量):聲明在catch小括號(hào)內(nèi)的變量,如上例中ex。
異常標(biāo)識(shí)變更即catch方法的形參必須聲明為Exception對(duì)象及其子對(duì)象類型,它只用于緊跟著的執(zhí)行語句塊內(nèi)。
1.6 array element(數(shù)組):數(shù)組的元素值沒有識(shí)別名稱,必須透過數(shù)組和索引值(index)來識(shí)別,索引值從0開始。如上例中array數(shù)組第2個(gè)元素的使用。
新建一個(gè)數(shù)組,如果沒有直接賦值,jVM會(huì)自動(dòng)為它所有的元素初始為默認(rèn)值。注意:是新建一個(gè)數(shù)組,不是聲明一個(gè)數(shù)組。如上例中數(shù)組a[]只聲明沒有初始,使用會(huì)提
示錯(cuò)誤。
1.7-1.8 static block variable(靜態(tài)塊變量主)和非靜態(tài)塊(non-quasi-static):聲明在靜態(tài)塊內(nèi)(static{…})或非靜態(tài)塊內(nèi)({})的變量。如上例中的變量
staticBlockvar。它只能由final修飾,并且僅用于在聲明的靜態(tài)塊內(nèi)。
在使用這兩種變量時(shí)要注意它們所在塊的不同。一是執(zhí)行時(shí)間不同。非靜態(tài)變量是執(zhí)行構(gòu)造方法之前;靜態(tài)塊在類文件加載后的初始化階段執(zhí)行 。二是執(zhí)行次數(shù)不同。靜
態(tài)塊只在類加載初始過程中執(zhí)行一次;每一次初始化對(duì)象,都會(huì)導(dǎo)致一次非靜態(tài)塊的執(zhí)行。這部分詳細(xì)信息請(qǐng)參閱欣’s博客-《Java中自由塊的執(zhí)行順序》。
2、根據(jù)變量內(nèi)存來分類,Java變量有兩種:
2.1 heap variable:占用的內(nèi)存在heap中,這類變量包括了class variable,instance variable,array component,這類變量會(huì)自動(dòng)被JVM初始化默認(rèn)值。
2.2 stack variable:通常廣義的局部變量(pan-local variable),其占的內(nèi)存在stack中,這類變量包括了狹義的局部變量,method parameter,exception-handler
parameter,constructor parameter。狹義的局部變量不會(huì)被JVM初始化成默認(rèn)值,使用者必須自行初始化該變量,但是parameter類(包括method parameter,exception-
handler parameter,constructor parameter)會(huì)被JVM初始化成傳入值(即實(shí)參)。
3、根據(jù)使用方式來為變量分類,主要有三種:
3.1 class variable,與根據(jù)聲明分類對(duì)應(yīng)。
3.2 instance variable,與根據(jù)聲明分類對(duì)應(yīng)。
3.3 廣義的局部變量,除了上面兩種以及數(shù)組元素以外,都可視為廣義的局部變量,數(shù)組通常被視為對(duì)象,array component視為對(duì)象的instance variable.
1、在Java中,所有的變量必須先聲明再使用。
2、在static 方法中引用任何實(shí)例變量都是非法的。
一般來說,靜態(tài)方法常常為應(yīng)用程序中的其它類提供一些實(shí)用工具所用,在Java的類庫中大量的靜態(tài)方法正是出于此目的而定義的。

與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的java-基础-变量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。