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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

java中的成员变量和局部变量的区别_java中成员变量与局部变量区别分析

發(fā)布時間:2025/3/11 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中的成员变量和局部变量的区别_java中成员变量与局部变量区别分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文實(shí)例分析了java中成員變量與局部變量區(qū)別。分享給大家供大家參考。具體分析如下:

成員變量:在這個類里定義的私有變量,屬于這個類。

創(chuàng)建以及使用成員變量

public class Person {

String name;

String Sex;

int age;

double Height;

public static void main(String arges[])

{

Person p=new Person();

p.name="小黃";

p.Sex="男";

p.age=20;

p.Height=1.7;

System.out.println("姓名:"+p.name+",性別"+p.Sex+",年齡:"+p.age+",年齡:"+p.Height);

}

}

成員變量初始化過程

一、類的初始化

對于類的初始化:類的初始化一般只初始化一次,類的初始化主要是初始化靜態(tài)成員變量。

類的編譯決定了類的初始化過程。

編譯器生成的class文件主要對定義在源文件中的類進(jìn)行了如下的更改:

1)先按照靜態(tài)成員變量的定義順序在類內(nèi)部聲明成員變量。

2)再按照原java類中對成員變量的初始化順序進(jìn)行初始化。

一個java類和編譯后的class對應(yīng)的轉(zhuǎn)換如下:

源文件:

public class Person{

public static String name="張三";

public static int age;

static{

age=20;

System.out.println("初始化age");

}

public static String address;

static{

address="北京市";

age=34;

}

public static void main(String[] args) {

System.out.println(name);

System.out.println(age);

System.out.println(address);

}

}

當(dāng)java源代碼轉(zhuǎn)換成一個class文件后,其轉(zhuǎn)換成類似下面的代碼:

public class Person{

public static String name;

public static int age;

public static String address;

static{

name="張三";

age=20;

System.out.println("初始化age");

address="北京市";

age=34;

}

public static void main(String[] args) {

System.out.println(name);

System.out.println(age);

System.out.println(address);

}

}

初始化順序依據(jù)轉(zhuǎn)換后對應(yīng)的class類成員變量的初始化順序依次執(zhí)行,所以所有的靜態(tài)成員變量都是先聲明,后執(zhí)行賦值的,而且賦值的順序也是依照源代碼對靜態(tài)成員變量初始化的順序進(jìn)行的,注意:定義一個成員變量并直接初始化與在靜態(tài)代碼塊中進(jìn)行初始化是等價的,都是依據(jù)它們在源代碼中定義的順序進(jìn)行的。

局部變量

局部變量:在方法體里創(chuàng)建,在方法體外訪問不到這個變量。

局部變量的創(chuàng)建與使用(局部變量必須賦值,成員變量可以不賦值)

public class Person {

public static void main(String arges[])

{

String name="小黃";

String Sex="男";

int age=20;

double Height=1.70;

System.out.println("姓名:"+name+",性別"+Sex+",年齡:"+age+",年齡:"+Height);

}

}

看例子

public class PassTest {

public static void main(String args[]) {

StringBuffer a = new StringBuffer("a");

StringBuffer b = new StringBuffer("b");

a(a, b);

System.out.println(a);

System.out.println(b);

PassTest p = new PassTest();

p.c();

}

static void a(StringBuffer a, StringBuffer b) {

a = a.append(b);

b = a;

}

}

按照局部變量的使用范圍來說 結(jié)果應(yīng)該是 a b 但是 實(shí)際上輸出的確實(shí) ab b 請問為什么?

傳遞參數(shù)引用的問題吧.引用的話,傳遞的應(yīng)該是相同引用的副本.

a方法里邊b=a是改變副本b引用=a,但是對main里的b沒有影響.

a = a.append(b); 主要是a.append(b);這句改變了a引用指向的值,因?yàn)閙ain里的a也是指向同一對象,所以輸出為ab b

如果a = a.append(b);改為 a = new StringBuffer("ab"); 將輸出a b

再看下面兩段程序:

程序一:

public class Variable

{

int i;

void test()

{

int j=8;

if(j==i)

System.out.println("相等");

else

System.out.println("不相等");

}

public static void main(String[] args)

{

Variable v=new Variable();

v.test();

}

}

程序二:

public class Variable

{

void test()

{

int i;

int j=8;

if(j==i)

System.out.println("相等");

else

System.out.println("不相等");

}

public static void main(String[] args)

{

Variable v=new Variable();

v.test();

}

}

第一個程序很正常,編譯時不會出錯。第二個程序編譯時會提示如下錯誤:

D:Programjavatest>javac Variable.java

Variable.java:9: 可能尚未初始化變量 i

if(j==i)

^

錯誤

之所以會出現(xiàn)這樣的錯誤是因?yàn)?#xff1a;成員變量有默認(rèn)值,(被final修飾且沒有static的必須顯式賦值),局部變量不會自動賦值

類體分為兩部分。變量定義部分所定義的變量被稱為類的成員變量,在方法體中定義的變量和方法的參數(shù)都被稱為局部變量

局部變量和成員變量的區(qū)別

局部變量描述的是這個方法體內(nèi)的屬性,而成員變量描述的是這個對象里的屬性。

成員變量可以被public、protected、default、private、static、final修飾符修飾,局部變量只能被final修飾符修飾。

成員變量在堆里進(jìn)行創(chuàng)建,局部變量在棧里進(jìn)行創(chuàng)建。

局部變量是系統(tǒng)默認(rèn)值,局部變量沒有系統(tǒng)默認(rèn)值,必須手動賦值

希望本文所述對大家的java程序設(shè)計(jì)有所幫助。

總結(jié)

以上是生活随笔為你收集整理的java中的成员变量和局部变量的区别_java中成员变量与局部变量区别分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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