類
成員變量和局部變量的區(qū)別?
-
在類中的位置不同
成員變量:在類中方法外
局部變量:在方法定義中或者方法聲明上
-
在內(nèi)存中的位置不同
成員變量:在堆內(nèi)存
局部變量:在棧內(nèi)存
-
生命周期不同
成員變量:隨著對(duì)象的創(chuàng)建而存在理疙,隨著對(duì)象的消失而消失
局部變量:隨著方法的調(diào)用而存在畜挨,隨著方法的調(diào)用完畢而消失
-
初始化值不同
成員變量:有默認(rèn)初始化值
局部變量:沒有默認(rèn)初始化值,必須定義胖烛,賦值挫以,然后才能使用者蠕。
-
注意事項(xiàng):
- 局部變量名稱可以和成員變量名稱一樣,在方法中使用的時(shí)候掐松,采用的是就近原則踱侣。
方法
方法就是函數(shù),function大磺,是為了完成特定功能的代碼塊
修飾符 返回值類型 方法名(參數(shù)類型 參數(shù)名1抡句,參數(shù)類型 參數(shù)名2…) {
函數(shù)體;
return 返回值;
}
- 定義函數(shù)可以將功能代碼進(jìn)行封裝
- 便于對(duì)該功能進(jìn)行復(fù)用
- 函數(shù)只有被調(diào)用才會(huì)被執(zhí)行
(當(dāng)函數(shù)被調(diào)用的時(shí)候,jvm虛擬機(jī)會(huì)在內(nèi)存中給該函數(shù)分配一塊內(nèi)存空間杠愧,該內(nèi)存空間里面可以定義該函數(shù)所用到的一些變量待榔,當(dāng)方法執(zhí)行完畢之后,該內(nèi)存空間會(huì)被釋放掉流济。)調(diào)用完成锐锣,函數(shù)執(zhí)行完畢。 - 函數(shù)的出現(xiàn)提高了代碼的復(fù)用性
- 對(duì)于函數(shù)沒有具體返回值的情況绳瘟,返回值類型用關(guān)鍵字void表示雕憔,那么該函數(shù)中的return語(yǔ)句如果在最后一行可以省略不寫。
注意:
- 調(diào)用方法時(shí)可以不接受方法返回的值糖声,且不會(huì)報(bào)錯(cuò)
- 函數(shù)中只能調(diào)用函數(shù)斤彼,不可以在函數(shù)內(nèi)部定義函數(shù)。
方法重載
- 同一個(gè)類中蘸泻,允許存在一個(gè)以上的同名的方法琉苇,參數(shù)個(gè)數(shù),參數(shù)類型不同
- 與返回值類型無關(guān)蟋恬,只看方法名和參數(shù)列表
- 虛擬機(jī)通過參數(shù)列表的不同來區(qū)分同名方法
public void repeatName () { } public void repeatName (int i) { } public void repeatName (double i) { }
形參
基本類型:形式參數(shù)的改變不影響實(shí)際參數(shù)
-
引用類型:傳入一個(gè)類的對(duì)象翁潘,形參是該對(duì)象的一個(gè)引用,形式參數(shù)的改變直接影響實(shí)際參數(shù)
- 類名:需要的是該類的對(duì)象
- 抽象類:需要的是該抽象的類子類對(duì)象歼争,用具體子類實(shí)現(xiàn)
- 接口:需要的是該接口的實(shí)現(xiàn)類對(duì)象拜马,用具體子類實(shí)現(xiàn)
String是引用類型,但不能進(jìn)行地址傳遞
//抽象類
abstract class Person {
public abstract void study();
}
class PersonDemo {
public void method(Person p) {//p; p = new Student(); Person p = new Student(); //多態(tài)
p.study();
}
}
//定義一個(gè)具體的學(xué)生類
class Student extends Person {
public void study() {
System.out.println("Good Good Study,Day Day Up");
}
}
class PersonTest {
public static void main(String[] args) {
//目前是沒有辦法的使用的
//因?yàn)槌橄箢悰]有對(duì)應(yīng)的具體類
//那么沐绒,我們就應(yīng)該先定義一個(gè)具體類
//需求:我要使用PersonDemo類中的method()方法
PersonDemo pd = new PersonDemo();
Person p = new Student();
pd.method(p);
}
}
//接口
//定義一個(gè)愛好的接口
interface Love {
public abstract void love();
}
class LoveDemo {
public void method(Love l) { //l; l = new Teacher(); Love l = new Teacher(); 多態(tài)
l.love();
}
}
//定義具體類實(shí)現(xiàn)接口
class Teacher implements Love {
public void love() {
System.out.println("老師愛學(xué)生,愛Java,愛林青霞");
}
}
class TeacherTest {
public static void main(String[] args) {
//需求:我要測(cè)試LoveDemo類中的love()方法
LoveDemo ld = new LoveDemo();
Love l = new Teacher();
ld.method(l);
}
}
返回值
引用類型:
- 類:返回的是該類的對(duì)象
- 抽象類:返回的是該抽象類的子類對(duì)象
- 接口:返回的是該接口的實(shí)現(xiàn)類的對(duì)象
- 類
class Student {
public void study() {
System.out.println("Good Good Study,Day Day Up");
}
}
class StudentDemo {
public Student getStudent() {
return new Student();
}
}
- 抽象類
abstract class Person {
public abstract void study();
}
class PersonDemo {
public Person getPerson() {
//Person p = new Student();
//return p;
return new Student();
}
}
class Student extends Person {
public void study() {
System.out.println("Good Good Study,Day Day Up");
}
}
- 接口
interface Love {
public abstract void love();
}
class LoveDemo {
public Love getLove() {
//Love l = new Teacher();
//return l;
return new Teacher();
}
}
//定義具體類實(shí)現(xiàn)接口
class Teacher implements Love {
public void love() {
System.out.println("老師愛學(xué)生,愛Java,愛林青霞");
}
}
構(gòu)造方法
給對(duì)象的屬性賦初值
- 構(gòu)造方法格式
方法名與類名相同
沒有返回值類型俩莽,連void都沒有
-
沒有具體的返回值
public Student(){ } public Student(String name1, int sge) { //構(gòu)造函數(shù)可以重載 this.name1 = name1; this.sge = sge; }
- 默認(rèn)構(gòu)造:建議自己給出無參構(gòu)造
- 如果你不提供構(gòu)造方法,系統(tǒng)會(huì)給出默認(rèn)構(gòu)造方法
- 如果你提供了構(gòu)造方法乔遮,系統(tǒng)將不再提供
創(chuàng)建對(duì)象
Student s = new Student();
加載過程
- 加載Student.class文件進(jìn)內(nèi)存
- 在棧內(nèi)存為s開辟空間
- 在堆內(nèi)存為學(xué)生對(duì)象開辟空間
- 對(duì)學(xué)生對(duì)象的成員變量進(jìn)行默認(rèn)初始化
- 對(duì)學(xué)生對(duì)象的成員變量進(jìn)行顯示初始化
- 通過構(gòu)造方法對(duì)學(xué)生對(duì)象的成員變量賦值
- 學(xué)生對(duì)象初始化完畢扮超,把對(duì)象地址賦值給s變量
匿名對(duì)象
匿名對(duì)象:就是沒有名字的對(duì)象。
匿名對(duì)象的應(yīng)用場(chǎng)景:
- 調(diào)用方法蹋肮,僅僅只調(diào)用一次的時(shí)候出刷。
- 好處:匿名對(duì)象調(diào)用完畢就是垃圾∨鞅纾可以被垃圾回收器回收馁龟。
- 匿名對(duì)象可以作為實(shí)際參數(shù)傳遞
Class s = new Class();
s.method();
new Class().method();
new Class().method(new Class());