面向?qū)ο?2

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

1、在類中的位置不同
  • 成員變量 類中方法外
  • 局部變量 方法內(nèi)或者方法聲明上
2菲驴、在內(nèi)存中的位置不同
  • 成員變量 堆內(nèi)存
  • 局部變量 棧內(nèi)存
    (局部變量:在方法定義中或者方法聲明上的變量都稱為局部變量)

注:
java程序?yàn)榱颂岣叱绦虻男始龀常蛯?shù)據(jù)進(jìn)行了不同空間的分配,具體的是劃分了如下幾個空間
棧:存放的是局部變量
堆:存放的是所有new出來的東西
(堆內(nèi)存的特點(diǎn):
A 每一個new出來的對象都有地址值
B 每個變量都有默認(rèn)值
byte int short long 0
float double 0.0
char \u000
boolean true false
引用類型 null
C 使用完畢就變成了垃圾,但不會立即回收捍靠,會在垃圾回收器空閑的時候回收 )
方法區(qū):專門存放方法的地方
本地方法區(qū)(和系統(tǒng)有關(guān)):
寄存器:(CPU使用)

QQ圖片20181109191131.png

3沐旨、生命周期不同
  • 成員變量 隨著對象的存在而存在,隨著對象的消失而消失
  • 局部變量 隨著方法的調(diào)用而存在榨婆,隨著方法的調(diào)用完畢而消失
4磁携、初始值不同
  • 成員變量 有默認(rèn)的初始值
  • 局部變量 沒有默認(rèn)的初始值,只能先定義良风,賦值才能使用
package mianxiangduixaing02;
/*成員變量和局部變量的區(qū)別
A 在類中的位置不同

   成員變量 類中方法外
   局部變量 方法內(nèi)或者方法聲明上

B 在內(nèi)存中的位置不同

   成員變量 堆內(nèi)存
   局部變量 棧內(nèi)存
   
C 生命周期不同

   成員變量 隨著對象的存在而存在谊迄,隨著對象的消失而消失
   局部變量 隨著方法的調(diào)用而存在,隨著方法的調(diào)用完畢而消失

D 初始值不同

   成員變量 有默認(rèn)的初始值
   局部變量 沒有默認(rèn)的初始值烟央,只能先定義统诺,賦值才能使用
*/
public class Variable {
    //成員變量
    int num = 10;
    public void show(){
        //局部變量
        int num2=20;
    }
}

package mianxiangduixaing02;

public class variabledemo {

    //不同方法中是不能訪問另一個方法內(nèi)的變量

    public static void main(String[] args){
        Variable v = new Variable();
        System.out.println(v.num);//訪問成員變量

    }
}

         結(jié)果為10
public static void main(String[] args){
        Variable v = new Variable();
        System.out.println(v.num2);//訪問局部變量error
        //只能訪問成員變量,訪問局部變量會報錯
}
}
public class Variable {
    //成員變量
    int num;//不給num賦值
    public void show(){
        //局部變量
        //int num2;  不給num2賦值,就沒有默認(rèn)初始值
        int num2 = 20;
        System.out.println(num2);

    }
}

public static void main(String[] args){
        Variable v = new Variable();
        System.out.println(v.num);//訪問成員變量
         v.show();//訪問show方法
}
}
結(jié)果為10疑俭、20

方法的形式參數(shù)是類名的時候如何調(diào)用

什么是形式參數(shù)粮呢,什么是實(shí)際參數(shù)?钞艇?啄寡?
  • 形式參數(shù):就是在定義函數(shù)或過程的時候命名的參數(shù)。通俗講就是一個記號哩照。
  • 實(shí)際參數(shù):就是在執(zhí)行時挺物,調(diào)用函數(shù)或過程時,傳遞給函數(shù)或過程的參數(shù)飘弧。通俗講就是實(shí)際值识藤。
  • 參數(shù)嘛,就是一個可變量次伶,它隨著使用者的不同而發(fā)生變化痴昧。舉個例子,在中學(xué)的時候?qū)W過sin(x)函數(shù)冠王,這里的x就是形式參數(shù)剪个,當(dāng)你需要求1的正弦值時,你會使用sin(1)版确,這里的1就是實(shí)際參數(shù)。
  • 形參和實(shí)參間的關(guān)系:兩者是在調(diào)用的時候進(jìn)行結(jié)合的乎折,通常實(shí)參會將取值
