一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java中成員變量與局部變量區別分析

java中成員變量與局部變量區別分析

2019-12-07 16:30shichen2014 JAVA教程

這篇文章主要介紹了java中成員變量與局部變量區別,較為詳細的分析了java中成員變量與局部變量的功能、用法與區別,具有一定參考借鑒價值,需要的朋友可以參考下

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

成員變量:在這個類里定義的私有變量,屬于這個類。
創建以及使用成員變量

復制代碼代碼如下:
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);
    }
}


成員變量初始化過程

 

一、類的初始化

對于類的初始化:類的初始化一般只初始化一次,類的初始化主要是初始化靜態成員變量。
類的編譯決定了類的初始化過程。
編譯器生成的class文件主要對定義在源文件中的類進行了如下的更改:
1)先按照靜態成員變量的定義順序在類內部聲明成員變量。
2)再按照原java類中對成員變量的初始化順序進行初始化。
一個java類和編譯后的class對應的轉換如下:
源文件:

復制代碼代碼如下:
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);
         }
}


當java源代碼轉換成一個class文件后,其轉換成類似下面的代碼:

復制代碼代碼如下:
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);
         }
}


初始化順序依據轉換后對應的class類成員變量的初始化順序依次執行,所以所有的靜態成員變量都是先聲明,后執行賦值的,而且賦值的順序也是依照源代碼對靜態成員變量初始化的順序進行的,注意:定義一個成員變量并直接初始化與在靜態代碼塊中進行初始化是等價的,都是依據它們在源代碼中定義的順序進行的。

 

局部變量

局部變量:在方法體里創建,在方法體外訪問不到這個變量。
局部變量的創建與使用(局部變量必須賦值,成員變量可以不賦值)
 

復制代碼代碼如下:
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;
 }
}

 

按照局部變量的使用范圍來說 結果應該是 a b 但是 實際上輸出的確實 ab b 請問為什么?

傳遞參數引用的問題吧.引用的話,傳遞的應該是相同引用的副本.

a方法里邊b=a是改變副本b引用=a,但是對main里的b沒有影響. 
a = a.append(b); 主要是a.append(b);這句改變了a引用指向的值,因為main里的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)
                      ^

錯誤

之所以會出現這樣的錯誤是因為:成員變量有默認值,(被final修飾且沒有static的必須顯式賦值),局部變量不會自動賦值

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

局部變量和成員變量的區別

局部變量描述的是這個方法體內的屬性,而成員變量描述的是這個對象里的屬性。
成員變量可以被public、protected、default、private、static、final修飾符修飾,局部變量只能被final修飾符修飾。

成員變量在堆里進行創建,局部變量在棧里進行創建。
局部變量是系統默認值,局部變量沒有系統默認值,必須手動賦值

希望本文所述對大家的java程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品午夜国产小视频 | 欧美精品国产第一区二区 | 日韩美毛片 | 久久精品视频uu | 性欧美videofree中文字幕 | 国产精品九九免费视频 | 精品在线播放视频 | 色久久一个亚洲综合网 | 波多野结衣伦理在线观看 | 狠狠的撞进去嗯啊h女强男视频 | 逼逼日| 久久精品观看 | 粉嫩极品国产在线观看免费 | 男女性gif抽搐出入视频 | 久久精品亚洲热综合一本 | 国产成人亚洲综合网站不卡 | 草草线在成年免费视频网站 | 2020年最新国产精品视频免费 | 日韩视频在线精品视频免费观看 | 4虎影视国产在线观看精品 4s4s4s4s色大众影视 | 成全动漫视频在线观看 | 日本人做受全过程视频 | 日本一区二区三区视频在线观看 | 全彩调教侵犯h本子全彩妖气he | 国产高清一区二区三区免费视频 | 色哟哟在线观看 | 成人福利网站 | 亚州在线 | 成人精品一区二区三区中文字幕 | 香蕉在线精品亚洲第一区 | 国产精品亚洲精品日韩已方 | 欧美日韩一级视频 | 国内精品久久久久久久 | 视频一区二区 村上凉子 | 久久久精品日本一区二区三区 | 国产 日韩欧美 | 日韩国产欧美精品综合二区 | 超强台风免费观看完整版视频 | 黑人巨大精品战中国美女 | 国产日韩一区二区 | ak福利影院|