封裝與參數(shù)、this Static關(guān)鍵字 構(gòu)造器 塊

? ? ? ? ? ? ? ? ? ? ? ? ? ?封裝與參數(shù)、this Static關(guān)鍵字 構(gòu)造器 塊

1.構(gòu)造器

*

* new關(guān)鍵字做的事情:

* 1.在堆中為這個對象開辟空間,并且成員屬性|變量會跟隨對象進(jìn)入到堆內(nèi)存中,并附默認(rèn)值

*? 2.調(diào)用構(gòu)造器,對對象初始化信息

*? 3.將地址返回給引用

*

* 構(gòu)造器|構(gòu)造方法|構(gòu)造函數(shù):

*? 構(gòu)造器就是一個特殊的方法

* 作用:為對象初始化信息

*? 定義:

*? 修飾符 類名(參數(shù)列表){

*? 方法體;

*? }

*? 構(gòu)造器的方法名必須與類名保持一致

*? 構(gòu)造器不需要定義返回值類型和void,可以沒有return

*? 根據(jù)需要定義return,提前結(jié)束方法|構(gòu)造器的作用

*?

*? 注意:

*? 如果沒有顯示的定義構(gòu)造器,編譯器會自動為你提供一個空構(gòu)造(參數(shù)為空的構(gòu)造器)

*? 如果有顯示定義構(gòu)造器,編譯器都不會在為你提供任何構(gòu)造器了

*?

*? 構(gòu)造器也是一個方法,就擁有方法重載的特性,可以構(gòu)成方法的重載

*? 構(gòu)造器不能和abstract,static,final一起使用

*?

*?

*? 構(gòu)造器不是創(chuàng)建對象使用的,是為對象初始化信息用的

*? 如果創(chuàng)建對象的同時就能夠確定所有屬性|某些屬性的值,可以選擇使用帶參構(gòu)造,創(chuàng)建對象的同時賦值,簡單

*? 如果創(chuàng)建對象的時候不確定屬性值,可以選擇是使用空構(gòu)造,后續(xù)知道值的時候再通過對象.屬性為某個屬性賦值

*? 只要創(chuàng)建對象肯定途中會調(diào)用構(gòu)造器

*?

*? 建議:

*? 如果以后定義這種自定義的模板類,至少提供一個空構(gòu)造

2.參數(shù)

定義方法()中的參數(shù):形式參數(shù)(形參)? 變量的聲明

調(diào)用方法()中的參數(shù):實際參數(shù)(實參)? 變量的賦值

形參和實參之間需要一一對應(yīng)

3.this 關(guān)鍵字

/*

* this 代表當(dāng)前創(chuàng)建對象,存儲當(dāng)前對象的地址

* 在構(gòu)造器的首行調(diào)用本類中的其他構(gòu)造器

* this(參數(shù)列表)

* 必須定義在構(gòu)造器首行

* 構(gòu)造器之間不能通過this相互調(diào)用

在成員方法|構(gòu)造器中用來區(qū)分同名變量問題

成員變量和局部變量之間同名問題

默認(rèn)就近原則,如果想要指代成員,通過this調(diào)用成員? this.name

如果不存在同名問題,使用成員,this.可以省略,直接寫成員的名字,如果出現(xiàn)同名不能省略,如果省略就會發(fā)生就近原則

*

* 構(gòu)造器只能跟隨new一起使用,不能調(diào)用,但是可以通過this

*? this不能和static一起使用

*/

public class ThisDemo01 {

public static void main(String[] args) {

Person p=new Person("張三",18,false,"程序猿");

p.info();

System.out.println(p);

}

}

class Person{

public String name;

public int age;

public boolean gender; //false->男? true->女

public String occupation; //職業(yè)

public Person() {

// TODO Auto-generated constructor stub

}

//就近原則? 誰離我進(jìn)我找誰

public Person(String name, int age,boolean gender) {

//參數(shù)接收到的值,實參值賦值給對象成員變量

this.name=name;

this.age=age;

this.gender=gender;

}

public Person(String pname, int page,boolean pgender,String poccupation) {

//把當(dāng)前構(gòu)造器接收到的參數(shù)值,傳遞給調(diào)用的其他構(gòu)造器,簡化代碼

this(pname,page,pgender);

occupation = poccupation;

}

public void info(){

//局部變量

String name="哈哈";

System.out.println(this.name+","+this.age+","+gender+","+occupation);

System.out.println(this);

}

}

5.Static關(guān)鍵字

