什么是单例
单例是java的一种设计模式,实现单例的类需要保证不管外部程序如何改变,单例类只能存在唯一的实例.
单例模式实现可以分为两大类
1:懒汉式,意思是单例类的实例在被使用时才第一次加载,也就是按需加载,节省资源.
2:饿汉式,jvm的classloader加载类的时候,单例类的实例就被加载,这种模式的好处是,这个过程由jvm保证同步,不会存在线程安全,加载效率等问题.
比较好的单例实现模式有静态内部类方法实现和枚举实现
静态内部类实现单例
枚举实现单例
什么是反射
大家都知道,要让Java程序能够运行,那么就得让Java类要被Java虚拟机加载。Java类如果不被Java虚拟机加载,是不能正常运行的。现在我们运行的所有的程序都是在编译期的时候就已经知道了你所需要的那个类的已经被加载了。
Java的反射机制是在编译并不确定是哪个类被加载了,而是在程序运行的时候才加载、探知、自审。使用在编译期并不知道的类。这样的特点就是反射,体现了Java的动态性。
每一个类都会在编译之后都会产生.class文件,当这个类在第一次使用的时候类加载器(ClassLoader)会加载.class到jvm中,
加载:由类加载器完成,找到对应的字节码,创建一个Class对象
链接:验证类中的字节码,为静态域分配空间
初始化:如果该类有超类,则对其初始化,执行静态初始化器和静态初始化块(编译器将检查类型向下转型是否合法,如果不合法将抛出异常。向下转换类型前,可以使用instanceof判断。)
如何使用反射
反射的作用
主要用于框架配置文件加载,反射常常配合工厂模式,代理模式共同作用于框架