10.14上課總結

一. 匿名對象
定義: 沒有名字的對象。
意義: 節省代碼,並且很多情況下是針對某個方法只需要調用一次的情況下。
匿名對象可以調用方法,也可以給成員變量賦值。 同時也可以作爲方法的參數進行傳遞。

主要的作用就是節省代碼量,使代碼結構更優雅。

課堂練習:

public class Demo1{
    
    public static void main(String[] args){
        /*
        Person person = new Person();
        person.name="diffo";
        person.age = 20;
        person.speak();
        */
        //new Person("diffo",20).speak();
        
        Person person = new Person();
        person.initPerson(person);
        person.speak();
        
        initPerson(new Person()).speak();
        
    }
    
    //定義的名稱,是針對person對象初始化的。
    static Person initPerson(Person person){
        person.name="diffo";
        person.age = 22;
        return person;
    }
    
}

class Person{
    
    String name;
    int age;
    
    Person(){
        
    }
    
    Person(String nameParm,int ageParm){
        name = nameParm;
        age = ageParm;
    }
    
    void initPerson(Person person){
        person.name="diffo";
        person.age = 22;
    }
    
    void speak(){
        System.out.println("speak!: "+name+" . "+age);
    }
    
}

二. 封裝
1.概念: 隱藏對象的屬性和細節,僅對外提供公共的方法進行訪問。
2.private
a. 當類的成員變量使用private 修飾符修飾,那麼就不可以直接訪問到該成員變量.
b. 當使用private 修飾的成員變量或者成員方法,僅能在本類中使用

c. private 對於main 方法的修飾,也是可以產生作用的.

課堂練習

public class DemoPrivate{   
    public static void main(String[] args){
        Person person =new Person();
        person.name = "diffo";
        person.setAge(20);
        person.eat();//error
        person.action();
    }
    
}

class Person{
    String name;
    private int age;
    
    void setAge(int ageParm){
        if(ageParm>0 && ageParm<150){
            age = ageParm;
        }
    }
    
    void eat(){
       System.out.println("eat");    
    }
    
    void action(){
        eat();
        speak();
    }
    
    void speak(){
        System.out.println("speak!: "+name+" . "+age);
    }
}

javaBean:
是這樣一類的類:
他的所有成員變量都使用private 進行修飾,並且對外提供可訪問的設置值和獲取值的set,get方法。不同的應用場景,可能命名
不同,數據庫的應用中稱爲POJO類.

課堂練習:

//java bean
class Person{
    private String name;
    private int age;
    
    void setName(String nameParm){
        name = nameParm;
    }
    
    String getName(){
        return name;
    }
    
    void setAge(int ageParm){
        age = ageParm;
    }
    
    int getAge(){
        return age;
    }
    
    void speak(){
        System.out.println(name+" . "+age);
    }
    
    public static void main(String[] args){
        Person person = new Person();
        person.setName("diffo");
        person.setAge(30);
        person.speak();
    }
}

class DemoBean{
    
        public static void main(String[] args){
        Person person = new Person();
        person.setName("diffo");
        person.setAge(30);
        person.speak();
    }
    
}


main方法細節:
a.每個類中都可以存在main方法,但是當執行的時候,會優先查看public 的class 中是否有main 方法.
b.如果沒有public 的class, 那麼會按照文件名優先查找類中的main方法
c.必須定義爲public.
三. 優先原則:
優先原則: 對於一個類的成員方法來說,如果傳遞的形參的變量名稱和類的成員變量名稱相同,jvm在處理的時候優先當做方法的形參來處理.

四. this 關鍵字
1.含義:
代表了當前對象的引用.
可以理解爲,當前誰來調用,那麼方法中的this 就代表誰。

對於成員變量可以區分出來的場景,this 可加也可以不加,實際效果相同。
但是對於實現javaBean/POJO 來說,我們建議都加上在setXXX,getXXX方法中.

this:
可以加在成員變量的前面來指定對應的引用,也可以加在成員方法的前面。

課堂練習:

