No_16_0226 Java基礎(chǔ)學(xué)習(xí)第七天

文檔版本 開(kāi)發(fā)工具 測(cè)試平臺(tái) 工程名字 日期 作者 備注
V1.0 2016.02.26 lutianfei none

[TOC]


成員變量與局部變量

  • 成員變量與局部變量區(qū)別:
    • A:在類(lèi)中的位置不同
      • 成員變量:在類(lèi)中,方法外
      • 局部變量:在方法定義中或者方法聲明上。
    • B:在內(nèi)存中的位置不同:
      • 成員變量:在堆內(nèi)存
      • 局部變量:在棧內(nèi)存
    • C:生命周期不同
      • 成員變量:隨著對(duì)象的創(chuàng)建而存在,隨著對(duì)象的消失而消失
      • 局部變量:隨著方法的調(diào)用而存在,隨著方法的調(diào)用完畢而存在
    • D:初始化值不同
      • 成員變量:有默認(rèn)初始值
      • 局部變量:沒(méi)有默認(rèn)初始值,必須定義,賦值,然后才能使用。
  • 注:局部變量名稱(chēng)可以和成員變量名稱(chēng)一致,在方法中使用的時(shí)候,采用就近原則。

形式參數(shù)問(wèn)題

  • 一個(gè)方法的形式參數(shù)是一個(gè)類(lèi)類(lèi)型(引用類(lèi)型),這里其實(shí)需要的是該類(lèi)的對(duì)象。
//形式參數(shù)是 基本類(lèi)型
class Demo {
    public int sum(int a,int b) {
        return a + b;
    }
}

//形式參數(shù)是 引用類(lèi)型
class Student {
    public void show() {
        System.out.println("我愛(ài)學(xué)習(xí)");
    }
}

class StudentDemo {
    //如果你看到了一個(gè)方法的形式參數(shù)是一個(gè)類(lèi)類(lèi)型(引用類(lèi)型),這里其實(shí)需要的是該類(lèi)的對(duì)象。
    public void method(Student s) { 
    //調(diào)用的時(shí)候,把main方法中的s的地址傳遞到了這里 Student s = new Student();
        s.show();
    }
}

class ArgsTest {
    public static void main(String[] args) {
        //形式參數(shù)是基本類(lèi)型的調(diào)用
        Demo d = new Demo();
        int result = d.sum(10,20);
        System.out.println("result:"+result);
        System.out.println("--------------");
        
        //形式參數(shù)是引用類(lèi)型的調(diào)用
        //需求:我要調(diào)用StudentDemo類(lèi)中的method()方法
        StudentDemo sd = new StudentDemo();
        //創(chuàng)建學(xué)生對(duì)象
        Student s = new Student();
        sd.method(s); //把s的地址給到了這里
    }
}

匿名對(duì)象

  • 匿名對(duì)象:就是沒(méi)有名字的對(duì)象。
    • 是對(duì)象的一種簡(jiǎn)化表示形式
  • 匿名對(duì)象的兩種使用情況
    • 對(duì)象調(diào)用方法僅僅一次的時(shí)候
    • 作為實(shí)際參數(shù)傳遞
  • 匿名調(diào)用好處
    • 匿名對(duì)象調(diào)用完畢就是垃圾。可以被垃圾回收器回收。
class Student {
    public void show() {
        System.out.println("我愛(ài)學(xué)習(xí)");
    }
}

class StudentDemo {
    public void method(Student s) {
        s.show();
    }
}

class NoNameDemo {
    public static void main(String[] args) {
        //帶名字的調(diào)用
        Student s = new Student();
        s.show();
        s.show();
        System.out.println("--------------");

        //匿名對(duì)象
        //new Student();
        //匿名對(duì)象調(diào)用方法
        new Student().show();
        new Student().show(); //這里其實(shí)是重新創(chuàng)建了一個(gè)新的對(duì)象
        System.out.println("--------------");

        //匿名對(duì)象作為實(shí)際參數(shù)傳遞
        StudentDemo sd = new StudentDemo();
        //匿名對(duì)象
        sd.method(new Student());

        //再來(lái)一個(gè)
        new StudentDemo().method(new Student());
     }
}


