内部类(静态内部类、成员内部类、局部内部类、匿名内部类)(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)
成员内部类为什么不能不能定义静态变量?
定义静态变量是要占用内存的,在编译时只要是定义为静态变量了,系统就会自动为其分配内存给他,而内部类是在外部类编译完成后才进行编译的,也就是说,必须有外部类存在后才能有内部类,这就和编译时就为静态变量分配内存产生冲突,因为系统执行:**运行外部类——静态变量内存分配——内部类,而此时成员内部类中如果有静态变量,就会冲突,所以不能定义静态变量。

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
正在热议
# 牛客帮帮团来啦!有问必答 #
1147688次浏览 17118人参与
# 通信和硬件还有转码的必要吗 #
11097次浏览 101人参与
# OPPO开奖 #
18902次浏览 265人参与
# 和牛牛一起刷题打卡 #
18569次浏览 1621人参与
# 实习与准备秋招该如何平衡 #
202997次浏览 3621人参与
# 大厂无回复,继续等待还是奔赴小厂 #
4797次浏览 30人参与
# 不去互联网可以去金融科技 #
19517次浏览 250人参与
# 通信硬件薪资爆料 #
265473次浏览 2482人参与
# 国企是理工四大天坑的最好选择吗 #
2168次浏览 34人参与
# 互联网公司评价 #
97503次浏览 1277人参与
# 简历无回复,你会继续海投还是优化再投? #
25002次浏览 354人参与
# 0offer是寒冬太冷还是我太菜 #
454483次浏览 5121人参与
# 国企和大厂硬件兄弟怎么选? #
53809次浏览 1010人参与
# 参加过提前批的机械人,你们还参加秋招么 #
14623次浏览 349人参与
# 硬件人的简历怎么写 #
82256次浏览 852人参与
# 面试被问第一学历差时该怎么回答 #
19363次浏览 213人参与
# 你见过最离谱的招聘要求是什么? #
27544次浏览 246人参与
# 学历对求职的影响 #
161078次浏览 1804人参与
# 你收到了团子的OC了吗 #
538240次浏览 6383人参与
# 你已经投递多少份简历了 #
343827次浏览 4960人参与
# 实习生应该准时下班吗 #
96854次浏览 722人参与
# 听劝,我这个简历该怎么改? #
63478次浏览 620人参与
牛客网
牛客企业服务