java开发中嵌套类的详解
在java语言规范里面,嵌套类(Nested Classes)定义是:
A nested class is any class whose declaration occurs within the body of another class or interface. A top level class is a class that is not a nested class.
说的简单一点,就是定义在类里面的类。一般把定义内部类的外围类成为包装类(enclosing class)或者外部类
嵌套类分类
根据nested class定义的地方,可以分为member nested class,local nested class , anonymous nested class
member nested class 可以使用public,private,protected访问控制符,也可以用static,final关键字
local nested class 可以使用final关键字
anonymous nested class 不使用任何关键字和访问控制符
来自Java编程思想:
如果不需要内部类对象与外围类对象之间有联系,那么可以将内部类声明为static。这通常称为嵌套类。要想理解static应用于内部类时的含义,就必须记住,普通的内部类对象隐式地保存了一个引用,指向创建它的外围类对象。然而,当内部类时static的时候,就不是这样了。嵌套类意味着:
要创建嵌套类的对象,并不需要其外围对象。
不能从嵌套类的对象中访问非静态的外围类对象。
嵌套类与普通的内部类还有一个区别。普通内部类的字段与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static字段(这就是为什么单例设计模式中,内部类为什么必须是静态的原因了),也不能包含嵌套类,但是嵌套类可以包含所有这些东西!
下面是懒汉式单例模式的代码:
package com.easyliu.staticinnerclass;
/**
* 懒汉式单例
* @author EasyLiu
*
*/
public class Singleton {
private Singleton() {
System.out.println("Singleton-init");
}
/**
*
* @author EasyLiu 嵌套类(静态类)
*
*/
private static class SingletonHolder {
private final static Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
public static void main(String[] args) {
//测试Singleton会初始化几次
Singleton.getInstance();
Singleton.getInstance();
Singleton.getInstance();
Singleton.getInstance();
Singleton.getInstance();
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。