发表于: 2017-02-03 23:59:01

1 1976


今天学习的内容:主要是内部类和枚举类

外部类也可以叫宿主类

内部类也可以继续有内部类

内部类根据使用不同的修饰符和位置分为四种

1.实例内部类

2.静态内部类

3.局部内部类

4.匿名内部类

 

内部类可以看做是外部类的一个成员所以可以用public/缺省protect/private修饰

1.实例内部类:没有使用static修饰,说明内部类属于外部类的对象,不属于外部类本身,

特点:

1.创建实例内部类前必须通过外部类对象创建内部类对象(当存在内部类对象时一定存在外部类对象)

2.实例内部类的实例自动持有外部类的实例引用,内部类可以直接访问外部类成员

3.外部类中不能直接访问内部类成员,必须通过内部类的实例访问

4.实例内部类中不能定义静态成员,只能定义实例成员

5.如果实例内部类和外部内部类存在同名的字段或方法,那么在内部类中,this.abc表示访问内部类成员,外部类.this.abc表示访问外部类成员

 

静态内部类:使用static修饰的内部类

1.静态内部类的实例不会自动持有外部类的特定实例的引用,在创建内部类实例时候不需要创建外部类实例,

2.静态内部类可以直接访问外部类的静态成员,如果访问外部类的实例成员,则需要通过外部类的实例去访问,

3.静态内部类中可以定义静态成员也可以实例成员

4.测试类可以通过完整的类名直接访问静态内部类的静态成员,

 

局部内部类(一般很少用局部内部类,一般用匿名内部类)

在方法中定义的,其可见范围和当前方法的局部变量是一个级别的

1.不能使用访问修饰符

2.局部内部类只能在当前方法中使用

3.局部内部类和实例内部类一样不能包含静态成员

4.局部内部类和实例内部类一样可以访问外部类的所有成员

5.局部内部类访问的局部变量必须使用final修饰(java8中不是,自动默认隐式添加final,依然是常量,不能改变)原因:如果当前方法不是main方法那么当前方法调用完毕后当前方法的栈帧被销毁,方法内部的局部变量的空间全部销毁,然后局部内部类是定义在方法中的,而且在方法中会创建局部内部类对象,而局部内部类会去访问局部变量,当当前方法被销毁的时候,对象还在堆内存,依然持有对局部变量的引用,但是方法被销毁的时候局部变量已经被销毁了,此时出现在堆内存中,一个对象引用着一个不存在的数据,为了避免该问题,我们使用final修饰局部变量,从而变成常量,永驻内存空间,即使方法销毁之后,该局部变量也在内存中,对象可以继续持有


匿名内部类:匿名内部类是一个没有名称的内部类,适合只用一次的类

在开发中经常有这样的一些类,只需要定义一次使用一次就可以丢弃,此时不应该白白定义在一个文件中,javaSE/安卓事件处中,不同的按钮点击之后应该有不同的响应操作,首选使用匿名内部类

特点:

1.匿名内部类本身没有构造器,(没有类名就没有构造器,会调用父类构造器)

2.尽管没有构造器,但是可以在匿名类中提供一段实例初始化代码块,jvm在调用父类构造器之后会执行该代码

3.内部类除了可以继承类之外还可以实现接口

 

 

枚举是从java5开始提供的一种新的数据类型,是一个特殊的类,就是多个常量对象的集合

特点:

枚举类的特点:

1.枚举类直接父类为java.lang.Enum,但是不能显示集成Enum

2.枚举就相当一个类,可以定义构造方法,成员变量,普通方法,抽象方法

3.默认私有的构造方法,即使不写访问权限也是private

4.每个实例分别用一个全局变量来表示,枚举类的对象是固定的,实例个数有限,不能使用new关键字

5.枚举实例必须位于枚举体中最开始部分,枚举实例列表的后要有分号与其他成员相分隔

6.枚举实例后有花括号时,该实例时枚举类的匿名内部类对象


遇到的问题:没有实际代码来加强理解,怕是过段时间会遗忘


明天计划:

开始学习spring


返回列表 返回列表
评论

    分享到