一、内部类
在另一个类中定义的类
内部类作用
1、内部类提供了更好的封装。只能让外部类直接访问,不允许同一个包中的其他类直接访问。
2、内部类可以直接访问外部类的私有属性,内部类被当成其外部类成员。当外部类不能访问内部类的内部属性。
内部类的使用场合:由于内部类提供了更好地封装性,并且可以很方便的访问外部类的属性。所以,通常内部类只在所外部类提供服务的情况下优先使用。
内部类分类:成员内部类 匿名内部类 局部内部类(极少使用)
二、静态内部类
因为静态内部类只能操作静态成员属性,所以无论创建几次,虽然多个静态类实例不是同一个,但其操作的变量是共享的(1变为了2)。!
public class StudyStatic {
private static int staticVar;
private static InternalStaticClass innerClass = new InternalStaticClass();
private static InternalStaticClass innerClass2 = new InternalStaticClass();
public static void main(String[] args) {
System.out.println(innerClass.hashCode());
System.out.println(innerClass2.hashCode());
}
protected static class InternalStaticClass{
public InternalStaticClass(){
staticVar++;
System.out.println(staticVar);
}
}
}
代码结果:
1
2
366712642
1829164700
三、枚举类
enum 枚举类型定义与类定义相似,enum类型本身就相当于类,不过比较特殊,相当于提供了几个个该类的实例,当然enum类型不能被实例化,但可以修改已经存在的枚举值。
public class TestEnum {
public static void main(String[] args) {
for(int i=0;i<MyEnum.values().length;i++){
System.out.println(MyEnum.values()[i].getKey()+":"+
MyEnum.values()[i].getValue());
}
MyEnum.Enum1.setKey(4);
System.out.println(MyEnum.Enum1.getKey()+":"+MyEnum.Enum1.getValue());
}
public enum MyEnum{
//多个个枚举值,注意名字并不是构造方法名
Enum1(1,"One"),Enum2(2,"Two"),Enum3(3,"Three");
//枚举值所包含的属性
private int key;
private String value;
//构造方法
MyEnum(int key,String value){
this.setKey(key);
this.setValue(value);
}
public int getKey() {
return key;
}
public void setKey(int key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
}
运行结果:
1:One
2:Two
3:Three
4:One