什么是基本類型绒疗,什么是引用類型?骂澄?吓蘑?

java中的數(shù)據(jù)類型分為兩大類:基本數(shù)據(jù)類型和引用數(shù)據(jù)類型

基本數(shù)據(jù)類型,包括數(shù)值型,字符型和布爾型磨镶。

  • 數(shù)值型:1)整型:byte 1個字節(jié)溃蔫;short 2個字節(jié);int 4個字節(jié)琳猫;long 8個字節(jié)伟叛。

  • 浮點(diǎn)型:float 4個字節(jié);double
    8個字節(jié);可以采用十進(jìn)制和十六進(jìn)制兩種表示方式脐嫂,其中十六進(jìn)制表示方法只能采用科學(xué)計數(shù)法统刮,例如:0x1.2p3,表示的是的是1乘以16加上2乘以16的-1次方的和乘以2的三次方账千;浮點(diǎn)型的默認(rèn)類型為DOUBLE型侥蒙,如果聲明float型浮點(diǎn)數(shù),要在數(shù)值后面加上f或F匀奏,例如:float
    f1 = 3.14F;否則會報精度錯誤鞭衩。

  • 字符型:char 采用unicod的16位編碼方式進(jìn)行編碼。

  • 布爾型:true,false;

引用數(shù)據(jù)類型:類娃善、接口類型论衍、數(shù)組類型、枚舉類型会放、注解類型饲齐;

基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的區(qū)別主要在存儲方式上:

  • 基本數(shù)據(jù)類型在被創(chuàng)建時,在棧上給其劃分一塊內(nèi)存咧最,將數(shù)值直接存儲在棧上捂人;

  • 引用數(shù)據(jù)類型在被床架時,首先要在棧上給其引用(句柄)分配一塊內(nèi)存矢沿,而對象的具體信息都存儲在堆內(nèi)存上滥搭,然后由棧上面的引用指向堆中對象的地址。

形式參數(shù)的問題
  • 基本類型:形式參數(shù)的改變不影響實(shí)際參數(shù)
  • 引用類型:形式參數(shù)的改變直接影響實(shí)際參數(shù)

例1:形式參數(shù)是基本類型時

package mianxiangduixaing02;

public class xingshicanshu{
    public int sum(int a,int b)//形式參數(shù)捣鲸,參數(shù)是基本類型
    {
    return a+b; 
    }

}

package mianxiangduixaing02;

public class xingshicanshudemo {
    public static void main(String[] args) {
        xingshicanshu x = new xingshicanshu();
        //x.sum(10, 20); 無結(jié)果瑟匆,會報錯,不能直接調(diào)用
                //為什么不能直接調(diào)用栽惶?愁溜?
        int result = x.sum(10, 20);
        System.out.println("result:"+result);
        
    }

}

      結(jié)果為30

例2:形式參數(shù)是引用類型時

package mianxiangduixaing02;

public class student {
public void show() {
    System.out.println("我愛學(xué)習(xí)");
}
}

package mianxiangduixaing02;

public class studentdemo {
//如果看到一個方法的形式參數(shù)是一個類類型(引用類型),這里其實(shí)需要的就是該類的對象
         public void method(student s)//形式參數(shù)是引用類型
  {//調(diào)用的時候,把main方法中的地址傳遞到了這里       student s = new student()

         s.show();
}
}

package mianxiangduixaing02;

public class test {
public static void main(String[] args) {
    //形式參數(shù)是引用類型時的調(diào)用
    //需求:調(diào)用studentdemo類中的method方法
    studentdemo sd = new studentdemo();
    //創(chuàng)建學(xué)生對象
        student s = new student();
    sd.method(s);//把s的地址值給到了這里
    
}
}

                 結(jié)果為“我愛學(xué)習(xí)”

匿名對象的概述和應(yīng)用

匿名對像:

就是沒有名字的對象(是對象的一種簡化表達(dá)形式)

匿名對像的倆種使用情況:

對象調(diào)用方法僅僅是一次的時候
作為實(shí)際參數(shù)傳參的時候

package mianxiangduixaing02;

