第七天:面向對象,常用關鍵字

1:成員變量和局部變量的區別(理解)
(1)在類中的位置不同
成員變量:類中方法外
局部變量:方法定義中或者方法聲明上
(2)在內存中的位置不同
成員變量:在堆中
局部變量:在棧中
(3)生命週期不同
成員變量:隨着對象的創建而存在,隨着對象的消失而消失
局部變量:隨着方法的調用而存在,隨着方法的調用完畢而消失
(4)初始化值不同
成員變量:有默認值
局部變量:沒有默認值,必須定義,賦值,然後才能使用

2:類作爲形式參數的問題?(理解)
(1)如果你看到一個方法需要的參數是一個類名,就應該知道這裏實際需要的是一個具體的對象。
/*
形式參數的問題:
基本類型:形式參數的改變不影響實際參數
引用類型:形式參數的改變直接影響實際參數
*/
//形式參數是基本類型
class Demo {
public int sum(int a,int b) {
return a + b;
}
}


//形式參數是引用類型
class Student {
public void show() {
System.out.println("我愛學習");
}
}


class StudentDemo {
//如果你看到了一個方法的形式參數是一個類類型(引用類型),這裏其實需要的是該類的對象。
public void method(Student s) { //調用的時候,把main方法中的s的地址傳遞到了這裏 Student s = new Student();
s.show();
}
}


class ArgsTest {
public static void main(String[] args) {
//形式參數是基本類型的調用
Demo d = new Demo();
int result = d.sum(10,20);
System.out.println("result:"+result);
System.out.println("--------------");

//形式參數是引用類型的調用
//需求:我要調用StudentDemo類中的method()方法
StudentDemo sd = new StudentDemo();
//創建學生對象
Student s = new Student();
sd.method(s); //把s的地址給到了這裏
}

}


3:匿名對象(理解)
(1)沒有名字的對象
(2)應用場景
A:調用方法,僅僅只調用一次的時候。

b:可以作爲實際參數傳遞。



4:封裝(理解)
(1)隱藏實現細節,提供公共的訪問方式
(2)好處:
A:隱藏實現細節,提供公共的訪問方式
B:提高代碼的複用性
C:提高代碼的安全性
(3)設計原則
把不想讓外界知道的實現細節給隱藏起來,提供公共的訪問方式
(4)private是封裝的一種體現。
封裝:類,方法,private修飾成員變量



5:private關鍵字(掌握)
(1)私有的意義,可以修飾成員變量和成員方法
(2)特點:
被private修飾的後的成員只能在本類中被訪問
(3)private的應用:
以後再寫一個類的時候:
把所有的成員變量給private了
提供對應的getXxx()/setXxx()方法

標準的學生類:

/*

封裝和private的應用:
A:把成員變量用private修飾
B:提高對應的getXxx()和setXxx()方法
*/
//定義學生類
class Student {
//姓名
private String name;
//年齡
private int age;

//姓名獲取值
public String getName() {
return name;
}

//姓名設置值
public void setName(String n) {
name = n;
}

//年齡獲取值
public int getAge() {
return age;
}

//年齡賦值
public void setAge(int a) {
age = a;
}
}


//測試類
class StudentTest {
public static void main(String[] args) {
//創建學生對象
Student s = new Student();

//使用成員變量
//錯誤:被私有修飾了,外界不能直接訪問了
//System.out.println(s.name+"---"+s.age);
System.out.println(s.getName()+"---"+s.getAge());

//給成員變量賦值
//s.name = "林青霞";
//s.age = 27;
//通過方法給賦值
s.setName("林青霞");
s.setAge(27);
System.out.println(s.getName()+"---"+s.getAge());
}
}


