------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
1.
内部类,匿名内部类,包,受保护protected,Object类
l 内部类,匿名内部类,书写格式
l 包:包定义和使用 javac -d , 多个包之间类的访问
l 受保护的权限,特点是什么,4个权限的汇总
l Object类:特点,重写toString()和equals()方法
2.
内部类
在一个类的内部,定义了一个类,就是内部类
内部类,可以直接使用外部类的成员,包括私有的
但是,外部类,要使用内部类的成员,建立内部类对象
直接访问内部类成员方法的格式:
l 内部类是非静态的,内部类的方法非静态的
外部类.内部类 变量 = new 外部类().new 内部类();
Outer . Inner in = out . new Inner()
变量.内部类的方法();
l 内部类是静态修饰的,内部类的方法是非静态的
外部类.内部类 变量 = new 外部类.内部类();
Outer . Inner in=new Outer . Inner()
变量.内部类方法();
l 内部类是静态修饰,内部类的方法是静态修饰
外部类.内部类.内部类方法();
Outer . Inner . Fun()
局部内部类,类是定义在外部类的方法中!!
访问局部内部类的方法,必须通过外部类方法
局部内部类,继承类,或者实现接口
具备内部类方法,访问局部变量,变量被final修饰,生命周期问题,变量跟随方法的声明周期走,类的对象生命长于方法。加上finall修饰以后,编译的时候,就直接将变量的值进行了赋值操作,赋值给了局部内部类的方法
3.
匿名内部类
实现匿名内部类,前提,必须有继承或者实现
作用:简化书写用的,简化了接口的实现类,简化建立实现类对象操作
匿名内部类,写在方法中:
格式: new 父类或者接口(){
重接接口中的抽象方法
};
4.
包的特点和作用
对类文件进行分类管理
对类提供多层命名空间,类名变成了,包名.类名
包就是系统中的文件夹
定义包,定义的代码,写在文件第一行,定义包的关键字 package 包名(全部小写)
5.
带包编译
l javac -d 目录 XXXX.java
l classpath环境变量,用于JVM寻找class文件使用的,临时配置
6.
包与包之间类的访问
l 包与包之间类的方法,注意的事项
l 保证类的名字别写错了,全类名 包名.类名
l 保证类中的权限,方法的全足够大,可以被外包程序访问
包与包之间的类,能否进行继承
第四种权限,受保护权限 protected 修饰的成员,只能被子类使用
四种权限的使用图表
public protected default private
同一个类 OK OK OK OK
同一个包 OK OK OK
子类中 OK OK
不同包 OK
7.
导入包
如果使用外包中的类,没有必要每次都写包名,进行导入就可以了
导入包,导入的是包中的类
关键字import 包名.类名; 必须写在类的声明之前,定义包之后
java.lang程序的核心包,所有的类,不需要导入
JDK1.0-1.3版本,必须导入核心包lang包
JDK1.4开始,lang包默认导入
8.
Jar包
Java中的压缩包,
jar -cvf 压缩后的文件名 包名
jar- xvf jar的文件名
9.
Object类
java.lang.Object类,是所有类的父类,Java中所有的类,都直接或者间接的继承Object类。构造方法是空参数的,第一行不是super
JDK的源代码
private static native void registerNatives();
static{ registerNatives();}
native 本地,运行的时候在本地方法栈中
凡是Java中,见到native 方法非Java代码编写,这个方法的源代码是c++
本地方法,作用是调用操作系统的中的功能。不公开成员的原始代码,程序人员不需要知道原始代码。
10.
Object类中的方法
l public String toStrng()
返回String类型
输出语句中,默认调用对象的toString()方法
分析方法的原始代码
getClass().getName() 获取到类的名字
hashCode() 运算结果是十进制数
Integer.toHexString 将十进制转成十六进制
我们需要做的是覆盖toString()方法,返回自定义的字符串表示形式
覆盖的依据是,类中的成员变量
在重写toString()方法中,返回成员变量的值 -- 目的,方便观看类中成员变量的值,仅此而已
如果类中,有成员变量,基本上要覆盖toString(),方便别人使用,提高用户体验
l public boolean equals(Object obj)
Java认为所有的对象,都具备比较性,比较性的方法equals(),作用就是对象之间做比较
方法的原始代码:
public boolean equals(Object obj){
return this == obj ;
}
方法中,比较对象的实际内存中地址,对象都是new出来的,地址肯定不同,比较两个对象的地址是没有实际意义的!
重写equals方法,建立自己的对象比较形式,不比较地址,比较的是类中的成员变量的具体数值
覆盖equals建立对象自己的比较形式,这个方法equals被Java中做成了规范,对方调用一个类的equals方法,就是在比较对象中成员变量的值
对方法的参数,进行严格的判断
11.
== equals区别
== 比较运算符
equals 是方法
== 如果是基本类型,比较的是具体的数值
== 是引用数据类型,比较的是实际的内存地址值
equals方法,是Object类的一个比较对象的方法,默认比较两个对象的实际内存地址,重写equals方法,建立对象自己的比较方法,比较对象的成员变量