public class test {
public static void main(String[] args) {
    //形式參數(shù)是引用類型時的調(diào)用
    //需求:調(diào)用studentdemo類中的method方法
    studentdemo sd = new studentdemo();
    //創(chuàng)建學(xué)生對象
        student s = new student();
    sd.method(s);//把s的地址值給到了這里
    //匿名對像
    new student();//只是創(chuàng)建出一個對象外厂,并沒有調(diào)用冕象,所以不出結(jié)果值
    //匿名對像調(diào)用方法
    new student().show();
    System.out.println("-----------------");
    //為什么僅僅只能調(diào)用一次?
    sd.method(s);
    sd.method(s);//這表示同一個對象調(diào)用了倆次方法
     new student().show();
     new student().show();//這表示重新創(chuàng)建了一個對象,所以多次調(diào)用的時候不適合
     
    
}
}

結(jié)果為:
我愛學(xué)習(xí)
我愛學(xué)習(xí)
-----------------
我愛學(xué)習(xí)
我愛學(xué)習(xí)
我愛學(xué)習(xí)
我愛學(xué)習(xí)

匿名對像調(diào)用的好處是什么汁蝶?

A 匿名對像調(diào)用完畢后就是垃圾渐扮,可以被垃圾回收站回收
B 匿名對像可以作為實(shí)際參數(shù)傳遞

//匿名對像可以作為實(shí)際參數(shù)傳遞
     sd.method(new student());
     結(jié)果為:我愛學(xué)習(xí)

private關(guān)鍵字的概述和特點(diǎn)

封裝概述
  • 是指隱藏對象的屬性和實(shí)現(xiàn)細(xì)節(jié)论悴,僅對外提供公共的訪問方式
好處
  • 隱藏實(shí)現(xiàn)細(xì)節(jié),提供公共訪問方式
  • 提高了代碼的復(fù)用性
  • 提高安全性
封裝原則
  • 將不需要對外提供的內(nèi)容都隱藏起來
  • 把屬性隱藏墓律,提供公共方法對其訪問
private關(guān)鍵字
  • 是一個權(quán)限修飾符(只有自己可以訪問)
  • 可以修飾成員(成員變量和成員方法)
  • 被private修飾的成員只能在本類中被訪問
private最常見的應(yīng)用
  • 把成員變量用private修飾
  • 提供對應(yīng)的getxxx()和ssetxxx()方法
    被private修飾后權(quán)限很小膀估,只能自己訪問
    案例
package mianxiangduixaing02;

public class privatedemo {
    //int num = 10;(1)
    private int num = 20;//(2)
    public void show(){
        System.out.println(num);
    }
private void method(){
        System.out.println("method");
    }
    public void show2(){
        method();
    }

}

package mianxiangduixaing02;

public class privatetest {
    public static void main(String[] args) {
        privatedemo pd = new privatedemo();
        //System.out.println(pd.num);(1)
        pd.show();//(2)
        pd.show2();
    }

}
num第一種定義為int類,測試類中可以直接訪問num耻讽,得出結(jié)果10
num第二種定義為private類察纯,測試類中不可以直接訪問,在privatedemo類中定義了一個公共的show方法齐饮,
然后在此方法中輸出被定義為private類的num捐寥,在測試類中創(chuàng)建的對象調(diào)用show方法,得出結(jié)果20祖驱,
同理握恳,被private修飾的方法也不能被直接調(diào)用,必須用同類中的一個公共的方法輸出這個方法捺僻,
然后在測試類中調(diào)用這個公共的方法乡洼,結(jié)果為method

封裝和private應(yīng)用標(biāo)準(zhǔn)案例

package mianxiangduixaing02;

public class student {
    private String name;
    private  int age;
    public String getName(){
        return name;
    }
    public void setName(String n){
        name= n;
    }
    public int getAge(){
        return age;
    }
    public void setAge(int m){
        age = m;
    }
}

package mianxiangduixaing02;

public class studenttest {
    public static void main(String[] args) {
        student s = new student();
        //System.out.println(s.Name+"---------"s.get);error
        System.out.println(s.getName()+"--------"+s.getAge());
        //給成員變量賦值
        //s.Name="李四";error
        //s.age="27";error
        //通過方法賦值
        s.setName("李四");
        s.setAge(27);
        System.out.println(s.getName()+"-------"+s.getAge());
    }

}
結(jié)果為:null--------0
       李四-------27
