1. 程式人生 > 其它 >MATLAB 結構型變數

MATLAB 結構型變數

面向物件基礎

3.1面向物件的概念

程式中使用物件來對映現實中的事物,使用物件的關係來描述事物之間的關係,這種思想就是面向物件。

面向物件三大特性

  • 封裝:將物件的屬性和行為封裝起來,不需要讓外界知道具體實現細節
  • 繼承:描述類和類之間的關係。通過繼承,可以無需重寫原有類的情況下,對原有類的功能進行拓展
  • 多型:多型性指在程式中允許出現重名的現象,它指在一個類中定義的屬性和方法被其他類繼承後,它們具有不同的資料型別或表現出不同的行為,使得一個屬性有不同的語義。

3.2類和物件

類的定義

public class Person {
    //定義類的屬性
    int age;
    //定義類的方法
    void speak(){
        System.out.println("Speaking");
    }
}

類的建立和使用

public class Demo {
    public static void main(String[] args) {
        Person person1=new Person();
        Person person2=new Person();
        person1.age=10;
        person2.age=100;
        person1.speak();
        person2.speak();
    }
}

類的封裝

public class Person {
    //定義類的屬性為私有,外部變數不可以直接訪問
    private int age;
    //留一個介面,給外部變數獲得age的值
    public int getAge() {
        return age;
    }
    //檢查輸入的age是否合法,如果合法才賦值
    public void setAge(int age) {
        if(age>0&&age<120) {
            this.age = age;
        }else {
            System.out.println("你輸入的年齡不合法");
        }
    }
    //定義類的方法,用來描述物件的行為
    void speak(){
        System.out.println("I am "+age+ "years old");
    }
}
public class Demo {
    public static void main(String[] args) {
        Person person1=new Person();
        person1.setAge(120);
        person1.speak();
    }
}

3.3構造方法

構造方法的定義

  • 條件

    ①方法名和類名相同

    ②在方法名的面前沒有返回值型別的宣告

    ③在方法中不能使用return語句返回一個值,但是可以單獨寫return語句來作為方法的結束

    public class Person {
        int age;
        String name;
        //無參構造
        Person(){
            System.out.println("呼叫無參構造器");
        }
        //有參構造
        Person(int age,String name)
        {
            this.age=age;
            this.name=name;
            System.out.println("呼叫有參構造器");
            System.out.println("age:"+age+"\nname"+name);
        }
    }
    
    
    public class demo {
        public static void main(String[] args) {
            //在例項化物件時會自動呼叫該類的構造方法
            Person person=new Person();
            Person person1=new Person(6,"Tom");
        }
    }
    

3.4this關鍵字

  • 通過this明確訪問一個類成員變數

    public class Person {
        int age;
        String name;
        Person(int age,String name)
        {
            this.age=age;
            this.name=name;
        }
    }
    
  • 通過this關鍵字呼叫成員方法

    public class Person {
        void openMouth()
        {
            System.out.println("speak");
        }
        void speakWord()
        {
            this.openMouth();
            System.out.println("word");
        }
    }
    
  • 構造方法是在例項化物件時被Java虛擬機器自動呼叫的,在程式中不能像呼叫其他方法一樣去呼叫構造方法,但是可以在一個構造方法中使用this關鍵字來呼叫其他構造方法

    public class Person {
        int age;
        String name;
        //無參構造
        Person(){
            System.out.println("呼叫無參構造器");
        }
        //有參構造
        Person(int age,String name)
        {
            this();//呼叫無參構造方法
            System.out.println("呼叫有參構造方法");
        }
    }
    
    • 注意:

      ①只能在構造方法中使用this呼叫其他的構造方法,不能在成員方法中使用。

      ②在構造方法中,使用this呼叫構造方法的語句必須放在第一行,且只能出現一次

      ③不餓能在一個類的兩個構造方法中this相互呼叫

3.5static關鍵字

靜態變數

用static關鍵字修飾的成員變數稱為靜態變數,靜態變數被所有例項共享

public class Student2 {
    static String school;
}
public class Demo {
    public static void main(String[] args) {
        Student2.school="THU";
        Student2 stu1=new Student2();
        Student2 stu2=new Student2();
        System.out.println(stu1.school);
        System.out.println(stu2.school);
    }
}

static只能修飾成員變數,不能用於修飾區域性變數

靜態方法

static修飾的方法稱為靜態方法,靜態方法既可以通過物件來訪問,也可以通過類來訪問

public class Person {
    public static void Say()
    {
        System.out.println("hello");
    }
}

public class Demo {
    public static void main(String[] args) {
        //通過類訪問
        Person.Say();
        //通過物件訪問
        Person p=new Person();
        p.Say();
    }
}

靜態程式碼塊

  • 在Java中,使用一個大括號包起來的若干行程式碼稱為一個程式碼塊。
  • 用static關鍵字修飾的程式碼塊稱為靜態程式碼塊
  • 類載入時,靜態程式碼塊會被執行,由於類只加載一次,所以靜態程式碼塊也只執行一次
  • 靜態程式碼塊常用於對成員變數進行初始化
public class Student {

    {
        //程式碼塊(匿名程式碼塊)
        //建立物件時建立
        //可以通過匿名程式碼塊來賦初始值
        System.out.println("匿名程式碼塊");
    }
    static{
        //靜態程式碼塊(匿名程式碼塊)
        //類一載入就執行,只執行一次
        System.out.println("靜態程式碼塊");
    }
    public Student(){
        System.out.println("構造方法");
    }

    public static void main(String[] args) {
        Student s1=new Student();
        Student s2=new Student();
    }
}

3.6成員內部類

  • 在類裡面定義的類稱為成員內部類

    public class Outer {
        private int id=10;
        public void out(){
            System.out.println("這是外部類的方法");
        }
        public class Inner{
            public void in(){
                System.out.println("這是內部類方法");
            }
            //內部類可以獲得外部類的私有屬性
            public void getID(){
                System.out.println(id);
            }
        }
    }