java學習第9天
類和物件:
萬物可被看為物件,去關注瞭解物件的過程被稱為面向物件,對物件進行的程式設計。
類是現實生活中一類具有共同屬性和行為的事物的抽象,類的特點:類是物件的資料型別,類是具有相同屬性和行為得一組物件集合、
物件的屬性:物件具有的各種特徵,每個物件的每個屬性都擁有特定的值。
物件的行為:物件能執行的操作
類是Java程式的基本組成單位。類的屬性通過成員變數來體現。行為通過成員方法來體現。方法不含Static
類的定義:public class 類名{
//定義成員變數
//定義成員方法
}
物件的使用:
建立物件: 格式:類名物件名=new 類名();
Phone p= new Phone();
使用物件:
使用成員變數
格式:物件名.變數名 例:p.brand
使用成員方法
格式:物件名.方法名 例 p.call
案例:
package myproject;
public class Student {
int age;
String name;
public void Study() {
System.out.println("好好學習,天天向上");
}
public void doHonework() {
System.out.println("敲程式碼");
}
}
package myproject;
public class StudentTest {
public static void main(String[] args) {
Student a=new Student();
a.age=19;
a.name="xiaoming";
System.out.println(a.name);
System.out.println(a.age);
a.doHonework();
a.Study();
}
}
物件記憶體圖
多個物件指向不同的記憶體,多個物件指向相同的記憶體(其中一個物件值改變,另一個之也會發生改變)
成員變數和區域性變數
區別(1)類中位置不同,成員變數在類中方法外,區域性變數在方法內或方法宣告上。(2)記憶體中位置不同,成員變數在堆記憶體,區域性變數在棧記憶體。(3)生命週期不同:成員變數隨著物件的存在而存在,隨著物件的消失而消失,區域性變數隨著方法呼叫而存在,隨著方法呼叫完就消失,(4)初始化值不同:成員變數有預設的初始值,區域性變數沒有預設的初始值,必須先定義,賦值,才能使用。
Private關鍵字
是一個許可權修飾符,可以修飾成員(成員變數和成員方法),作用是保護成員不被別的類使用,被private修飾的成員只在本類中才能被訪問。
針對private修飾的成員變數,如果需要被其他類使用,提供相應的操作
提供“get變數()”方法,用於獲取成員變數的值,方法用public修飾,提供“set變數名(引數)方法,用於設定成員變數的值,方法用public修飾。
案例:
package myproject;
public class Student {
private int age;
String name;
public void setAge(int a) {
if(age>120||age<0) {
System.out.println("年齡錯誤");
}else {
age=a;
}
}
public int getAge() {
return age;
}
public void Study() {
System.out.println("好好學習,天天向上");
}
public void doHonework() {
System.out.println("敲程式碼");
}
public void show() {
System.out.println(age+" "+name);
}
}
package myproject;
public class StudentTest {
public static void main(String[] args) {
Student a=new Student();
a.setAge(19);
a.name="xiaoming";
a.show();
a.doHonework();
a.Study();
}
}
This 關鍵字this 修飾的變數用於指代成員的變數,方法的形參如果與成員變數同名,不帶this修飾的變數指的是形參,而不是成員變數,方法的形參沒有與成員變數同名,不帶this修飾的變數指的是成員變數。
什麼時候使用this呢?
解決區域性變數隱藏成員變數
This:代表所在的類的物件的使用
方法被哪個物件呼叫,this就代表哪個物件。
package myproject;
public class Student {
private int age;
private String name;
public void setAge(int a) {
if(age>120||age<0) {
System.out.println("年齡錯誤");
}else {
age=a;
}
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name=name;
}
public String getName() {
return name;
}
public void Study() {
System.out.println("好好學習,天天向上");
}
public void doHonework() {
System.out.println("敲程式碼");
}
public void show() {
System.out.println(age+" "+name);
}
}
package myproject;
public class StudentTest {
public static void main(String[] args) {
Student a=new Student();
a.setAge(19);
a.setName("xiaoming");
a.show();
a.doHonework();
a.Study();
}
}
封裝:封裝是面向物件的三大特徵(繼承,封裝,多型)。
將類的某些資訊隱藏在類內部,不允許外部程式直接訪問,而是通過該類提供的方法實現對隱藏資訊的操作和訪問,成員變數private,提供對應的getXxx()/setXxx()方法
封裝的好處:通過方法來控制成員變數的操作,提高了程式碼的安全性,把程式碼用方法進行封裝,提高了程式碼的複用性。
構造方法:
概述:完成物件的初始化,與建構函式類似。
構造方法的注意事項:任何物件都有建構函式,在不宣告構造方法使系統會預設宣告構造方法。