/*

* static 關(guān)鍵字

* 靜態(tài)的,靜態(tài)的內(nèi)容是屬于類的,成員是屬于對象的

* static修飾變量: 靜態(tài)變量|類變量

* static是一個成員修飾符,只能用來修飾成員,不能用來修飾局部

*?

*? static修飾方法: 靜態(tài)方法|類方法

*? 靜態(tài)的內(nèi)容的使用方式:

*? 1.類名.靜態(tài)變量名? |? 類名.靜態(tài)方法名()

*? 2.對象.靜態(tài)變量名 |? 對象.靜態(tài)方法ing()

*?

*? 注意:

*? 靜態(tài)都是屬于類的,都會在類第一次加載完成之后初始化一次,靜態(tài)的變量會在靜態(tài)區(qū)中存在,多個對象共享的

*? 靜態(tài)的內(nèi)容中,可以直接使用靜態(tài)的內(nèi)容,不可以直接使用非靜態(tài)的內(nèi)容,但是可以通過對象使用

*? 成員的內(nèi)容中,可以直接使用靜態(tài)的內(nèi)容,可以直接使用非靜態(tài)的

*/

public class StaticDemo01 {

//成員變量

public int id=5;

//靜態(tài)變量

static int age=10;

//成員方法

public void test1(){

System.out.println("我是一個成員方法");

System.out.println(id);

System.out.println(age);

}

//靜態(tài)方法

public static void test2(){

System.out.println("我是一個靜態(tài)方法");

//System.out.println(this); 因為靜態(tài)的方法在調(diào)用之前可以能沒有對象,找不到對象,多以this不能使用

}

public static void main(String[] args) {

//static int a=5; //局部變量

StaticDemo01 demo=new StaticDemo01();

System.out.println(demo.id); //通過對象使用成員

System.out.println(age);? //因為在本類中

System.out.println(StaticDemo01.age);? //通過類名使用靜態(tài)變量

System.out.println(demo.age); //通過對象使用靜態(tài)變量

demo.test1(); //成員方法

demo.test2(); //靜態(tài)方法

StaticDemo01.test2();

System.out.println();

}

}

6.封裝

/*

* 安全隱患問題: 有些數(shù)據(jù)的值,不符合生活邏輯

* 介紹一個關(guān)鍵字? private 私有的

* private 成員修飾符,只能修飾成員,不能修飾局部

* 私有的內(nèi)容,只能在本類中使用,外部類中無法使用

* 私有的屬性,需要配合設(shè)置器和訪問器一起使用--> 公共的訪問方式

* 設(shè)置器setter和訪問器getter 是一個方法,是公共的

*

*

* 封裝:

* 隱藏內(nèi)部的實現(xiàn)細(xì)節(jié),對外提供公共的訪問方式

*

* 封裝的好處;

* 1.提高程序的安全性

*? 2.提高代碼的復(fù)用性(類,方法..)

*?

* 屬性私有化,配和公共的訪問方式->是java中面向?qū)ο蠓庋b的一種具體的體現(xiàn)

* 私有是封裝 對

* 封裝是私有 錯? 因為:不僅僅是私有,還有方法,類..都是封裝的體現(xiàn)

*

* 以后再定義這中模板類的代碼:(Student,Person,Car,Phone...),這系列類統(tǒng)稱都是javabean類

* 標(biāo)準(zhǔn)的javabean定義規(guī)范:

* 1.類的公共的

*? 2.至少提供一個空構(gòu)造

*? 3.屬性全部私有

*? 4.并提供公共的訪問方式

*/

public class javaBeanDemo {

public static void main(String[] args) {

Person p=new Person();

p.name="yinwei";

//p.age=-18;

p.setAge(9);

p.info();

System.out.println(p.getAge());

}

}

class Person{

public String name;

private int age;

public Person() {

}

public Person(String name, int age) {

this.name = name;

this.age = age;

}

//age屬性的設(shè)置器

public void setAge(int age){

if(age>=0){

this.age=age;

}else{

System.out.println("年齡不合法");

this.age=18;

}

}

//age屬性的訪問器

//返回值:要 int? 參數(shù)

public int getAge(){

return this.age;

}

public void info(){

System.out.println(name+"-->"+age);

}

}

7.塊

/*

* block 塊 {}-->作用域

* {}->放在方法中->局部代碼塊|普通語句塊 執(zhí)行時機(jī):跟隨方法,放方法被調(diào)用的時候執(zhí)行

* {}->類中方法外部->構(gòu)造塊 執(zhí)行時機(jī):創(chuàng)建對象

* static{}->類中方法外->靜態(tài)塊 執(zhí)行時機(jī):類加載

*

* 構(gòu)造塊中的內(nèi)容,在編譯的時候,會被編譯到要執(zhí)行的構(gòu)造器代碼之前,如果存在多個構(gòu)造塊從上倒下一次執(zhí)行

* 靜態(tài)塊的內(nèi)容只會執(zhí)行一次,在類第一次加載之后執(zhí)行,并且只有一次,如果存在多個靜態(tài)塊從上倒下一次執(zhí)行

*

* static-->main-->構(gòu)造塊->構(gòu)造器

*/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容