JAVA学习_week3
一、面向?qū)ο?#xff08;上延續(xù)版)
?1、匿名對象
概念:即沒有名字的對象
格式:new 類名();
匿名對象調(diào)用方法:new 類名().成員方法名();
好處:節(jié)省內(nèi)存空間,在堆內(nèi)產(chǎn)生,不需要從棧中開辟空間,使用完后立刻被jvm中的垃圾回收器回收
2、局部變量和成員變量的區(qū)別
1)代碼位置
成員變量:類中,方法外
局部變量:一般在方法之內(nèi)
2)內(nèi)存中的位置
成員變量:堆內(nèi)存中,和new有關(guān)
局部變量:占內(nèi)存中,和方法有關(guān)
3)生命周期不同
成員變量:隨從對象的創(chuàng)建而存在,對象創(chuàng)建完畢后會(huì)被jvm中的垃圾回收器回收
局部變量:隨著方法的調(diào)用而存在,當(dāng)方法使用結(jié)束而消失
4)初始值
成員變量:系統(tǒng)會(huì)給成員變量進(jìn)行默認(rèn)的初始化,String的初始值為null,int的初始值為0
局部變量:必須進(jìn)行初始化賦值
3、this的認(rèn)識
this:用來提供本類中地址值的引用、
舉例:
public class Student {private String name ; //姓名public void setName(String name){this.name = name ; //等號右邊,指向該類(Student)的地址,等號左邊為set接收的數(shù)據(jù)}public String getName(){return name ;} }?4、一個(gè)類的成員方法
類的成員變量:描述這個(gè)類有哪些屬性
類的成員方法:setXXX()/getXXX():賦值和獲取值的方法
類的構(gòu)造方法?
1)這個(gè)方法名和類名相同
2)這個(gè)方法沒有void
3)構(gòu)造方法可以重載:分為有參/無參構(gòu)造方法
構(gòu)造方法的目的:為了方便成員相關(guān)數(shù)據(jù)進(jìn)行初始化
注意:當(dāng)一個(gè)類中沒有構(gòu)造方法的時(shí)候,系統(tǒng)會(huì)默認(rèn)提供一個(gè)無參構(gòu)造方法(不顯示在代碼中),但,如果系統(tǒng)中已經(jīng)有了一個(gè)有參構(gòu)造方法了,此時(shí)系統(tǒng)不會(huì)提供無參構(gòu)造方法,需要自己手動(dòng)輸入一個(gè)無參構(gòu)造方法
一個(gè)標(biāo)準(zhǔn)類的寫法:
? ? ? ? 成員變量私有化
? ? ? ? 成員獲取值和輸出值的方法(setXXX()/getXXX())
? ? ? ? 提供有參/無參構(gòu)造方法?
5、static關(guān)鍵字?
定義:是一種屬性的描述,可以是變量,可以是方法(靜態(tài)的,靜止的)
特點(diǎn):
1)被靜態(tài)修飾的隨著類的加載而價(jià)值,優(yōu)先于對象
2)不能和this一起使用
3)本身含義結(jié)束共享,公用;可以多個(gè)對象公用
靜態(tài)的使用范圍:靜態(tài)只能訪問靜態(tài)。
6、代碼塊
分類:靜態(tài)代碼塊,構(gòu)造代碼塊,構(gòu)造方法
優(yōu)先級:靜態(tài)代碼塊>構(gòu)造代碼塊>構(gòu)造方法
舉例:
class Root {static {System.out.println("Root的靜態(tài)初始化塊");//1}{System.out.println("Root的普通初始化塊");//4}public Root() {System.out.println("Root的無參數(shù)的構(gòu)造器");//5} } class Mid extends Root {static {System.out.println("Mid的靜態(tài)初始化塊");//2}{System.out.println("Mid的普通初始化塊");//6}public Mid() {System.out.println("Mid的無參數(shù)的構(gòu)造器");//7}public Mid(String msg) {this();System.out.println("Mid的帶參數(shù)構(gòu)造器,其參數(shù)值:" + msg);//8} }class Leaf extends Mid {static {System.out.println("Leaf的靜態(tài)初始化塊");//3}{System.out.println("Leaf的普通初始化塊");// 9}public Leaf() {super("hello");System.out.println("Leaf的構(gòu)造器");//10} }public class LeafTest {public static void main(String[] args) {new Leaf();} }二、面向?qū)ο?#xff08;中)
1、繼承
定義:將多個(gè)類的共性內(nèi)容抽取出來,房子一個(gè)獨(dú)立的類中,讓這個(gè)類和其他類產(chǎn)生一種關(guān)系就叫做繼承?
格式:
class 父類名{ 共性內(nèi)容:姓名,年齡父類中的方法setXXX/getXXX等 } class 子類名 extends 父類名{}?繼承的好處:
1)可以提高代碼的復(fù)用性
2)可以提高代碼的維護(hù)性
3)類與類的繼承關(guān)系,是后面“多態(tài)”的前提條件
特點(diǎn):
1)繼承只能接受單繼承,不能多繼承
2)雖然不能多繼承,但是可以多層繼承
舉例:
class A{public void show1(){System.out.println("第一繼承");} } class B extends A{public void show2(){System.out.println("第二繼承");} } class C extends B{public void show3(){System.out.println("第三繼承");} } public class ExtendsDemo {public static void main(String[] args) {C c = new C() ;c.show3(); //c本身的方法c.show2(); //尋找B的方法c.show1(); //A的方法} }?2、重寫
引入:子類在調(diào)用父類方法時(shí)有兩種情況
情況一:子類方法和父類方法名不相同,可以分別直接調(diào)用;
情況二:子類方法和父類方法名相同時(shí):權(quán)限修飾符,返回值類型,參數(shù)列表都一樣時(shí),如果主函數(shù)使用了該方法,則會(huì)發(fā)生子類方法將父類方法覆蓋的情況--->方法重寫
override
舉例:
class A {public void show(){System.out.println("我是A");} } class B extends A{public void show(){System.out.println("我是B");} } public class Demo{public static void main(String[] args) {B b =new B();b.show(); //此時(shí)父類和子類的方法名相同,則會(huì)出現(xiàn)子類方法將父類方法覆蓋,輸出應(yīng)為:我是B} }3、final關(guān)鍵字?
?本身含義:最終的,無法更改的
?特點(diǎn):
1)final可以修飾類,該類不能被繼承
2)final可以修飾變量,此時(shí)這個(gè)變量是一個(gè)”常數(shù)“
3)final可以修飾成員方法,被修飾的方法不能被子類重寫
三、面向?qū)ο?#xff08;下)
1、多態(tài)
1.什么是多態(tài)
宏觀角度:一個(gè)事務(wù)在不同時(shí)刻體現(xiàn)的狀態(tài)不同
微觀角度:具體對象在內(nèi)存中的變化
2.多態(tài)的前提條件
1)必須有繼承關(guān)系,無繼承,不提多態(tài)
2)必須存在方法重寫
3)必須存在父類引用子類對象
格式:
3.多態(tài)的成員訪問特點(diǎn)(很重要)?
1)成員變量:編譯看左,運(yùn)行看左;
2)成員方法:編譯看左,運(yùn)行看右;?
3)構(gòu)造方法:多態(tài)的前提條件,有繼承關(guān)系,跟繼承一樣,分層初始化先執(zhí)行父類的構(gòu)造方法,然后進(jìn)行子類的構(gòu)造方法
4.多態(tài)的弊端
當(dāng)多態(tài)的前提條件滿足后,出現(xiàn)了多態(tài)的弊端
無法調(diào)用子類的特有功能!
解決方法1,重新創(chuàng)建自己的子類對象
解決方法2,
向下轉(zhuǎn)型:
格式:
5.多態(tài)的好處
1)提高代碼的復(fù)用性,由繼承保證
2)提高代碼的延展性,由多態(tài)保證
實(shí)例:
class Animal{public void eat(){System.out.println("動(dòng)物都需要吃飯");}public void sleep(){System.out.println("動(dòng)物都需要休息");} } class Dog extends Animal{@Overridepublic void eat() {System.out.println("狗吃骨頭");}@Overridepublic void sleep() {System.out.println("狗側(cè)著睡");}public void lookDoor() {System.out.println("狗看門");} } class Cat extends Animal{@Overridepublic void eat() {System.out.println("貓吃魚");}@Overridepublic void sleep() {System.out.println("貓?zhí)芍?#34;);}public void catch() {System.out.println("貓抓老鼠");} } public class DuoTaiDemo {public static void main(String[] args) {Animal a = new Cat() ;a.eat();a.sleep();Cat c =(Cat) a;c.catch();Animal a2 = new Dog() ;a2.eat();a2.sleep();Dog d =(Dog) a2;d.lookDoor();} }2、抽象類
1.什么是抽象類?
定義:在一個(gè)類中,如果由抽象方法,這個(gè)類必須為抽象類
2.抽象的方法格式:
根據(jù)寫方法的格式一樣,加入一個(gè)關(guān)鍵字abstract,而且沒有方法體{} public abstract 返回值類型 方法名(空參/帶參) ;3.抽象類的特點(diǎn)
1)不能實(shí)例化(不能創(chuàng)建對象)
2)必須強(qiáng)制子類進(jìn)行抽象方法重寫
4.抽象類的成員特點(diǎn):
1)成員變量:抽象類的成員變量可以是常量(被final自定義)/變量
2)成員方法:可以是抽象類方法也可以是非抽象類方法
3)構(gòu)造方法:可以定義無參/有參
3、接口
1.什么是接口?
接口體現(xiàn)的是事務(wù)的一種額外功能
2.格式
interface 接口名{ //命名規(guī)范和類名命名一樣,見名知意 "大駝峰命名法"只能為抽象方法 } 接口的子類----"子實(shí)現(xiàn)類" class 子類名 implements 接口名{//實(shí)現(xiàn)類必須實(shí)現(xiàn)接口的抽象方法,否則報(bào)錯(cuò)} //接口比抽象類還抽象2.特點(diǎn)
接口最大的特點(diǎn):不能實(shí)例化
3.接口的成員特點(diǎn)
1)成員變量:只能是常量,存在默認(rèn)修飾符:public static final
2)成員方法:之你呢個(gè)是抽象方法,存在默認(rèn)修飾符:public abstract
3)構(gòu)造方法:沒有構(gòu)造方法
?實(shí)例:
interface Area {void calculateArea(); } class MyCircle implements Area{private double radius;public MyCircle() {}public MyCircle(double radius) {this.radius = radius;}public double getRadius() {return radius;}public void setRadius(double radius) {this.radius = radius;}@Overridepublic void calculateArea() {System.out.println("圓的面積為:"+(3.14*getRadius()*getRadius()));} } class MyRectangle implements Area{private double length;private double width;public MyRectangle() {}public MyRectangle(double length, double width) {this.length = length;this.width = width;}public double getLength() {return length;}public void setLength(double length) {this.length = length;}public double getWidth() {return width;}public void setWidth(double width) {this.width = width;}@Overridepublic void calculateArea() {System.out.println("矩形的面積為"+(getLength()*getWidth()));} } import java.util.Scanner; public class Test {public static void main(String[] args) {Scanner sc =new Scanner(System.in);System.out.println("-----------圓形-------");System.out.print("請輸入圓的半徑:");double a = sc.nextDouble();Area a1 =new MyCircle(a);a1.calculateArea();System.out.println("-----------矩形-------");System.out.println("請輸入矩形的長和寬:");double b = sc.nextDouble();double c = sc.nextDouble();Area b2 =new MyRectangle(b,c);b2.calculateArea();} }四、對面向?qū)ο笾械膸讉€(gè)問題
1、關(guān)于Java中面向?qū)ο鬆砍蛾P(guān)系問題
Java中最基本的單位:類
類和類:繼承關(guān)系 extends,Java中只支持單繼承和多層繼承,不支持多繼承
類和接口:實(shí)現(xiàn)關(guān)系implement 一個(gè)類可以實(shí)現(xiàn)多個(gè)接口
接口與接口:繼承關(guān)系 extends
2、?在使用多態(tài)是出現(xiàn)ClassCastException,說明了什么?
ClassCastException屬于運(yùn)行事情異常的一種:代表“類轉(zhuǎn)換異常”
使用多態(tài)操作向下轉(zhuǎn)型時(shí)使用不當(dāng),堆內(nèi)存中信息和占內(nèi)存信息沒有父子關(guān)系
3、abstract不能和那些關(guān)鍵字使用?
static:靜態(tài)方法算不上方法重寫
private:因?yàn)閍bstract需要被重寫,所以不能私有
final:被final修飾的成員方法不能被重寫,違背了抽象類的要求?
4、super關(guān)鍵字,和this的關(guān)系?
super:代表父類的空間標(biāo)識(代表父類的地址值引用)
?區(qū)別:
1)
this.變量名???????????訪問本類的成員變量
super.變量名????????訪問父類的成員變量
2)
this.方法名()????????訪問本類的成員方法
super.方法名()??????訪問父類的成員方法
3)
this()??????????????????????訪問本類無參構(gòu)造方法
super()??????????????????訪問父類的無參構(gòu)造方法
4)
this(xxx)????????????????訪問本類的有參構(gòu)造方法
super(xxx)?????????????訪問父類的有參構(gòu)造方法?
5、接口和抽象類的區(qū)別
從定義來說:
this:用來提供本類中地址值的引用
super:用來提供空間上的地址值(即,父類的地址值的引用)
區(qū)別:
成員變量:?抽象類:可以是變量,也可以是自定義常量
?????????????????接口:?成員變量只能是常量.
成員方法?:抽象類:?抽象方法/非抽象方法
? ? ? ? ? ? ? ? ?接口:只能是抽象方法
構(gòu)造方法:?抽象類?:無參構(gòu)造,有參構(gòu)造都可以存在?存在繼承關(guān)系,分層初始化
? ? ? ? ? ? ? ? ?接口:無構(gòu)造方法.
抽象類用?entends??????
接口用implements?
6、什么是方法重寫 ,什么是方法重載
方法重寫:出現(xiàn)在繼承中,描述子類繼承父類時(shí),當(dāng)父類方法與子類方法名重名時(shí),子類方法將覆蓋掉父類方法
方法重載:方法定義的時(shí)候,方法名相同,參數(shù)列表不同,與返回值無關(guān),
7、方法的形式參數(shù)如果是引用類型和基本類型
為基本類型時(shí):只需要在括號內(nèi)輸入基本類型數(shù)值即可
為引用類型時(shí):需要傳遞是當(dāng)前類的具體類對象
總結(jié)
以上是生活随笔為你收集整理的JAVA学习_week3的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 12v农用车发电机接线图_拖拉机启动开关
- 下一篇: 计算机工程与科学期刊小木虫,《[小木虫e