6:this關鍵字(掌握)
(1)代表當前類的引用對象
記住:哪個對象調用方法,該方法內部的this就代表那個對象
(2)this的應用場景:
A:解決了局部變量隱藏成員變量的問題
B:其實this還有其他的應用,明天講解。
/*
標準的代碼改進版

this:哪個對象調用那個方法,this就代表那個對象
*/
class Student {
private String name;
private int age;

public String getName() {
return name; //這裏其實是隱含了this
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
}


class StudentTest2 {
public static void main(String[] args) {
//創建一個對象
Student s1 = new Student();
s1.setName("林青霞");
s1.setAge(27);
System.out.println(s1.getName()+"---"+s1.getAge());

//創建第二個對象
Student s2 = new Student();
s2.setName("劉意");
s2.setAge(30);
System.out.println(s2.getName()+"---"+s2.getAge());
}
}


7:構造方法(掌握)
(1)作用:用於對對象的數據進行初始化
(2)格式:
A:方法名和類名相同
B:沒有返回值類型,連void都不能有
C:沒有返回值

思考題:構造方法中可不可以有return語句呢?
可以。而是我們寫成這個樣子就OK了:return;
其實,在任何的void類型的方法的最後你都可以寫上:return;
(3)構造方法的注意事項
A:如果我們沒寫構造方法,系統將提供一個默認的無參構造方法
B:如果我們給出了構造方法,系統將不再提供默認構造方法
如果這個時候,我們要使用無參構造方法,就必須自己給出。
推薦:永遠手動自己給出無參構造方法。
(4)給成員變量賦值的方式
A:setXxx()
B:帶參構造方法
(5)標準案例
class Student {
private String name;
private int age;

public Student(){}

public Student(String name,int age) {
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
}

測試:
class StudentDemo {
public static void main(String[] args) {
//方式1
Student s1 = new Student();
s1.setName("林青霞");
s1.setAge(27);
System.out.println(s1.getName()+"---"+s1.getAge());

//方式2
Student s2 = new Student("劉意",30);
System.out.println(s2.getName()+"---"+s2.getAge());
}
}



8:代碼:Student s = new Student();做了哪些事情?(理解)
(1)把Student.class文件加載到內存
(2)在棧內存爲s開闢空間
(3)在堆內存爲學生對象申請空間
(4)給學生的成員變量進行默認初始化。null,0
(5)給學生的成員變量進行顯示初始化。林青霞,27
(6)通過構造方法給成員變量進行初始化。劉意,30
(7)對象構造完畢,把地址賦值給s變量

9:面向對象的練習題(掌握)
(1)標準的手機類的定義和測試
(2)Demo類有求和方法,Test類進行測試。
什麼時候定義成員變量?
當該變量是用來描述一個類的時候。
(3)長方形案例
(4)員工案例
(5)MyMath案例(自己提供加減乘除並測試)

10:static關鍵字(理解)
(1)靜態的意思。可以修飾成員變量和成員方法。
(2)靜態的特點:
A:隨着類的加載而加載
B:優先與對象存在
C:被類的所有對象共享
這其實也是我們判斷該不該使用靜態的依據。
舉例:飲水機和水杯的問題思考
D:可以通過類名調用
既可以通過對象名調用,也可以通過類名調用,建議通過類名調用。
(3)靜態的內存圖
靜態的內容在方法區的靜態區
(4)靜態的注意事項;
A:在靜態方法中沒有this對象
B:靜態只能訪問靜態(代碼測試過)
(5)靜態變量和成員變量的區別
A:所屬不同
靜態變量:屬於類,類變量
成員變量:屬於對象,對象變量,實例變量
B:內存位置不同
靜態變量:方法區的靜態區
成員變量:堆內存
C:生命週期不同
靜態變量:靜態變量是隨着類的加載而加載,隨着類的消失而消失
成員變量:成員變量是隨着對象的創建而存在,隨着對象的消失而消失
D:調用不同
靜態變量:可以通過對象名調用,也可以通過類名調用
成員變量:只能通過對象名調用
(6)main方法是靜態的
public:權限最大
static:不用創建對象調用
void:返回值給jvm沒有意義
main:就是一個常見的名稱。
String[] args:可以接收數據,提供程序的靈活性
格式:java MainDemo hello world java
 java MainDemo 10 20 30
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章