MATLAB 結構型變數
阿新 • • 發佈:2021-01-09
面向物件基礎
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); } } }