封裝概述

  • 封裝概述
    • 是指隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外提供公共訪問(wèn)方式。
  • 好處:
    • 隱藏實(shí)現(xiàn)細(xì)節(jié),提供公共的訪問(wèn)方式
    • 提高了代碼的復(fù)用性
    • 提高安全性。
  • 封裝原則:
    • 將不需要對(duì)外提供的內(nèi)容都隱藏起來(lái)。
    • 把屬性隱藏,提供公共方法對(duì)其訪問(wèn)。
  • 注:
    • 測(cè)試類(lèi)一般只創(chuàng)建對(duì)象,調(diào)用方法。

private關(guān)鍵字

  • private關(guān)鍵字:

    • 是一個(gè)權(quán)限修飾符,是封裝的一種體現(xiàn)。
    • 可以修飾成員(成員變量和成員方法)
    • 被private修飾的成員只在本類(lèi)中才能訪問(wèn)。
  • private最常見(jiàn)的應(yīng)用:

    • 把成員變量用private修飾
    • 提供對(duì)應(yīng)的getXxx()/setXxx()方法
    • 一個(gè)標(biāo)準(zhǔn)的案例的使用

this關(guān)鍵字

  • this:代表所在類(lèi)的對(duì)象引用
  • 記住:
    • 方法被哪個(gè)對(duì)象調(diào)用,this就代表那個(gè)對(duì)象
class Student {
    //姓名
    private String name;
    //年齡
    private int age;
    
    //姓名獲取值
    public String getName() {
        return name;
    }
    
    //姓名設(shè)置值
    public void setName(String name) { //name = "林青霞";
        //Student.name = name;
        this.name = name;
    }
    
    //年齡獲取值
    public int getAge() {
        return age;
    }
    
    //年齡賦值
    public void setAge(int age) {
        this.age = age;
    }
}

//測(cè)試類(lèi)
class StudentTest {
    public static void main(String[] args) {
        //創(chuàng)建學(xué)生對(duì)象
        Student s = new Student();
        
        //給成員變量賦值
        s.setName("林青霞");
        s.setAge(27);
        //獲取數(shù)據(jù)
        System.out.println(s.getName()+"---"+s.getAge());
    }
}

