10.01_面向?qū)ο?package關(guān)鍵字的概述及作用)(了解)
-
A:為什么要有包
- 將字節(jié)碼(.class)進(jìn)行分類存放
- 包其實(shí)就是文件夾
B:包的概述
-
舉例:
學(xué)生:增加区丑,刪除拧粪,修改修陡,查詢
老師:增加,刪除既们,修改濒析,查詢
...方案1:按照功能分 com.nono.add AddStudent AddTeacher com.nono.delete DeleteStudent DeleteTeacher com.nono.update UpdateStudent UpdateTeacher com.nono.find FindStudent FindTeacher 方案2:按照模塊分 com.nono.teacher AddTeacher DeleteTeacher UpdateTeacher FindTeacher com.nono.student AddStudent DeleteStudent UpdateStudent FindStudent
10.02_面向?qū)ο?包的定義及注意事項(xiàng))(掌握)
- A:定義包的格式
- package 包名;
- 多級包用.分開即可
- B:定義包的注意事項(xiàng)
- A:package語句必須是程序的第一條可執(zhí)行的代碼
- B:package語句在一個java文件中只能有一個
- C:如果沒有package,默認(rèn)表示無包名
- C:案例演示
- 包的定義及注意事項(xiàng)
/*
* A:定義包的格式
* package 包名;
* 多級包用.分開即可
* B:定義包的注意事項(xiàng)
* A:package語句必須是程序的第一條可執(zhí)行的代碼
* B:package語句在一個java文件中只能有一個
* C:如果沒有package啥纸,默認(rèn)表示無包名
*/
package com.nono;
import com.baidu.Person;
import com.xxx.Student;
//import java.util.Scanner; //在開發(fā)中我們用的都是導(dǎo)入具體的類
import java.util.*; //*代表通配符,他會到該包下挨個匹配,匹配上就導(dǎo)入
class Demo1_Package {
public static void main(String[] args) {
Person p = new Person("張三",23);
System.out.println(p.getName() + "..." + p.getAge());
//p.print(); //在不同包下的無關(guān)類,不允許訪問,因?yàn)槭莗rotected修飾的
/*Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
System.out.println(x);*/
Student s = new Student("李四",24);
System.out.println(s.getName() + "..." + s.getAge());
s.method();
}
}
10.03_面向?qū)ο?帶包的類編譯和運(yùn)行)(掌握)
- A:如何編譯運(yùn)行帶包的類
- a:javac編譯的時候帶上-d即可
- javac -d . HelloWorld.java
- b:通過java命令執(zhí)行。
- java 包名.HellWord
- a:javac編譯的時候帶上-d即可
10.04_面向?qū)ο?不同包下類之間的訪問)(掌握)
- A:案例演示
- 不同包下類之間的訪問
10.05_面向?qū)ο?import關(guān)鍵字的概述和使用)(掌握)
- A:案例演示
- 為什么要有import
- 其實(shí)就是讓有包的類對調(diào)用者可見,不用寫全類名了
- 為什么要有import
- B:導(dǎo)包格式
- import 包名;
- 注意:
- 這種方式導(dǎo)入是到類的名稱斯棒。
- 雖然可以最后寫*盾致,但是不建議。
- C:package,import,class有沒有順序關(guān)系(面試題)
10.06_面向?qū)ο?四種權(quán)限修飾符的測試)(掌握)
- A:案例演示
- 四種權(quán)限修飾符
- B:結(jié)論
本類 同一個包下(子類和無關(guān)類) 不同包下(子類) 不同包下(無關(guān)類) private Y 默認(rèn) Y Y protected Y Y Y public Y Y Y Y
10.07_面向?qū)ο?類及其組成所使用的常見修飾符)(掌握)
-
A:修飾符:
- 權(quán)限修飾符:private荣暮,默認(rèn)的庭惜,protected,public
- 狀態(tài)修飾符:static穗酥,final
- 抽象修飾符:abstract
-
B:類:
權(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
10.08_面向?qū)ο?內(nèi)部類概述和訪問特點(diǎn))(了解)
- A:內(nèi)部類概述
- B:內(nèi)部類訪問特點(diǎn)
- a:內(nèi)部類可以直接訪問外部類的成員草丧,包括私有。
- b:外部類要訪問內(nèi)部類的成員莹桅,必須創(chuàng)建對象方仿。
- 外部類名.內(nèi)部類名 對象名 = 外部類對象.內(nèi)部類對象;
- C:案例演示
- 內(nèi)部類極其訪問特點(diǎn)
class Demo1_InnerClass {
public static void main(String[] args) {
//Inner i = new Inner();
//i.method();
//外部類名.內(nèi)部類名 = 外部類對象.內(nèi)部類對象
Outer.Inner oi = new Outer().new Inner(); //創(chuàng)建內(nèi)部類對象
oi.method();
}
}
/*
* A:內(nèi)部類概述
* B:內(nèi)部類訪問特點(diǎn)
* a:內(nèi)部類可以直接訪問外部類的成員,包括私有统翩。
* b:外部類要訪問內(nèi)部類的成員,必須創(chuàng)建對象此洲。
* 外部類名.內(nèi)部類名 對象名 = 外部類對象.內(nèi)部類對象;
* C:案例演示
* 內(nèi)部類極其訪問特點(diǎn)
*/
class Outer {
private int num = 10;
class Inner {
public void method() {
System.out.println(num);
}
}
}
10.09_面向?qū)ο?成員內(nèi)部類私有使用)(了解)
- private
class Demo2_InnerClass {
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.10_面向?qū)ο?靜態(tài)成員內(nèi)部類)(了解)
- static
- B:成員內(nèi)部類被靜態(tài)修飾后的訪問方式是:
- 外部類名.內(nèi)部類名 對象名 = 外部類名.內(nèi)部類對象;
class Demo1_InnerClass {
public static void main(String[] args) {
//外部類名.內(nèi)部類名 對象名 = 外部類名.內(nèi)部類對象;
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");
}
}
}
10.11_面向?qū)ο?成員內(nèi)部類的面試題)(掌握)
- A:面試題
要求:使用已知的變量厂汗,在控制臺輸出30,20呜师,10娶桦。 class Outer { public int num = 10; class Inner { public int num = 20; public void show() { int num = 30; System.out.println(?); System.out.println(??); System.out.println(???); } } } class InnerClassTest { public static void main(String[] args) { Outer.Inner oi = new Outer().new Inner(); oi.show(); } }
class Test1_InnerClass {
public static void main(String[] args) {
Outer.Inner oi = new Outer().new Inner();
oi.show();
}
}
//要求:使用已知的變量,在控制臺輸出30,20衷畦,10栗涂。
//內(nèi)部類之所以能獲取到外部類的成員,是因?yàn)樗塬@取到外部類的引用外部類名.this
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);
}
}
}
10.12_面向?qū)ο?局部內(nèi)部類訪問局部變量的問題)(掌握)
- A:案例演示
局部內(nèi)部類訪問局部變量必須用final修飾
-
局部內(nèi)部類在訪問他所在方法中的局部變量必須用final修飾,為什么?
因?yàn)楫?dāng)調(diào)用這個方法時,局部變量如果沒有用final修飾,他的生命周期和方法的生命周期是一樣的,當(dāng)方法彈棧,這個局部變量也會消失,那么如果局部內(nèi)部類對象還沒有馬上消失想用這個局部變量,就沒有了,如果用final修飾會在類加載的時候進(jìn)入常量池,即使方法彈棧,常量池的常量還在,也可以繼續(xù)使用但是jdk1.8取消了這個事情,所以我認(rèn)為這是個bug
class Demo1_InnerClass {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
//局部內(nèi)部類
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)部類,只能在其所在的方法中訪問
i.print();
}*/
}
10.13_面向?qū)ο?匿名內(nèi)部類的格式和理解)
- A:匿名內(nèi)部類
- 就是內(nèi)部類的簡化寫法。
- B:前提:存在一個類或者接口
- 這里的類可以是具體類也可以是抽象類祈争。
- C:格式:
new 類名或者接口名(){ 重寫方法; }
- D:本質(zhì)是什么呢?
- 是一個繼承了該類或者實(shí)現(xiàn)了該接口的子類匿名對象斤程。
- E:案例演示
- 按照要求來一個匿名內(nèi)部類
class Demo1_NoNameInnerClass {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
/*
* A:匿名內(nèi)部類
* 就是內(nèi)部類的簡化寫法。
* B:前提:存在一個類或者接口
* 這里的類可以是具體類也可以是抽象類菩混。
* C:格式:
*
new 類名或者接口名(){
重寫方法;
}
* D:本質(zhì)是什么呢?
* 是一個繼承了該類或者實(shí)現(xiàn)了該接口的子類匿名對象忿墅。
* E:案例演示
* 按照要求來一個匿名內(nèi)部類
*/
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();
//Inter i = new Inner(); //父類引用指向子類對象
new Inter() { //實(shí)現(xiàn)Inter接口
public void print() { //重寫抽象方法
System.out.println("print");
}
}.print();
}
}
10.14_面向?qū)ο?匿名內(nèi)部類重寫多個方法調(diào)用)
- A:案例演示
- 匿名內(nèi)部類的方法調(diào)用
class Demo2_NoNameInnerClass {
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)型的,因?yàn)闆]有子類類名
}
}
10.15_面向?qū)ο?匿名內(nèi)部類在開發(fā)中的應(yīng)用)
- A:代碼如下
//這里寫抽象類,接口都行 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 Test1_NoNameInnerClass {
public static void main(String[] args) {
//如何調(diào)用PersonDemo中的method方法呢?
PersonDemo pd = new PersonDemo ();
//pd.method(new Student());
pd.method(new Person() {
public void show() {
System.out.println("show");
}
});
}
}
//這里寫抽象類沮峡,接口都行
abstract class Person {
public abstract void show();
}
class PersonDemo {
//public void method(Person p) { //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.println("show");
}
}
10.16_面向?qū)ο?匿名內(nèi)部類的面試題)
- A:面試題
按照要求疚脐,補(bǔ)齊代碼 interface Inter { void show(); } class Outer { //補(bǔ)齊代碼 } class OuterDemo { public static void main(String[] args) { Outer.method().show(); } } 要求在控制臺輸出”HelloWorld”
class Test2_NoNameInnerClass {
public static void main(String[] args) {
//Outer.method().show(); //鏈?zhǔn)骄幊?每次調(diào)用方法后還能繼續(xù)調(diào)用方法,證明調(diào)用方法返回的是對象
Inter i = Outer.method();
i.show();
}
}
//按照要求,補(bǔ)齊代碼
interface Inter {
void show();
}
class Outer {
//補(bǔ)齊代碼
public static Inter method() {
return new Inter() {
public void show() {
System.out.println("show");
}
};
}
}
//要求在控制臺輸出”HelloWorld”
10.17_day10總結(jié)
- 把今天的知識點(diǎn)總結(jié)一遍邢疙。