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