getXxx()方法為獲取,只能輸出結(jié)果匕坯,setXxx()方法為賦值束昵,可以修改前面定義好的數(shù)值,也可以直接用此方法賦值
被private定義得無論是成員變量還是成員方法葛峻,都不可以被本類以外的類得到

this關(guān)鍵字的概述和應(yīng)用

this關(guān)鍵字
  • this:代表所在類的對象引用锹雏,簡單說,代表當(dāng)前類的一個對象
  • 記住
    方法被哪個對象調(diào)用术奖,this就代表那個對象
什么時候使用this呢礁遵??采记?
  • 局部變量隱藏成員變量
  • 其他用法見后面詳解
    案例
package mianxiangduixaing02;
//java中起名字要見名知意佣耐,單獨(dú)的n,a拿出來別人并不知道是什么意思
public class student {
    private String name;
    private  int age;
    public String getName(){
        return name;
    }
    /*public void setName(String n){
        name= n;
    }
    */
    public void setName(String name){//name=李四
        //name= name;
        this.name=name;
    }
    //所以在這里將n改為name
  //但是變量的使用規(guī)則是就近原則唧龄,所以這個是有問題的兼砖,結(jié)果出來為null  0
    //這里的調(diào)用只能用對象名
    //這個對象如果存在,它應(yīng)該代表的就是student類中的一個對象
    //那么誰能夠代表當(dāng)前的對象呢既棺?java就提供了一個關(guān)鍵字   this
    //this.name=name讽挟;
    public int getAge(){
        return age;
    }
    /*public void setAge(int m){
        age = m;
    }
    */
    public void setAge(int age){
        //age = age;
        this.age=age;
    }
    //在這里將m改為age
    
}

package mianxiangduixaing02;

public class studenttest {
    public static void main(String[] args) {
        student s = new student();
        //System.out.println(s.Name+"---------"s.get);error
        System.out.println(s.getName()+"--------"+s.getAge());
        //給成員變量賦值
        //s.Name="李四";error
        //s.age="27";error
        //通過方法賦值
        s.setName("李四");
        s.setAge(27);
        System.out.println(s.getName()+"-------"+s.getAge());
    }

}
結(jié)果為:null--------0
       李四-------27

this關(guān)鍵字的內(nèi)存圖解

package mianxiangduixaing02;

public class student1 {
private String name;
private int age;
public String getName(){
    return name;
}
public void setName(String name){
    this.name = name;
}
public int getAge(){
    return age;
}
public void setAge(int age){
    this.age = age;
}
}

package mianxiangduixaing02;

public class student1test {
    public static void main(String[] args) {
        student1 s1 = new student1();//創(chuàng)建第一個對象
        s1.setName("李美麗");
        s1.setAge(27);
        System.out.println(s1.getName()+"--------"+s1.getAge());
        student1 s2 = new student1();//創(chuàng)建第二個對象
        s2.setName("劉小花");
        s2.setAge(18);
        System.out.println(s2.getName()+"--------"+s2.getAge());
    }

}

QQ圖片20181111210239.png

注:首先,程序從main方法開始執(zhí)行丸冕,創(chuàng)建第一個student1類的對象耽梅,然后對象調(diào)setName/setAge方法,程序走到student1類中的setName/setAge方法晨仑,將李美麗賦值給name(因?yàn)橛行螀ⅲ許tring name就相當(dāng)于李美麗,this.name=String name=李美麗)洪己,然后程序走到類中方法外的成員變量name妥凳,當(dāng)程序輸出s1.getName()的時候,程序走到getName()方法答捕,返回了name(此時的name就是剛才類中方法外的name)逝钥,返回的name就輸出了,結(jié)果為李美麗拱镐,其他同上

構(gòu)造方法的概述與格式

構(gòu)造方法作用概述
  • 給對象的數(shù)據(jù)進(jìn)行初始化
構(gòu)造方法格式
  • 方法名與類名相同
  • 沒有返回值類型艘款,連void也沒有(修飾符那一塊沒有任何東西)
  • 沒有具體的返回值(不需要用return來做什么東西)
構(gòu)造方法的注意事項(xiàng)
  • 如果你不提供構(gòu)造方法,系統(tǒng)會給出默認(rèn)的構(gòu)造方法
  • 如果你提供了構(gòu)造方法沃琅,系統(tǒng)將不會再給出
  • 構(gòu)造方法也是可以重載的