構(gòu)造方法

  • 構(gòu)造方法作用概述
    • 給對(duì)象的數(shù)據(jù)進(jìn)行初始化
  • 構(gòu)造方法格式
    • 方法名類(lèi)名相同
    • 沒(méi)有返回值類(lèi)型,連void都沒(méi)有
    • 沒(méi)有具體的返回值。(可以有return;這一語(yǔ)句,表示方法到這里結(jié)束)
  • 構(gòu)造方法注意事項(xiàng)
    • 如果你不提供構(gòu)造方法,系統(tǒng)會(huì)給出默認(rèn)無(wú)參構(gòu)造方法
    • 如果你提供了構(gòu)造方法,系統(tǒng)將不再提供默認(rèn)的無(wú)參構(gòu)造方法。必須自己給出。(建議永遠(yuǎn)自己給出無(wú)參構(gòu)造方法?。?/li>
    • 構(gòu)造方法也是可以重載
class Student {
    private String name;
    private int age;

    public Student() {
        System.out.println("這是無(wú)參構(gòu)造方法");
    }
    
    //構(gòu)造方法的重載格式
    public Student(String name) {
        System.out.println("這是帶一個(gè)String類(lèi)型的構(gòu)造方法");
        this.name = name;
    }
    
    public Student(int age) {
        System.out.println("這是帶一個(gè)int類(lèi)型的構(gòu)造方法");
        this.age = age;
    }
    
    public Student(String name,int age) {
        System.out.println("這是一個(gè)帶多個(gè)參數(shù)的構(gòu)造方法");
        this.name = name;
        this.age = age;
    }
    
    public void show() {
        System.out.println(name+"---"+age);
    }
}

class ConstructDemo2 {
    public static void main(String[] args) {
        //創(chuàng)建對(duì)象
        Student s = new Student();
        s.show();
        System.out.println("-------------");
        
        //創(chuàng)建對(duì)象2
        Student s2 = new Student("林青霞");
        s2.show();
        System.out.println("-------------");
        
        //創(chuàng)建對(duì)象3
        Student s3 = new Student(27);
        s3.show();
        System.out.println("-------------");
        
        //創(chuàng)建對(duì)象4
        Student s4 = new Student("林青霞",27);
        s4.show();
    }
}


一個(gè)基本類(lèi)的標(biāo)準(zhǔn)代碼寫(xiě)法

  • 類(lèi)
    • 成員變量
    • 構(gòu)造方法
      • 無(wú)參構(gòu)造方法
      • 帶參構(gòu)造方法
    • 成員方法
      • getXxx()
      • setXxx()
  • 給成員變量賦值的方式
    • 無(wú)參構(gòu)造方法+setXxx()
    • 帶參構(gòu)造方法
/*
    一個(gè)標(biāo)準(zhǔn)代碼的最終版。
    
    學(xué)生類(lèi):
        成員變量:
            name,age
        構(gòu)造方法:
            無(wú)參,帶兩個(gè)參
        成員方法:
            getXxx()/setXxx()
            show():輸出該類(lèi)的所有成員變量值
            
    給成員變量賦值:
        A:setXxx()方法
        B:構(gòu)造方法
        
    輸出成員變量值的方式:
        A:通過(guò)getXxx()分別獲取然后拼接
        B:通過(guò)調(diào)用show()方法搞定
*/
class Student {
    //姓名
    private String name;
    //年齡
    private int age;
    
    //構(gòu)造方法
    public Student() {
    }
    
    public Student(String name,int age) {
        this.name = name;
        this.age = 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;
    }
    
    //輸出所有的成員變量值
    public void show() {
        System.out.println(name+"---"+age);
    }
}

//測(cè)試類(lèi)
class StudentTest {
    public static void main(String[] args) {
        //方式1給成員變量賦值
        //無(wú)參構(gòu)造+setXxx()
        Student s1 = new Student();
        s1.setName("林青霞");
        s1.setAge(27);
        //輸出值
        System.out.println(s1.getName()+"---"+s1.getAge());
        s1.show();
        System.out.println("----------------------------");
        
        //方式2給成員變量賦值
        Student s2 = new Student("劉意",30);
        System.out.println(s2.getName()+"---"+s2.getAge());
        s2.show();
    }
}


Student s = new Student();在內(nèi)存中做了哪些事情?

  • 加載Student.class文件進(jìn)內(nèi)存
  • 內(nèi)存為s開(kāi)辟空間
  • 內(nèi)存為學(xué)生對(duì)象開(kāi)辟空間
  • 對(duì)學(xué)生對(duì)象的成員變量進(jìn)行默認(rèn)初始化
  • 對(duì)學(xué)生對(duì)象的成員變量進(jìn)行顯示初始化
  • 通過(guò)構(gòu)造方法對(duì)學(xué)生對(duì)象的成員變量賦值
  • 學(xué)生對(duì)象初始化完畢,把對(duì)象地址賦值給s變量


static關(guān)鍵字

  • 可以修飾成員變量和成員方法
  • static關(guān)鍵字特點(diǎn)
    • 隨著類(lèi)的加載而加載
    • 優(yōu)先于對(duì)象存在
    • 被類(lèi)的所有對(duì)象共享
      • 這也是我們判斷是否使用靜態(tài)關(guān)鍵字的條件
    • 可以通過(guò)類(lèi)名調(diào)用,也可以通過(guò)對(duì)象調(diào)用。
  • static關(guān)鍵字注意事項(xiàng)
    • 靜態(tài)方法中是<font color = red>沒(méi)有this關(guān)鍵字</font>的(無(wú)法從靜態(tài)上下文引用非靜態(tài) 變量 xxx)
      • 因?yàn)殪o態(tài)時(shí)隨著類(lèi)的加載而加載,this是隨著對(duì)象的創(chuàng)建而存在。
      • 靜態(tài)比對(duì)象先存在。
    • 靜態(tài)方法只能訪問(wèn)靜態(tài)的成員變量靜態(tài)的成員方法,非靜態(tài)方法可以隨意訪問(wèn)。
