Day10
10.01 package关键字的概述及作用
为什么要有包
将字节码(.class)进行分类存放
包其实就是文件夹
包的概述
举例:
学生 增加 删除 修改 查询
老师 增加 删除 修改 查询
方案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.teacher
AddStudent
DeleteStudent
UpdateStudent
FindStudent
包的命名一般会让域名倒着写 com.heima.包的作用或模块
10.02 包的定义及注意事项
1、定义包的格式
package 包名;
多级包用.分开即可
2、定义包的注意事项
A:package语句必须是程序的第一条可执行的代码
B:package语句在一个java文件中只能有一个
C:如果没有package,默认表示无包名
3、案例演示 包的定义及注意事项
package com.heima; //.相当于路径分隔符
10.03 带包的类编译和运行
如何编译运行带包的类
1、javac编译的时候带上-d即可
javac –d . HelloWorld.java // . 代表当前路径
2、通过java命令执行
java 包名.HelloWorld
10.04 不同包下类之间的访问
案例演示
不同包下类之间的访问
10.05 import关键字的概述和使用
1、案例演示
为什么要有import(导入)
其实就是让有包的类对调用者可见,不用写全类名了
2、导包格式
import 全名;
注意:这种方式导入是到类的名称,虽然可以最后写*,但不建议。*代
表通配符,会到包下挨个匹配具体的类,匹配上就导入
在开发中我们用的都是导入具体的类
3、package,import,class有没有顺序关系(面试题)
有!package 必须放在第一行且只有一句,import在中间,class在下面
10.06 四种权限修饰符的测试
1、案例演示 四种权限修饰符
2、结论
本类 同一个包下(子类和无关类) 不同包下(子类) 不同包下(无关类)
private Y
默认 Y Y
Protected Y Y Y
public Y Y Y Y
其实封装是相对而言的,例子:如果构造不加public,不同包就不能访问,所以封装多样,private只是封装的一种表现形式。
10.07 类及其组成所使用的常见修饰符
1、修饰符:
权限修饰符:private 默认 protected(受保护的) public(公共的)
状态修饰符:static final
抽象修饰符:abstract
2、类:
权限修饰符:默认修饰符 public
状态修饰符:final
抽象修饰符:abstract
用得最多的就是public
3、成员变量:
权限修饰符:private 默认 protected public
状态修饰符:static final
用得最多的就是private
4、构造方法
权限修饰符:private 默认 protected public
一个类所有方法都是静态的,构造方法就要加private私有
用得最多的就是public
5、成员方法:
权限修饰符:private 默认 protected public
状态修饰符:static final
抽象修饰符:abstract
用得最多的就是public
6、除此之外的组合规则
成员变量:public static final 公共的 静态的常量
成员方法:
public static
public abstract
public final
10.08 内部类概述和访问特点
1、内部类概述 在类中定义类
2、内部类访问特点
内部类可以直接访问外部类的成员,包括私有
外部类要访问内部类的成员,必须创建对象
外部类名.内部类名 对象名 = 外部类对象.内部类对象;
3、案例演示
内部类及其访问特点
10.09 成员内部类私有使用
private
10.10 静态成员内部类
Static
成员内部类被静态修饰后的访问方式是:
外部类名。内部类名 对象名 = 外部类名。内部类对象;
10.11 成员内部类的面试题
10.12 局部内部类访问局部变量的问题
案例演示
局部内部类(方法中的内部类)访问局部变量必须用final修饰-面试可能会问
局部内部类在访问他所在方法中的局部变量必须用final修饰,为什么?
因为当调用这个方法,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失,想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用
但是Jdk1.8取消了这个事情,所以我认为这是个bug
10.13 匿名内部类的格式和理解
1、匿名内部类 没有名字的内部类
就是内部类的简化写法
匿名内部类是局部内部类的一种,必须写在方法里
2、前提:必须存在一个类或者接口
这里的类可以是具体类也可以是抽象类
3、格式
new 类名或者接口名(){
重写方法;
};
4、本质是什么呢?
是一个继承了该类或者实现了该接口的子类匿名对象
5、案例演示 :按照要求来一个匿名内部类
10.13 匿名内部类的格式和理解
1、匿名内部类 没有名字的内部类
就是内部类的简化写法
匿名内部类是局部内部类的一种,必须写在方法里
2、前提:必须存在一个类或者接口
这里的类可以是具体类也可以是抽象类
3、格式
new 类名或者接口名(){
重写方法;
};
4、本质是什么呢?
是一个继承了该类或者实现了该接口的子类匿名对象
5、案例演示 :按照要求来一个匿名内部类
10.14 匿名内部类重写多个方法调用
案例演示:匿名内部类的方法调用
10.15 匿名内部类在开发中的应用
匿名内部类就是个对象 ,不过是要重写方法
10.16 匿名内部类的面试题