内部类(静态内部类、成员内部类、局部内部类、匿名内部类)(1)

Java类中不仅可以定义变量和方法,还可以定义类,这样定义在类内部的类被称为内部类。根据定义的方法不同,内部类可以分为静态内部类、成员内部类、局部内部类、匿名内部类四种。


静态内部类
定义在类内部的静态类就是静态内部类。

package innerclass;
//定义一个静态内部类
public class Out1 {

	private static int a;
	private int b;
	public static class Inner{
		public void print(){
			System.out.println(a);
			System.out.println("这是一个静态内部类");
		}
	}
}

注意
①静态内部类可以访问外部类所有的静态变量和方法,即使是private。
②静态内部类和一般类一致,都可以定义静态变量和方法和构造方法。
③其他类要使用静态内部类的方法要通过Java语法“外部类.内部类.方法名()”的方法
例如:
Out1.Inner inner = new Out1.Inner();
inner.print();

输出:
在这里插入图片描述
④Java集合HashMap内部就有一个静态内部类Entry,Entry是HashMap存放元素的抽象,HashMap内部维护Entry用数组存放元素,但是Entry对于用户是透明的。像这种和外部类关系密切,并且不依赖外部类实例的,都可以使用静态内部类。


成员内部类
定义在类内部的普通类

package innerclass;
//定义一个成员内部类
public class Out2 {

	private static int a;
	private int b;
	
	public class Inner{
		public void print() {
		    System.out.println(a);
			System.out.println(b);
			System.out.println("这是一个成员内部类");
		}
		
	}
}

①在成员内部类中不可以定义静态变量和方法(final修饰的除外),原因是类的加载机制中是先加载静态成分的,如果在成员内部类中加入静态变量和方法,就会导致加载顺序的歧义。
②外部类的所有实例成员都对内部类可见。成员内部类的实例对象有外部类的实例对象的引用,所以可以访问到外部类的所有静态成员(包括私有的)。
③外部类对内部类可见,所以可以在内部类中创建外部类的实例对象。
④内部类对外部类可见。因为编译后的内部类至少是包内的,所以在外部类中可以new生成内部类的实例对象。
外部类按照常规的类访问方式使用内部类,唯一的差别是外部类可以访问成员内部类的所有方法和属性,包括私有的属性和方法。
⑤成员内部类可以用public、protected、private访问修饰符进行访问控制,内部类能够隐藏起来,不为同一包内的其他类访问。成员内部类一般当做成员变量设置为private。
⑥成员内部类是非静态的。所以在成员内部类中,不能定义静态字段、静态方法和静态内部类,因为成员内部类需要先创建外部类的实例对象,才能创建自己的实例对象;但是可以定义非静态字段、非静态方法和非静态内部类。(除了final)
成员内部类为什么不能不能定义静态变量?
定义静态变量是要占用内存的,在编译时只要是定义为静态变量了,系统就会自动为其分配内存给他,而内部类是在外部类编译完成后才进行编译的,也就是说,必须有外部类存在后才能有内部类,这就和编译时就为静态变量分配内存产生冲突,因为系统执行:**运行外部类——静态变量内存分配——内部类,而此时成员内部类中如果有静态变量,就会冲突,所以不能定义静态变量。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

炒冷饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值