構(gòu)造方法的格式及作用案例

package mianxiangduixaing02;

public class construct {
    private String name;//null
    private int age;// 0 
    //系統(tǒng)自動給的初始值哗咆,所以構(gòu)造方法的作用就是給成員變量賦默認(rèn)值
    public construct(){//這就是構(gòu)造方法
        System.out.println("這是一個構(gòu)造方法");
    }

}

package mianxiangduixaing02;

public class constructtest {
    public static void main(String[] args) {
        construct c = new construct();
        char[] s = null;
        System.out.println(s);//輸出的是構(gòu)造方法中的內(nèi)容
    }

}

構(gòu)造方法的重載及注意事項(xiàng)

方法重載就是方法重寫,構(gòu)造方法重載就是將系統(tǒng)自帶的構(gòu)造方法重寫
我們一直在使用構(gòu)造方法益眉,但是我們卻沒有定義過晌柬,那么構(gòu)造方法從哪來呢?

  • 構(gòu)造方法的注意事項(xiàng)
  • A 如果我們沒有給出構(gòu)造方法郭脂,系統(tǒng)將會自動提供一個無參構(gòu)造方法
  • B 如果我們給出了構(gòu)造方法年碘,系統(tǒng)將不會提供默認(rèn)的構(gòu)造方法
  • 注:如果這個時候,我們還想用無參構(gòu)造方法展鸡,就必須自己定義屿衅,建議自己定義無參構(gòu)造方法
  • 給成員賦值有倆種方法
  • A setXxx()方法
  • B 構(gòu)造方法
    public class con
package mianxiangduixaing02;
struct {
    private String name;
    private int age; 
    public construct(){
        System.out.println("這是無參構(gòu)造方法");
    }
    
    public construct(String name){
        System.out.println("這是帶一個String類型的構(gòu)造方法");
        this.name = name;
    }
    
    public construct(int age){
        System.out.println("這是帶一個int類型的構(gòu)造方法");
        this.age = age;
    }
    
    public construct(String name,int age){
        System.out.println("這是帶一個String,int類型的構(gòu)造方法");
        this.name = name;
        this.age = age;
    }
    public void show(){
        System.out.println(name+"-------"+age);
    }

}

package mianxiangduixaing02;

public class constructtest {
    public static void main(String[] args) {
        //創(chuàng)建對象1
        construct c1 = new construct();
        c1.show();
        //創(chuàng)建對象2
        construct c2 = new construct("李美麗");
        c2.show();
        //創(chuàng)建對象3
        construct c3 = new construct(18);
        c3.show();
        //創(chuàng)建對象4
                construct c4 = new construct("李美麗"+18);
                c4.show();
    }
}

結(jié)果為:
null-------0
這是帶一個String類型的構(gòu)造方法
李美麗-------0
這是帶一個int類型的構(gòu)造方法
null-------18
這是帶一個String類型的構(gòu)造方法
李美麗18-------0

成員方法的分類及使用

類的成員方法分類
根據(jù)返回值
  • 有明確返回值類型
  • 返回void類型的方法(無返回值類型)
根據(jù)形式參數(shù)
  • 無參方法
  • 帶參方法
    類的組成:成員變量、構(gòu)造方法莹弊、成員方法
package mianxiangduixaing02;

public class student2 {
    public String getString1(){//無參有返回值類型
        return  "hello1";
    }
    public void getString2(){//無參無返回值類型
        System.out.println("hello2");
    }
    public String getString3(String name){//帶參有返回值類型
        return name;
    }
    public void getString4(String name){//帶參無返回值類型
        System.out.println(name);
    }
    

}

package mianxiangduixaing02;

public class student2test {
    public static void main(String[] args) {
        student2 s= new student2();
        //調(diào)用無參有返回值類型
        String result = s.getString1();
        System.out.println(result);
        //調(diào)用無參無返回值類型
        s.getString2();
        //調(diào)用帶參有返回值類型
        String result2 = s.getString3("hello3");
        System.out.println(result2);
        //調(diào)用帶參無返回值類型
         s.getString4("hello4");
        
    }

}

結(jié)果為:
hello1
hello2
hello3
hello4

創(chuàng)建對象時做了哪些事情

