1. 程式人生 > >java學習(四)static靜態變量 和this

java學習(四)static靜態變量 和this

java學習 方便 private setname 局部變量 變量 告訴 應該 size

java中的this

/*
    this:是當前類的對象引用。簡單的記,它就代表當前類的一個對象。
    
        註意:誰調用這個方法,在該方法內部的this就代表誰。
        
    this的場景:
        解決局部變量隱藏成員變量
*/
//定義學生類
class Student {
    //姓名
    private String name;
    //年齡
    private int age;
    
    //姓名獲取值
    public String getName() {
        return name;
    }
    
    
//姓名設置值 public void setName(String name) { //name = "林青霞"; //name = name; //變量的使用規則:就近原則 //這裏是類名,目前還沒有說過類似的用法,所以這個是有問題的 //這裏的調用只能通過對象名 //這個對象如果存在,它應該代表的是Student的一個對象。 //那麽,誰能夠代表當前類的對象呢? java就提供了一個關鍵字 this //Student.name = name; this.name = name; }
//年齡獲取值 public int getAge() { return age; } //年齡賦值 public void setAge(int age) { this.age = age; } }

java中的static變量

/*
    static的特點:(它可以修飾成員變量,還可以修飾成員方法)
        A:隨著類的加載而加載
            回想main方法。
        B:優先於對象存在
        C:被類的所有對象共享
            舉例:咱們班級的學生應該共用同一個班級編號。
            其實這個特點也是在告訴我們什麽時候使用靜態?
                如果某個成員變量是被所有對象共享的,那麽它就應該定義為靜態的。
            舉例:
                飲水機(用靜態修飾)
                水杯(不能用靜態修飾)
        D:可以通過類名調用
            其實它本身也可以通過對象名調用。
            推薦使用類名調用。
            
            靜態修飾的內容一般我們稱其為:與類相關的,類成員
*/ class Student { //非靜態變量 int num = 10; //靜態變量 static int num2 = 20; } class StudentDemo { public static void main(String[] args) { Student s = new Student(); System.out.println(s.num); System.out.println(Student.num2); System.out.println(s.num2); } }
/*
    static關鍵字註意事項
        A:在靜態方法中是沒有this關鍵字的
            如何理解呢?
                靜態是隨著類的加載而加載,this是隨著對象的創建而存在。
                靜態比對象先存在。
        B:靜態方法只能訪問靜態的成員變量和靜態的成員方法
                靜態方法:
                    成員變量:只能訪問靜態變量
                    成員方法:只能訪問靜態成員方法
                非靜態方法:
                    成員變量:可以是靜態的,也可以是非靜態的
                    成員方法:可是是靜態的成員方法,也可以是非靜態的成員方法。
            簡單記:
                靜態只能訪問靜態。
*/
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() {
        //無法從靜態上下文中引用非靜態 變量 num
        //System.out.println(num);
        System.out.println(num2);
        
        //無法從靜態上下文中引用非靜態 方法 function()
        //function();
        function2();
    }
    
    public void function() {
    
    }
    
    public static void function2() {
    
    }
}

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

java中的main方法

/*
    main方法的格式講解:
        public static void main(String[] args) {...}
        
        public:公共的,訪問權限是最大的。由於main方法是被jvm調用,所以權限要夠大。
        static:靜態的,不需要創建對象,通過類名就可以。方便jvm的調用。
        void:因為我們曾經說過,方法的返回值是返回給調用者,而main方法是被jvm調用。你返回內容給jvm沒有意義。
        main:是一個常見的方法入口。我見過的語言都是以main作為入口。
        String[] args:這是一個字符串數組。值去哪裏了?
            這個東西到底有什麽用啊?怎麽給值啊?
                這個東西早期是為了接收鍵盤錄入的數據的。
                格式是:
                    java MainDemo hello world java
*/
class MainDemo {
    public static void main(String[] args) {
        //System.out.println(args); //[Ljava.lang.String;@175078b
        //System.out.println(args.length); //0
        //System.out.println(args[0]); //ArrayIndexOutOfBoundsException
        
        //接收數據後
        System.out.println(args); 
        System.out.println(args.length); 
        //System.out.println(args[0]); 
        for(int x=0; x<args.length; x++) {
            System.out.println(args[x]);
        }
    }
}

java學習(四)static靜態變量 和this