Java基础加强笔记
11、Integer i1 = 13;
Integer i1 = 13;
这两个是同一个对象
但赋值的值超过-128~127 就不是同一个对象
享元模式 flyweight 当这个数据很小,但出现的次数较多
可以将其变成一个对象,不同的变成方法的外部属性,相同的叫做内部属性
12、枚举
也是JDK1.5中增加的新特性
当编译不成功的时候编译器就不通过
13、final 和 static 谁在前面都可以
如需打印这个对象,需要从写toString()方法
如果类里面有抽象方法 那么这个类必须是抽象类
采用抽象方法定义nextDay就将大量的if else语句转移成了一个个独立的类
14、枚举自动实现了toString()方法
有他自己的排行方法ordinal
15、枚举也是一个特殊的类
元素列表必须放在其他方法之前,切元素列表最后需要加";"
方法必须是private的
枚举元素后面加()表示创建这个枚举实例对象使用哪个构造方法
16、内部类可以有四个访问修饰符,而外部类只有两个
一个是 默认的friendly 另一个是 public
子类必须完成父类的抽象方法
类的方法返回的可以使自己这个类型
类里面可以定义静态常量 常量指向的结果就是自己这个类的实例对象
如果美剧只有一个成员是,就可以作为一种单例模式
17、反射
框架会用到
Java类用于描述一类事物的共性、该类食物有什么属性,没有什么属性。至于这个属性的值是什么,则是由这个类的实例对象来确定
Java中的类都是同一种事物、这种事物就是Class
Class的实例对象代表内存中的一份字节码
有几份字节码就是几个Class 的实例对象
得到一个类的字节码有两种情况
1、这个类已经加载到内存中了
2、如果没有加载那么就是用类加载器去加载,然后返回类的字节码
得到类的字节码有三种方式
1、System.class
2、.getClass()
3、Class.forName("类名");
数组也是一个类型
Class.isArray()
总之,只要是在源程序中出现的类型,都有各自的Class实例对象如void int[]{}
18、反射:
反射就是把Java类中的各种成分映射成相应的Java类
各个成分所对应的对象,然后就用这个对象干一些事情
19、Constructor类
我们想要的到一个类中所有的构造方法
Constrouctor [] constrouctor = Class.forName("类名").getConstructor;
Construtor constructor1 = String.class.getConstrutor(StringBuffer.class);
String str2 = (String)construtor1.newInstance(new StringBuffer("abc");
调用获得的方法是要用到上面相同的类型的实例对象
反射比较占用资源 导致程序性能下降 需要加载到缓存方便以后使用
Class.newInstance() 该方法内部先得到默认的构造方法,然后用该构造方法实例对象 他用到了缓存机制来保存默认构造方法的实例对象
20、类身上的成员变量也是又一个类来表示Field
要得到一个类身上的某个成员变量先要得到类的字节码,通过字节码可以通过getField()方法来获取
如果该字段为私有的、那么使用getDeclaredField()方法
但还是无法访问需要使用暴力反射field.setAccessible(true);
后就可以访问了