摘要:外部類(lèi)要訪問(wèn)內(nèi)部類(lèi)的成員,必須創(chuàng)建對(duì)象。前提存在一個(gè)類(lèi)或者接口這里的類(lèi)可以是具體類(lèi)也可以是抽象類(lèi)。
1.package關(guān)鍵字的概述及作用(了解)
A:為什么要有包
將字節(jié)碼(.class)進(jìn)行分類(lèi)存放
包其實(shí)就是文件夾
B:包的概述
舉例:
學(xué)生:增加,刪除,修改,查詢 老師:增加,刪除,修改,查詢 ... 方案1:按照功能分 com.heima.add AddStudent AddTeacher com.heima.delete DeleteStudent DeleteTeacher com.heima.update UpdateStudent UpdateTeacher com.heima.find FindStudent FindTeacher 方案2:按照模塊分 com.heima.teacher AddTeacher DeleteTeacher UpdateTeacher FindTeacher com.heima.student AddStudent DeleteStudent UpdateStudent FindStudent2.包的定義及注意事項(xiàng)(掌握)
A:定義包的格式
package 包名;
多級(jí)包用.分開(kāi)即可
B:定義包的注意事項(xiàng)
A:package語(yǔ)句必須是程序的第一條可執(zhí)行的代碼
B:package語(yǔ)句在一個(gè)java文件中只能有一個(gè)
C:如果沒(méi)有package,默認(rèn)表示無(wú)包名
C:案例演示
包的定義及注意事項(xiàng)
3.帶包的類(lèi)編譯和運(yùn)行(掌握)
A:如何編譯運(yùn)行帶包的類(lèi)
a:javac編譯的時(shí)候帶上-d即可
javac -d . HelloWorld.java
b:通過(guò)java命令執(zhí)行。
java 包名.HellWord
4.不同包下類(lèi)之間的訪問(wèn)(掌握)
A:案例演示
不同包下類(lèi)之間的訪問(wèn)
// 文件一 package net.allidea; public class JavaObject { public static void main(String[] args) { com.baidu.Person p = new com.baidu.Person("張三",23); System.out.println(p.getName() + "..." + p.getAge()); } } //文件二 package com.baidu; public class Person { private String name; private int age; public Person(){} public Person(String name,int age) { this.name = name; this.age = age; } 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; } }5.import關(guān)鍵字的概述和使用(掌握)
A:案例演示
為什么要有import
其實(shí)就是讓有包的類(lèi)對(duì)調(diào)用者可見(jiàn),不用寫(xiě)全類(lèi)名了
B:導(dǎo)包格式
import 包名;
注意:
這種方式導(dǎo)入是到類(lèi)的名稱(chēng)。
雖然可以最后寫(xiě)*,但是不建議。
C:package,import,class有沒(méi)有順序關(guān)系(面試題)
package net.allidea; import com.baidu.Person; //import java.util.Scanner; //在開(kāi)發(fā)中我們用的都是導(dǎo)入具體的類(lèi) import java.util.*; //*代表通配符,他會(huì)到該包下挨個(gè)匹配,匹配上九導(dǎo)入 public class JavaObject { public static void main(String[] args) { Person p = new Person("張三",23); System.out.println(p.getName() + "..." + p.getAge()); //java.util.Scanner sc = new java.util.Scanner(System.in); Scanner sc = new Scanner(System.in); int x = sc.nextInt(); System.out.println(x); } }6.四種權(quán)限修飾符的測(cè)試(掌握)
A:案例演示
四種權(quán)限修飾符
B:結(jié)論
本類(lèi) | 同一個(gè)包下(子類(lèi)和無(wú)關(guān)類(lèi)) | 不同包下(子類(lèi)) | 不同包下(無(wú)關(guān)類(lèi)) | |
---|---|---|---|---|
private | Y | |||
默認(rèn) | Y | Y | ||
protected | Y | Y | Y | |
public | Y | Y | Y | Y |
A:修飾符:
權(quán)限修飾符:private,默認(rèn)的,protected,public
狀態(tài)修飾符:static,final
抽象修飾符:abstract
B:類(lèi):
權(quán)限修飾符:默認(rèn)修飾符,public
狀態(tài)修飾符:final
抽象修飾符:abstract
用的最多的就是:public
C:成員變量:
權(quán)限修飾符:private,默認(rèn)的,protected,public
狀態(tài)修飾符:static,final
用的最多的就是:private
D:構(gòu)造方法:
權(quán)限修飾符:private,默認(rèn)的,protected,public
用的最多的就是:public
E:成員方法:
權(quán)限修飾符:private,默認(rèn)的,protected,public
狀態(tài)修飾符:static,final
抽象修飾符:abstract
用的最多的就是:public
F:除此以外的組合規(guī)則:
成員變量:public static final 接口
成員方法:
public static
public abstract
public final
8.內(nèi)部類(lèi)概述和訪問(wèn)特點(diǎn)(了解)A:內(nèi)部類(lèi)概述
B:內(nèi)部類(lèi)訪問(wèn)特點(diǎn)
a:內(nèi)部類(lèi)可以直接訪問(wèn)外部類(lèi)的成員,包括私有。
b:外部類(lèi)要訪問(wèn)內(nèi)部類(lèi)的成員,必須創(chuàng)建對(duì)象。
外部類(lèi)名.內(nèi)部類(lèi)名 對(duì)象名 = 外部類(lèi)對(duì)象.內(nèi)部類(lèi)對(duì)象;
C:案例演示
內(nèi)部類(lèi)極其訪問(wèn)特點(diǎn)
class JavaObject { public static void main(String [] args) { Outer.Inner oi = new Outer().new Inner(); oi.method(); } } class Outer { private int num = 10; class Inner { public void method() { System.out.println(num); } } }9.成員內(nèi)部類(lèi)私有使用private(了解)
class JavaObject { public static void main(String [] args) { //Outer.Inner oi = new Outer().new Inner(); //oi.method(); Outer o = new Outer(); o.print(); } } class Outer { private int num = 10; private class Inner { public void method() { System.out.println(num); } } public void print() { Inner i = new Inner(); i.method(); } }10.靜態(tài)成員內(nèi)部類(lèi)(了解)
static
B:成員內(nèi)部類(lèi)被靜態(tài)修飾后的訪問(wèn)方式是:
外部類(lèi)名.內(nèi)部類(lèi)名 對(duì)象名 = 外部類(lèi)名.內(nèi)部類(lèi)對(duì)象;
class JavaObject { public static void main(String [] args) { //外部類(lèi)名.內(nèi)部類(lèi)名 對(duì)象名 = 外部類(lèi)名.內(nèi)部類(lèi)對(duì)象;Outer.new Inner(); Outer.Inner oi = new Outer.Inner(); oi.method(); Outer.Inner2.print(); } } class Outer { static class Inner { public void method() { System.out.println("method"); } } static class Inner2{ public static void print() { System.out.println("print"); } } }11.成員內(nèi)部類(lèi)的面試題(掌握)
A:面試題
要求:使用已知的變量,在控制臺(tái)輸出30,20,10。
//內(nèi)部類(lèi)之所以能獲取外部類(lèi)的成員,是因?yàn)樗塬@取到外部類(lèi)的引用外部類(lèi)名.this
class JavaObject { public static void main(String [] args) { Outer.Inner oi = new Outer().new Inner(); oi.show(); } } class Outer { public int num = 10; class Inner { public int num = 20; public void show() { int num = 30; System.out.println(num); System.out.println(this.num); System.out.println(Outer.this.num); } } }12.局部?jī)?nèi)部類(lèi)訪問(wèn)局部變量的問(wèn)題(掌握)
A:案例演示
局部?jī)?nèi)部類(lèi)訪問(wèn)局部變量必須用final修飾
局部?jī)?nèi)部類(lèi)在訪問(wèn)他所在方法中的局部變量必須用final修飾,為什么?
因?yàn)楫?dāng)調(diào)用這個(gè)方法時(shí),局部變量如果沒(méi)有用final修飾,他的生命周期和方法的生命周期是一樣的,當(dāng)方法彈棧,這個(gè)局部變量也會(huì)消失,那么如果局部?jī)?nèi)部類(lèi)對(duì)象還沒(méi)有馬上消失想用這個(gè)局部變量,就沒(méi)有了,如果用final修飾會(huì)在類(lèi)加載的時(shí)候進(jìn)入常量池,即使方法彈棧,常量池的常量還在,也可以繼續(xù)使用
但是jdk1.8取消了這個(gè)事情,所以我認(rèn)為這是個(gè)bug,雖然取消,如果在書(shū)寫(xiě)代碼時(shí)候,沒(méi)有手動(dòng)添加,系統(tǒng)底層也會(huì)默給你final
class JavaObject { public static void main(String [] args) { Outer o = new Outer(); o.method(); } } //開(kāi)發(fā)中很少用 class Outer { public void method() { final int num = 10; class Inner { public void print() { System.out.println(num); } } Inner i = new Inner(); i.print(); } /*public void run() { Inner i = new Inner();//局部?jī)?nèi)部類(lèi),只能在其方法內(nèi)有效 i.print(); }*/ }13.匿名內(nèi)部類(lèi)的格式和理解
A:匿名內(nèi)部類(lèi)
就是內(nèi)部類(lèi)的簡(jiǎn)化寫(xiě)法。
B:前提:存在一個(gè)類(lèi)或者接口
這里的類(lèi)可以是具體類(lèi)也可以是抽象類(lèi)。
C:格式:
new 類(lèi)名或者接口名(){ 重寫(xiě)方法; }
D:本質(zhì)是什么呢?
是一個(gè)繼承了該類(lèi)或者實(shí)現(xiàn)了該接口的子類(lèi)匿名對(duì)象。
E:案例演示
按照要求來(lái)一個(gè)匿名內(nèi)部類(lèi)
class JavaObject { public static void main(String [] args) { Outer o = new Outer(); o.method(); } } interface Inter { public void print(); } class Outer { class Inner implements Inter { public void print() { System.out.println("print"); } } public void method() { //Inner i = new Inner(); //i.print(); //new Inner().print(); new Inter() { //實(shí)現(xiàn)Inter接口new Inter() {} public void print() { //重寫(xiě)抽象方法 System.out.println("print"); } }.print(); } }14.匿名內(nèi)部類(lèi)重寫(xiě)多個(gè)方法調(diào)用
A:案例演示
匿名內(nèi)部類(lèi)的方法調(diào)用
class JavaObject { public static void main(String [] args) { Outer o = new Outer(); o.method(); } } interface Inter { public void show1(); public void show2(); } //匿名內(nèi)部類(lèi)只針對(duì)重寫(xiě)一個(gè)方法的時(shí)候使用 class Outer { public void method() { /*new Inter() { public void show1() { System.out.println("show1"); } public void show2() { System.out.println("show2"); } }.show1(); new Inter() { public void show1() { System.out.println("show1"); } public void show2() { System.out.println("show2"); } }.show2();*/ Inter i = new Inter() { public void show1() { System.out.println("show1"); } public void show2() { System.out.println("show2"); } /*public void show3() { System.out.println("show3"); }*/ }; i.show1(); i.show2(); //i.show3(); //匿名內(nèi)部類(lèi)是不能向下轉(zhuǎn)型的,,因?yàn)闆](méi)有子類(lèi)類(lèi)名 } }15.匿名內(nèi)部類(lèi)在開(kāi)發(fā)中的應(yīng)用
//這里寫(xiě)抽象類(lèi),接口都行 abstract class Person { public abstract void show(); } class PersonDemo { public void method(Person p) { p.show(); } } class PersonTest { public static void main(String[] args) { //如何調(diào)用PersonDemo中的method方法呢? PersonDemo pd = new PersonDemo (); } }
class JavaObject { public static void main(String [] args) { //如何調(diào)用PersonDemo中的method方法呢? PersonDemo pd = new PersonDemo (); //pd.method(new Student()); pd.method(new Person() { //匿名內(nèi)部類(lèi)當(dāng)作參數(shù)傳遞(本質(zhì)把匿名內(nèi)部類(lèi)看作一個(gè)對(duì)象) public void show() { System.out.println("show"); } }); } } abstract class Person { //抽象類(lèi) public abstract void show(); } class PersonDemo { //public void method(Person p) { //new Person(); //Person p = new Student(); /* Person p = new Person() { //父類(lèi)引用指向子類(lèi)對(duì)象 public void show() { System.out.println("show"); } } */ public void method(Person p) { p.show(); } } class Student extends Person { public void show() { System.out.print("show"); } }16.匿名內(nèi)部類(lèi)的面試題
A:面試題
補(bǔ)齊代碼,要求在控制臺(tái)輸出”HelloWorld”
interface Inter { void show(); }
class Outer { //補(bǔ)齊代碼 }
class OuterDemo {
public static void main(String[] args) { Outer.method().show(); }
}
class JavaObject { public static void main(String [] args) { //Outer.method().show(); //鏈?zhǔn)骄幊蹋看握{(diào)用方法后還能繼續(xù)調(diào)用方法,證明調(diào)用方法返回的是對(duì)象 Inter i = Outer.method(); i.show(); } } interface Inter { void show(); } class Outer { //補(bǔ)齊代碼 public static Inter method() { return new Inter() { public void show() { System.out.println("HelloWorld"); } }; } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/77010.html
摘要:面向?qū)ο笏枷敫攀隽私饷嫦驅(qū)ο箝_(kāi)發(fā)就是不斷的創(chuàng)建對(duì)象,使用對(duì)象,指揮對(duì)象做事情。面向?qū)ο笤O(shè)計(jì)其實(shí)就是在管理和維護(hù)對(duì)象之間的關(guān)系。建議文件名稱(chēng)和測(cè)試類(lèi)名稱(chēng)一致。 1.面向?qū)ο笏枷敫攀?了解) A:面向?qū)ο箝_(kāi)發(fā)就是不斷的創(chuàng)建對(duì)象,使用對(duì)象,指揮對(duì)象做事情。 B:面向?qū)ο笤O(shè)計(jì)其實(shí)就是在管理和維護(hù)對(duì)象之間的關(guān)系。 C:面向?qū)ο筇卣鞣庋b(encapsulation)、繼承(inheritance...
摘要:案例演示抽象類(lèi)的成員特點(diǎn)抽象類(lèi)的成員方法特性抽象方法強(qiáng)制要求子類(lèi)做的事情。抽象類(lèi)中定義的是該繼承體系的共性功能。 1.多態(tài)的概述及其成員訪問(wèn)特點(diǎn)代碼體現(xiàn) A:多態(tài)(polymorphic)概述 事物存在的多種形態(tài) B:多態(tài)前提- 1.要有繼承關(guān)系 2.要有方法重寫(xiě) 3.要有父類(lèi)引用指向子類(lèi)對(duì)象。 C:多態(tài)中的成員訪問(wèn)特點(diǎn)之 成員變量:編譯和運(yùn)行都看父類(lèi)。 成員方法:編...
摘要:可處理中成員變量和參數(shù)重名的情況??煽醋魇且粋€(gè)變量,它的值是當(dāng)前對(duì)象的引用聲明的成員變量為成員變量,它為該類(lèi)的公用變量,在第一次使用時(shí)被初始化。經(jīng)常出,不用逮壓路面上的小石子異常是提供的用于處理程序中錯(cuò)誤的一種機(jī)制。 Chap 3 Java OO focus on : * 對(duì)象和類(lèi)的概念 * 類(lèi) (對(duì)類(lèi)) 之間的關(guān)系 * 面向?qū)ο?..
摘要:每次調(diào)用構(gòu)造都執(zhí)行,并且在構(gòu)造方法前執(zhí)行靜態(tài)代碼塊在類(lèi)中方法外出現(xiàn),并加上修飾用于給類(lèi)進(jìn)行初始化,隨著類(lèi)加載而加載,一般用來(lái)給類(lèi)進(jìn)行初始化,在加載的時(shí)候就執(zhí)行,并且只執(zhí)行一次。的構(gòu)造方法這是一條隱藏語(yǔ)句,用來(lái)訪問(wèn)父類(lèi)中的空參構(gòu)造。 1.代碼塊的概述和分類(lèi)(了解)(實(shí)際不用) A:代碼塊概述 在Java中,使用{}括起來(lái)的代碼被稱(chēng)為代碼塊。 B:代碼塊分類(lèi) 根據(jù)其位置和聲明的不同...
摘要:即使抽象類(lèi)里不包含抽象方法,這個(gè)抽象類(lèi)也不能創(chuàng)建實(shí)例抽象類(lèi)可以包含成員變量方法普通方法和抽象方法構(gòu)造器初始化塊內(nèi)部類(lèi)接口枚舉種成分。 抽象類(lèi) 當(dāng)編寫(xiě)一個(gè)類(lèi)時(shí),常常會(huì)為該類(lèi)定義一些方法,這些方法用以描述該類(lèi)的行為方式,那么這些方法都有具體的方法體。但在某些情況下,某個(gè)父類(lèi)只是知道其子類(lèi)應(yīng)該包含怎樣的方法,但無(wú)法準(zhǔn)確地知道這些子類(lèi)如何實(shí)現(xiàn)這些方法。使用抽象方法即可滿足該要求:抽象方法是只有...
閱讀 3361·2021-11-25 09:43
閱讀 2167·2021-09-22 10:02
閱讀 3482·2021-09-06 15:00
閱讀 2367·2019-08-30 15:56
閱讀 2419·2019-08-30 15:54
閱讀 3293·2019-08-30 14:14
閱讀 2314·2019-08-29 17:25
閱讀 2985·2019-08-29 17:16