public class DemoClassTest{
    public static void main(String[] args){
        
        //第一種方式:
        //在構造方法執行前進行賦值,並且該類每個實現的對象,都會被初始化爲該值.
        //意義: 當我們真的需要一個類的所有對象某些成員變量的值一致的時候。
        Person person = new Person();
        person.entity = "Japan";
        person.showEntity();
        
        //第二種方式
        //構造方法中直接進行賦值.
        //意義: 可以在創建對象的同時進行賦值,同時還可以動態的指定設定的值是什麼
        Person person1 = new Person(40);
        person1.showEntity();
        
        //第三種方式
        //通過調用某個設置值的方法進行賦值,在對象創建完成之後
        //意義: 動態的修改成員變量的值.
        Person person2 = new Person();
        person2.showEntity();     
        //person.age = 12 //error
        /*
        person.setAge(12);
        person.eat();
        
        Person person1 = new Person();
        person1.setAge(15);
        person1.eat();
        */
               
    }
}

class Person{
        
        //改成員變量就不可被外部訪問(外部: 類之外)
        int age=20;
        static String entity;
        
        //是給成員變量賦值
        
        //優先原則: 對於一個方法來說,如果傳遞的形參的變量名稱和類的成員變量名稱相同,jvm在處理的時候優先當做方法的形參來處理.
        
        Person(){
            
        }
        
        Person(int age){
            this.age = age;
        }
        
        void setAge(int age){
            this.age = age;
        }
        
        //拿到成員變量的值
        int getAge(){            
            return this.age;
        }
        
        void eat(){
            System.out.println("eat :"+this.age);
            speak();
        }
        
        void outputAge(){
                System.out.println(this.age);
        }
        
        void speak(){
            System.out.println("speak!");
        }
        
        void showEntity(){
            System.out.println("Entity:"+entity);
        }
        
}



五. 初始化類成員變量的方式
a.在定義成員變量的同時進行賦值.
b.提供外界可訪問到的方法,在方法中進行賦值.
c.通過構造方法進行賦值.
六. static


a.隨着類加載而加載
靜態方法區中來保存靜態成員變量

b.優先於對象創建
Person.className = "java";

c.被類的所有對象共享
靜態的成員變量會保存在該class的靜態方法區中,所以每個對象看到的都是同一份.

d.可以通過類名來訪問也可以通過對象名來訪問。
效果是一樣的。

e.推薦通過類名來訪問
f.靜態的成員,一般稱爲類相關的成員。

f.static 修飾符既可以修飾成員變量,也可以修飾成員方法。 且修飾之後,就可以通過類名來直接訪問到。

g.this變量在靜態方法中不可以使用

h.靜態方法中只能訪問靜態成員變量和靜態方法。
  非靜態方法既可以訪問靜態成員和方法也可以訪問非靜態成員和方法。
 
  非靜態雖然可以訪問靜態的方法,但是不建議這樣做。
課堂練習: 
public class DemoStatic{
    public static void main(String[] args){
        Person person = new Person();
    
        Person.action();
        //Person.speak();
        
        /*
        person.name="ryan";
        System.out.println(new Person().name);
        System.out.println(Person.name);
        */
        method();
    }
    
    static void method(){
        System.out.println("method");
    }
}

class Person{
    static String name = "diffo";
    static int age = 20;
    
    void speak(){
        System.out.println("speak:"+age);//靜態方法無法訪問非靜態方法,運行結果如圖所示錯誤。加上Static之後可正常運行,運行結果如圖所示。

    } 
    static void action(){
        speak();
    }

}


七. main方法.

修飾符 返回類型  方法名 (參數列表){
}
public static void main(String[] args){
}
public: 最大的一個訪問權限,使得jvm能夠成功調用
static: 類相關的,與對象無關. A.main([]);
public class A{
   main(){
    System.("");
   }
}
void: 不需要返回值.
方法名: main
參數列表: 執行的時候,可以傳遞參數.
八. 工具類.

全部都是靜態的方法。所以可以通過 類名.functionName() 方式來訪問。

一般的話,都會對默認構造方法進行私有化處理,來防止別人使用時習慣性的創建對象來調用方

課堂練習:

public class ClassTestFinal{
    
    public static void main(String[] args){
        Square square = new Square();
        square.setLength(2);
        
        System.out.println(SquareUtil.getCircumLength(square));
        System.out.println(SquareUtil.getArea(square));
    }
    
}

//pojo類
class Square{
    private int length;
    
    void setLength(int length){
        this.length = length;
    }
    
    int getLength(){
        return this.length;
    }
}

//正方形工具類
class SquareUtil{
    
    private SquareUtil(){
        
    }
    
    static  int getCircumLength(Square square){
        return 4*square.getLength();
    }
    
    static   int getArea(Square square){
        return square.getLength()*square.getLength();
    }
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章