class Teacher {
    public int num = 10;
    public static int num2 = 20;
    
    public void show() {
        System.out.println(num); //隱含的告訴你訪問(wèn)的是成員變量
        System.out.println(this.num); //明確的告訴你訪問(wèn)的是成員變量
        System.out.println(num2);

    }
    
    public static void method() {
        //無(wú)法從靜態(tài)上下文中引用非靜態(tài) 變量 num
        //System.out.println(num);
        System.out.println(num2);
        
        //無(wú)法從靜態(tài)上下文中引用非靜態(tài) 方法 function()
        //function();
        function2();
    }
    
    public void function() {
    
    }
    
    public static void function2() {
    
    }
}

class TeacherDemo {
    public static void main(String[] args) {
        //創(chuàng)建對(duì)象
        Teacher t = new Teacher();
        t.show();
        System.out.println("------------");
        t.method();
    }
}


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

  • 所屬不同
    • 靜態(tài)變量屬于類(lèi),所以也稱(chēng)為為類(lèi)變量
    • 成員變量屬于對(duì)象,所以也稱(chēng)為實(shí)例變量(對(duì)象變量)
  • 內(nèi)存中位置不同
    • 靜態(tài)變量存儲(chǔ)于方法區(qū)靜態(tài)區(qū)
    • 成員變量存儲(chǔ)于堆內(nèi)存
  • 內(nèi)存出現(xiàn)時(shí)間不同
    • 靜態(tài)變量隨著類(lèi)的加載而加載,隨著類(lèi)的消失而消失
    • 成員變量隨著對(duì)象的創(chuàng)建而存在,隨著對(duì)象的消失而消失
  • 調(diào)用不同
    • 靜態(tài)變量可以通過(guò)類(lèi)名調(diào)用,也可以通過(guò)對(duì)象調(diào)用
    • 成員變量只能通過(guò)對(duì)象名調(diào)用

main方法是靜態(tài)的

  • public static void main(String[] args) {}
    • public 公共的,訪問(wèn)權(quán)限最大,因?yàn)楸籮vm調(diào)用,需要訪問(wèn)權(quán)限足夠大。
    • static 靜態(tài)的,不需要?jiǎng)?chuàng)建對(duì)象,被jvm調(diào)用,不用創(chuàng)建對(duì)象,直接類(lèi)名訪問(wèn)
    • void被jvm調(diào)用,不需要給jvm返回值
    • main 一個(gè)通用的名稱(chēng),雖然不是關(guān)鍵字,但是被jvm識(shí)別
    • String[] args 以前用于接收鍵盤(pán)錄入的
      • eg:java MainDemo hello world java
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一:java概述:1,JDK:Java Development Kit,java的開(kāi)發(fā)和運(yùn)行環(huán)境,java的開(kāi)發(fā)工...
    ZaneInTheSun閱讀 2,810評(píng)論 0 11
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,651評(píng)論 18 399
  • Win7下如何打開(kāi)DOS控制臺(tái)? a:開(kāi)始--所有程序--附件--命令提示符 b:開(kāi)始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,702評(píng)論 4 12
  • (一)Java部分 1、列舉出JAVA中6個(gè)比較常用的包【天威誠(chéng)信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,254評(píng)論 0 62
  • 今天一早,付了0.1元訂閱了得到“每天聽(tīng)本書(shū)”,把我所有已購(gòu)、或已讀的書(shū)逐個(gè)的“拿下”并“下載”有26本。早上揣著...
    三葉草的練習(xí)本閱讀 299評(píng)論 0 0

友情鏈接更多精彩內(nèi)容