包
按照功能划分:
com.xxx.add
AddStunent
AddTeacher
按照模块划分:
com.xxx.Stunedt
AddStudent
DeleteStudent
包的定义及注意事项:
A:定义包的格式
package 包名
多级包用.分开即可
B:定义包的注意事项
a:package语句必须是程序的第一条可执行的代码
b:package语句在一个java文件中只能有一个
c:如果没有package,默认表示无包名
带包的类编译和运行:
a:javac 编译的时候带上-d就行了
javac -d . xxx.java
b:通过java命令执行
java 包名.xxx(类名)
import关键字的概述和使用:
格式:
A:导包格式
import 包名;
注意:这种方式导入是到类的名称
B:package,import,class有顺序关系
权限修饰符
四种权限修饰符:
本类 | 同一个包下(子类和无关类) | 不同包下(子类) | 不同包下(无关类) | |
private | Y | |||
默认 | Y | Y | ||
protected | Y | Y | Y | |
public | Y | Y | Y | Y |
类及其组成所使用的常见修饰符:
A:修饰符
权限修饰符:private,默认的,protected,public
状态修饰符:static,final
抽象修饰符:abstract
B:类
权限修饰符:默认修饰符,public
状态修饰符:final
抽象修饰符:abstract
用的最多的是:private
C:成员变量
权限修饰符:private,默认的,protected,public
状态修饰符:static,final
用的最多的是:private
D:构造方法
权限修饰符:private,默认的,protected,public
用的最多的是:public
E:成员方法
权限修饰符:private,默认的,protected,public
状态修饰符:static,final
抽象修饰符:abstract
用的最多的是:public
F:除此之外的组合规则
成员变量:public static final 接口
成员方法:
public static
public abstract
public final
成员内部类的面试题:
要求:使用一直的变量,在控制台输出30,20,10
class Outer { public in 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(); } }
局部内部类访问局部变量的问题:
局部内部类访问局部变量必须用final修饰。
局部内部类在访问他所在方法中的局部变量必须用final修饰,为什么?
因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用
但是jdk1.8取消了这个事情,所以我认为这是个bug,虽然取消,但是如果在书写代码的时候,没有手动添加,系统底层也会默认给你final
匿名内部类
匿名内部类的格式和理解:
A:匿名内部类
就是内部类的简化写法
B:前提:存在一个类或者接口
这里的类可以是具体类也可以是抽象类
C:格式
new 类名或者接口名 {
重写方法;
}
D:本质是什么?
是一个继承了该类挥着实现了该接口的子类匿名对象
匿名内部类在开发中的应用:
//这里写抽象类,接口都行 abstract class Person { public abstract void show(); } class PersonDemo { public void method(Person p){ p.show(); } } class PersonTest { public static void main(String[] args){ //如何调用PersonDemo中的method方法呢 PersonDemo pd = new PersonDemo(); } }
匿名内部类的面试题:
按照要求,补齐代码
interface Inter { void show(); } class Outer { //补齐代码 } class OuterDemo { public static void main(String[] args) { Outer.method().show(); } }
要求:在控制台输出“HelloWorld”