student s = new student();在內(nèi)存中做了哪些事情涤久?
  • 加載student class文件進(jìn)內(nèi)存
  • 在棧內(nèi)存為s開辟內(nèi)存空間
  • 在堆內(nèi)存為學(xué)生對象開辟內(nèi)存空間
  • 對學(xué)生對象的成員變量進(jìn)行默認(rèn)初始化
  • 對學(xué)生對象的成員變量進(jìn)行顯示初始化
  • 通過構(gòu)造方法對學(xué)生對象的成員變量賦值
  • 學(xué)生對象初始化完畢,把對象地址賦值給s變量
    student 類案例及內(nèi)存圖解
package mianxiangduixaing02;

public class student3 {
    private String name = "李美麗";//原本默認(rèn)初始值為null
    private int age = 27;//原本默認(rèn)初始值為0
//在這里操作者手動給了值箱硕,name和age就變成了李美麗27//顯示初始化
    public student3(){//構(gòu)造方法給成員變量賦值
        name = "李四";
        age = 30;
    }
            

}

package mianxiangduixaing02;

public class student3test {
    public static void main(String[] args) {
        student3 s = new student3();
        
    }

}
結(jié)果:李四  30

QQ圖片20181112173254.png

static關(guān)鍵字的引入

static關(guān)鍵字
可以修飾成員變量和成員方法
static關(guān)鍵字的特點(diǎn)
  • 隨著類的加載而加載
    (回想main方法拴竹,用static修飾的方法,如果class加載的時候沒有加載main方法剧罩,我們使用的時候還能直接用么栓拜?不能,所以是隨著類的加載而加載)
  • 優(yōu)先于對象存在
    (對象是在new的時候才出現(xiàn)惠昔,而它在class文件加載的時候就已經(jīng)出現(xiàn)了)
  • 被類的所有成員共享(這也是我們判斷是否使用關(guān)鍵字的條件幕与,代碼如下)
  • 可以通過類名調(diào)用,其實(shí)她本身也可以通過對象名調(diào)用(推薦使用類名調(diào)用)
    靜態(tài)修飾的內(nèi)容我們一般稱其為:與類相關(guān)的镇防,類成員
    static:靜態(tài)修飾成員變量(static怎么用)啦鸣,詳細(xì)如下代碼可見
public class person {
    String name;
    int age;
    //String country;
    static String country;
    public person(){}
    public person(String name,int age){
        this.name = name;
        this.age = age;
    }
    public person(String name,int age,String country){
        this.name = name;
        this.age = age;
        this.country = country;
    }
    public void show(){
        System.out.println("name="+name+"--------"+"age="+age+"-------"+"country="+country);
    }

}

package mianxiangduixaing02;

public class persontest {
    public static void main(String[] args) {
        person p1 = new person("李美麗",16,"中國");
        p1.show();
        person p2 = new person("劉小花",18,"中國");
        p2.show();
        person p3 = new person("鳳姐",27,"中國");
        p3.show();
        //三個人,名字和年齡都是不一樣的来氧,但是國籍都為中國诫给,
        //每new一次都開辟一次內(nèi)存空間香拉,太浪費(fèi)內(nèi)存了,所以java就提供了一個關(guān)鍵字 static
        //用static修飾country
        System.out.println("------------------------------------------------");
        person p4 = new person("李美麗",16,"中國");
        p4.show();
        person p5 = new person("劉小花",18);
        p5.show();
        person p6 = new person("鳳姐",27);
        p6.show();
        //在用static定義后中狂,這里只給了p4國籍凫碌,其他倆個都沒給
        //結(jié)果和上面一樣,都有三個變量顯示
        System.out.println("-----------------------------------------------");
        p6.country="美國";
        p6.show();
        p4.show();
        p5.show();
        //結(jié)果都為美國胃榕,因?yàn)檫@些對象共享同一個靜態(tài)修飾的成員
                System.out.println(person.country);   //通過類名調(diào)成員            
    }

}

結(jié)果為:
name=李美麗--------age=16-------country=中國
name=劉小花--------age=18-------country=中國
name=鳳姐--------age=27-------country=中國
------------------------------------------------
name=李美麗--------age=16-------country=中國
name=劉小花--------age=18-------country=中國
name=鳳姐--------age=27-------country=中國
-----------------------------------------------
name=鳳姐--------age=27-------country=美國
name=李美麗--------age=16-------country=美國
name=劉小花--------age=18-------country=美國
美國

