内部类
概念
1,在类中再定义一个完整的类
2,内部编译后会生成独立的字节码文件
3,内部类可以访问外部类的私有成员,不破坏封装。
4,可为外部类提供必要的内部功能组件。
package csdn1.d3;
/**
* 成员内部类,静态内部类,局部内部类
*/
public class Outer {
Integer name;
//成员内部类,不能直接访问,需要通过外部类对象去访问
class Inner{
String name;
//不能声明静态属性
/* static int name;*/
}
//可以直接访问内部类,不用先创建外部类对象
static class Inner2{
//可以有静态属性
static String name;
}
public void createClass(){
String name ;
//局部内部类,可访问局部属性
final class Inner3{
String name;
}
}
}
成员内部类
1,是外部类的成员部分,创建内部类对象时,必须依赖外部类对象
2,Outer out = new Outer();
Outer.Inner in = out.new Inner();
3,访问
通过 this.访问内部类属性
通过外部类名.this 访问外部类属性
注:成员内部类中不能直接声明静态属性
静态内部类
1 不依赖外部类对象,可直接创建内部类对象,或通过类名访问静态成员。
2,只能直接访问外部类的静态成员,(外部类的实例成员需要创建对象)
3,Outer.Inner in = new Outer.Inner();
4,访问
n.实例成员
Outer.Inner. 静态成员
局部内部类
1,定义在方法内部的类,作用范围和创建对象的范围仅在方法主体中,隐藏类的实现细节。
2,局部内部类访问外部类的局部变量,无法保证对象和局部变量的生命周期一致。必须添加final前缀,保证局部 变量的生命周期大于对象生命周期。(JDK8中,可省略final)
3). 隐藏类的实现细节。
匿名内部类
1,没有类名的局部内部类
2,必须继承一个弗雷或者实现一个借口
3). 定义类、实现类、创建对象的语法合并。
4). 仅父类或接口公开,实现类作为匿名内部类加以隐藏,强制弱耦合。
//创建成员内部类对象
Outer outer=new Outer();
Outer.Inner inner= outer.new Inner();
//创建静态内部类对象
Outer.Inner2 inner2=new Outer.Inner2();
//匿名内部类,适用于,借口,类等。
Runnable runnable=new Runnable() {
@Override
public void run() {
}
};
Object类:
概念
I. 超类、基类、所有类的直接或间接的父类,位于继承树的最顶层。
2. 任何类,如果没有书写extends显示继承某个类,都默认继承Object类,否则为间接继承。
3. Object类中所定义的方法,是所有对象都具备的方法。
4. Object类型的引用可以存储任何对象;作为参数,可接受任何对象,作为返回值,可返回任何对象。
方法
5. 常用方法:
I. public final Class getClass() //返回此对象的运行时类型(真实类型),判断两个对象的运行时类型是否一致。
6. public int hashCode() //一个对象的整数名称,根据对象的地址或字符串或数字算出来的,哈希码并不是完全唯一 的,尽量保证不同对象返回不同哈希码。
7. public String toString() //返回该对象的字符串表示。(全限定名 + 16进制哈希码)
8. public boolean equals(Object obj) //判断指定对象是否与此对象"相等"。
9. protected void finalize() throws Throwable //当对象判定为垃圾对象时,由垃圾收集器调用该方法。
垃圾收集:
10. 垃圾对象:没有任何引用指向的对象。
11. 垃圾回收:销毁垃圾对象,释放数据存储空间。
12. 当对象为垃圾对象时,通过GC(垃圾收集器)回收。
13.
垃圾收集器GC:
14. 自动回收:JVM的内存耗尽,无法为新对象分配空间时,一次性回收所有垃圾对象。
15. 手动回收:使用System.gc(); 通知JVM执行垃圾回收。