------ Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! -------
第一講 面向對象--封裝
1.概述
想要描述:提取對象中共性內容。對具體的抽象。
描述時:這些對象的共性有:姓名,年齡,性別,學習java功能。
映射到java中,描述就是class定義的類。
具體對象就是對應java在堆內存中用new建立實體。
class Car{
//描述顏色
String color = "紅色";
//描述輪胎數
int num = 4;
//運行行爲。
void run(){
System.out.println(color+".."+num);
}
}
class CarDemo{
public static void main(String[] args) {
//生產汽車。在java中通過new操作符來完成。
//其實就是在堆內存產生一個實體。
//Car c = new Car();//c就是一個類類型變量。記住:類類型變量指向對象。
//需求:將已有車的顏色改成藍色。指揮該對象做使用。在java指揮方式是:對象.對象成員
//c.color = "blue";
//c.run();
//Car c1 = new Car();
//c1.run();//red 4;
// Car c = new Car();
// c.num = 5;
/*
new Car().num = 5;
new Car().color = "blue";
new Car().run();
Car c = new Car();
c.run();
c.num = 4;
new Car().run();
*/
}
//需求:汽車修配廠。對汽車進行改裝,將來的車夠改成黑車,三個輪胎。
public static void show(Car c){
<span style="white-space:pre"> </span>c.num = 3;
<span style="white-space:pre"> </span>c.color = "black";
<span style="white-space:pre"> </span>c.run();
<span style="white-space:pre"> </span>}
}
作用範圍:
成員變量作用於整個類中。
局部變量作用於函數中,或者語句中。
在內存中的位置:
成員變量:在堆內存中,因爲對象的存在,纔在內存中存在。
局部變量:存在棧內存中。
5.匿名對象的應用
new Car().num = 5;
new Car().color = "blue";
new Car().run();
匿名對象使用方式一:當對象的方法只調用一次時,可以用匿名對象來完成,這樣寫比較簡化。
如果 對一個對象進行多個成員調用,必須給這個對象起一個名字。
匿名對象使用方式二:可以將對象作爲實際參數進行傳遞。
Car q = new Car();
show(q);
//show(new Car());
6.封裝概述
封裝:是指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式。
好處:將變化隔離。便於使用。提高重用性。提高安全性。
封裝原則:將不需要對外提供的內容隱藏起來。把屬性都隱藏,提供公共方法隨其訪問。
7.封裝private
注意:私有僅僅是封裝的一種表現形式。
之所以對外提供訪問方式,就因爲可以在訪問方式中加入邏輯判斷等語句。
對訪問的數據進行操作。提高代碼的健壯性。
private int age;
public void setAge(int a)
{
if(a>0 && a<130)
{
age = a;
speak();
}
else
System.out.println("feifa age");
}
8.構造函數
特點:1.函數名與類名相同。2.不用定義返回值類型。3.不可以寫return語句
作用:給對象進行初始化。
注意:1.默認構造函數的特點。2.多個構造函數是以重載的形式存在的。
9.構造代碼塊
開發見不到,但在面試筆試題中可以見到。
/*
構造代碼塊。
作用:給對象進行初始化。
對象一建立就運行,而且優先於構造函數執行。
和構造函數的區別:
構造代碼塊是給所有對象進行統一初始化,
而構造函數是給對應的對象初始化。
構造代碼快中定義的是不同對象共性的初始化內容。
*/
{
//System.out.println("person code run");
cry();
}
10.this關鍵字
this:看上去,是用於區分局部變量和成員變量同名情況。
特點:this代表其躲在函數所屬對象的應用。換言之:this代表本類對象的引用。
什麼時候用this?當在函數內需要用到調用函數的對象時,就用this。
private int age;
Person(int age){
this.age = age;
}
public void speak(){
System.out.println("name="+this.name+"...age="+this.age);
this.show();
}
public void show(){
System.out.println(this.name);
}
Person p1 = new Person(20);
Person p2 = new Person(25);
this:就代表本類的對象,到底代表哪一個呢?
this代表它所在函數所屬對象的引用。
簡單說:哪個對象在調用this所在的函數,this就代表哪個對象。
11.this關鍵字的應用
this的應用:當定義類中功能時,該函數內部要用到調用該函數的對象時,這時用this來表示這個對象。
但凡本類功能內部使用了了本類對象,都用this表示。
/*
需求:給人定義一個用於比較年齡是否相同的功能。也就是是否是同齡人。
*/
public boolean compare(Person p){
return this.age==p.age;
}
Person p1 = new Person(20);
Person p2 = new Person(25);
boolean b = p1.compare(p2);
System.out.println(b);
12.this關鍵字在構造函數間調用
this語句 :用於構造函數之間進行互相調用。
this語句只能定義在構造函數的第一行。因爲初始化要先執行。
class Person{
private String name;
private int age;
{
System.out.println("code run");
}
Person(){
//this("hah");
System.out.println("person run");
}
Person(String name){
//this();
this.name =name;
}
Person(String name,int age){
//this(name);
//this.name = name;
this.age = age;
}
}
class PersonDemo4{
public static void main(String[] args) {
new Person();
//Person p = new Person("lisi",30);
//Person p1 = new Person("lisi2",36);
}
}