static關(guān)鍵字的注意事項(xiàng)
  • 在靜態(tài)方法中是沒有this關(guān)鍵字的
  • 靜態(tài)方法只能訪問靜態(tài)的成員變量和靜態(tài)的成員方法
    案例代碼如下
package mianxiangduixaing02;
//static 關(guān)鍵字注意事項(xiàng)
//A 在靜態(tài)方法中是沒有this關(guān)鍵字的  如何理解呢盛险??勋又?
//靜態(tài)是隨著類的加載而加載苦掘,this是隨著對象的創(chuàng)建而存在
//靜態(tài)比對象先存在
//B  靜態(tài)方法只能訪問靜態(tài)的成員變量和靜態(tài)的成員方法
//靜態(tài)方法
//成員變量:只能訪問靜態(tài)的成員變量
//成員方法:只能訪問靜態(tài)的成員方法
//非靜態(tài)方法
//成員變量:可能是靜態(tài)的,也可能是非靜態(tài)的
//成員方法:可能是靜態(tài)
public class Teacher {
    public int num = 10;
    public static int num2 = 20;
    public void show(){
        System.out.println(num);//隱含的告訴你訪問的是成員變量
        System.out.println(this.num);//明確的告訴你訪問的是成員變量
        System.out.println(num2);
        function();
        function2();
    }
    public static void method(){
        //System.out.println(num);//error,無法從靜態(tài)上下文中引用非靜態(tài)
        System.out.println(num2);
    }
    public void function(){
        
    }
    public static void function2(){
        
    }

}


package mianxiangduixaing02;

public class Teachertest {
    public static void main(String[] args) {
        Teacher t = new Teacher();
        t.show();
        t.method();
    }

}

結(jié)果為:
10
10
20
20

靜態(tài)變量和成員變量的區(qū)別

所屬不同
  • 靜態(tài)變量屬于類楔壤,所以也稱為類變量
  • 成員變量屬于對象鹤啡,所以也稱為實(shí)例變量(對象變量)
內(nèi)存中的位置不同
  • 靜態(tài)變量存儲于方法區(qū)的靜態(tài)區(qū)
  • 成員變量存儲于堆內(nèi)存
內(nèi)存出現(xiàn)的時間不同
  • 靜態(tài)變量隨著類的加載而加載,隨著類的消失而消失
  • 成員變量隨著對象的創(chuàng)建而存在挺邀,隨著對象的消失而消失
調(diào)用不同
  • 靜態(tài)變量可以通過類名調(diào)用揉忘,也可以通過對象調(diào)用
  • 成員變量只能通過對象名調(diào)用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市端铛,隨后出現(xiàn)的幾起案子泣矛,更是在濱河造成了極大的恐慌,老刑警劉巖禾蚕,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件您朽,死亡現(xiàn)場離奇詭異,居然都是意外死亡换淆,警方通過查閱死者的電腦和手機(jī)哗总,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倍试,“玉大人讯屈,你說我怎么就攤上這事∠叵埃” “怎么了涮母?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長躁愿。 經(jīng)常有香客問我叛本,道長,這世上最難降的妖魔是什么彤钟? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任来候,我火速辦了婚禮,結(jié)果婚禮上逸雹,老公的妹妹穿的比我還像新娘营搅。我一直安慰自己云挟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布转质。 她就那樣靜靜地躺著植锉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪峭拘。 梳的紋絲不亂的頭發(fā)上砂代,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天喘垂,我揣著相機(jī)與錄音,去河邊找鬼懈贺。 笑死搬男,一個胖子當(dāng)著我的面吹牛拣展,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缔逛,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼备埃,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了褐奴?” 一聲冷哼從身側(cè)響起按脚,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎敦冬,沒想到半個月后辅搬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脖旱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年堪遂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萌庆。...
    茶點(diǎn)故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡溶褪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出践险,到底是詐尸還是另有隱情猿妈,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布捏境,位于F島的核電站于游,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏垫言。R本人自食惡果不足惜贰剥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望筷频。 院中可真熱鬧蚌成,春花似錦前痘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瓶盛,卻和暖如春最欠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背惩猫。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工芝硬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人轧房。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓拌阴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親奶镶。 傳聞我的和親對象是個殘疾皇子迟赃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容