Java之面向?qū)ο笤斀?/h1>
時(shí)間:2019-03-07 09:04:01
關(guān)鍵字:
java
構(gòu)造函數(shù)
面向?qū)ο?/a>
手機(jī)看文章掃描二維碼
隨時(shí)隨地手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
什么是面向?qū)ο?br />既然講到面向?qū)ο蟆>鸵私饬硪环N編程模式,面向過(guò)程
面向過(guò)程強(qiáng)調(diào)的是do,就是行為,相當(dāng)于函數(shù)
面向?qū)ο髲?qiáng)調(diào)的是this.do.重點(diǎn)在于this上就是將函數(shù)以及相關(guān)聯(lián)的一些屬性?xún)?nèi)容封裝在一起
面向?qū)ο笾械娜齻€(gè)基本特性,封裝,繼承,多態(tài)
/*
?分析main方法
? 使用public修飾:公共的
? 使用static修飾:靜態(tài)的
? 返回值類(lèi)型void:main方法的調(diào)用者是JVM不需要返回值
? 函數(shù)名main:JVM要尋找main這幾個(gè)實(shí)際的字母組成的字符串
? 參數(shù):參數(shù)類(lèi)型為String[] 變量名稱(chēng)為args(隨便起的名字):
? 參數(shù)的意義:早期使用main函數(shù)的參數(shù)接收鍵盤(pán)錄入值,現(xiàn)在我們可以使用Scanner來(lái)接收鍵盤(pán)錄入值
*/
class Demo4
{
?public static void main(String[] args){
? for(int i=0;i<args.length;i++){
? ?System.out.print(args[i]);
? }
?}
}
//==============================================
.成員變量與局部變量的區(qū)別
1.成員變量定義在類(lèi)中。
? ?局部變量定義在方法中,參數(shù)列表上。(位置)
2.成員變量在這個(gè)類(lèi)中有效
局部只在自己所屬的大括號(hào)內(nèi)有效,大括號(hào)結(jié)束,局部變量失去作用域
3、成員變量存在于堆內(nèi)存中,隨著對(duì)象的產(chǎn)生而產(chǎn)生,消失而消失
? ? 局部變量存在于棧內(nèi)存中,隨著所屬域的運(yùn)行而存在(基本上是方法消失而消失)。
構(gòu)造函數(shù):用于給對(duì)象初始化
1.該函數(shù)的名詞和所在類(lèi)的名稱(chēng)相同
2.不需要定義返回值類(lèi)型
3.該函數(shù)沒(méi)有具體的返回值
記?。核袑?duì)象創(chuàng)建時(shí),都需要初始化才可以使用。
注意事項(xiàng):一個(gè)類(lèi)在定義時(shí),如果沒(méi)有定義過(guò)構(gòu)造函數(shù),那么該類(lèi)中會(huì)自動(dòng)生成一個(gè)空參數(shù)的構(gòu)造函數(shù),為了方便該類(lèi)創(chuàng)建對(duì)象,完成初始化。如果在類(lèi)中自定義了構(gòu)造函數(shù),那么默認(rèn)的構(gòu)造函數(shù)就沒(méi)有了。
一個(gè)類(lèi)中,可以有多個(gè)構(gòu)造函數(shù),因?yàn)樗鼈兊暮瘮?shù)名稱(chēng)都相同,所以只能通過(guò)參數(shù)列表來(lái)區(qū)分。所以,一個(gè)類(lèi)中如果出現(xiàn)多個(gè)構(gòu)造函數(shù)。它們的存在是以重載體現(xiàn)的。
構(gòu)造函數(shù)和一般函數(shù)有什么區(qū)別(初始化,/對(duì)象創(chuàng)建后調(diào)用)
1.格式上不同
2構(gòu)造函數(shù)是在對(duì)象創(chuàng)建時(shí),就被調(diào)用,用于初始化,而且初始化動(dòng)作只執(zhí)行一次
一般函數(shù),是對(duì)象創(chuàng)建后,需要調(diào)用才執(zhí)行,可以被調(diào)用多次
構(gòu)造代碼塊和構(gòu)造函數(shù)有什么區(qū)別(初始化對(duì)象的針對(duì)性區(qū)別)
構(gòu)造代碼塊:是給所有對(duì)象進(jìn)行初始化,也就是說(shuō),所有的對(duì)象都會(huì)調(diào)用一個(gè)代碼塊,只要一建立對(duì)象,就會(huì)調(diào)用這個(gè)代碼塊
構(gòu)造函數(shù):對(duì)象初始化
/*
?代碼塊:
? 代碼存在區(qū)域
?
?存在意義:
? 1、可以控制變量的生命周期
? 2、給屬性賦值(初始化的過(guò)程)
?
?執(zhí)行順序:
? 靜態(tài)代碼塊>>一般代碼塊(構(gòu)造代碼塊)>>構(gòu)造函數(shù)
?
*/
class Demo6
{
?public static void main(String[] args){
? Person p = new Person();
? p.getAllInfo();
?
? String a = "aaaa";
? String b = "aaaa";
?
? int[] c = {1,2,3};
? int[] d = {1,2,3};
?
? //以后會(huì)使用equals方法來(lái)比較兩個(gè)字符串是否相等
? //現(xiàn)階段可以暫時(shí)使用==,以后就不要使用了
? System.out.println(a==b?1:0);
? System.out.println(c==d?1:0);
?}
}
class Person
{
?private String name;
?private int age;
?private String sex;
?
?{
? System.out.println("一般代碼塊");
?}
?static{
? System.out.println("靜態(tài)代碼塊");
?}
?
?public Person(){
? System.out.println("構(gòu)造函數(shù)");
?}
?
?public Person(String name,int age,String sex){
? this.name = name;
? this.age = age;
? this.sex = sex;
?}
?
?public void getAllInfo(){
? System.out.println("姓名:"+name+" 年齡:"+age+" 性別:"+sex);
?}
?
?public static void myStaticMethod(){
? System.out.println("我熱愛(ài)編程,堅(jiān)持下去就能高薪~!");
?}
?
?public void setName(String name){
? this.name = name;
?}
?public String getName(){
? return name;
?}
?
?public void setAge(int age){
? this.age = age;
?}
?public int getAge(){
? return age;
?}
?
?public void setSex(String sex){
? this.sex = sex;
?}
?public String getSex(){
? return sex;
?}
}?
//================================================
創(chuàng)建一個(gè)對(duì)象都在內(nèi)存中做了什么事情,Person p = new Person();
1.先將硬盤(pán)上指定位置的Person.class文件加載進(jìn)內(nèi)存。//加載類(lèi)(字節(jié)碼)進(jìn)內(nèi)存
2.在執(zhí)行main方法時(shí),在棧內(nèi)存中開(kāi)辟main方法的空間(壓棧--進(jìn)棧),然后在main方法的棧區(qū)分配一個(gè)變量P.
3.在堆內(nèi)存中開(kāi)辟一個(gè)實(shí)體空間,分配一個(gè)內(nèi)存首地制止。
4.在該實(shí)體空間中進(jìn)行屬性空間的分配,并進(jìn)行了默認(rèn)的初始化/或者是顯示初始化。(就是初始化)
5.將首地址值賦給p,使p變量指向該對(duì)象