2014.1.27 Java RTTI && 反射
来源:互联网 发布:集美大学校园网络中心 编辑:程序博客网 时间:2024/06/10 06:35
RTTI:
* 类加载器, 类加载器链,只有一个原生类加载器加载可信类(本地);
* 所有的类都是在对其第一次使用时,动态加载到JVM中;Java程序在运行之前并非完全加载,各个部分在必需时才加载;
* 构造器也是类的静态方法;
* static 子句是在类首次加载时进行的,应放置类加载时就需要执行的语句;
* Class.forName()会导致类的加载,而类字面常量不会,编译期常量(static final)不需要类初始化就可以读取;
* 使用newInstance()来创建的类,必须有默认的构造器(无参数构造器);
* 基本类型并非继承自Object;
泛化的Class引用:
* Class<? extends className>,创建一个范围,可以进行编译器的类型检查;
模版设计模式:
* 设置一个存储Class对象的List;由random方法产生随机数作为List的索引;通过newInstance()实例化;
* instanceof只可将其与命名类型进行比较,而不能与Class对象做比较;可通过isInstance()实现动态的instanceof();
instanceof的对象可以为派生类对象,考虑了继承关系;getClass()==,该方法不考虑继承关系;
工厂设计模式:
public interface Factory<T> { T create(); }class Filter{public static class Factory implements Factory<Filter>{public Filter create(){return new Filter();}}}* 使用了协变返回类型;
反射:
* RTTI限制:某个对象的确切类型在编译时必须已知,这样才能使用RTTI识别;若该对象在程序空间之外(网络),则不能使用RTTI;
* RMI,要实现远程方法调用;
* RTTI与反射的区别:RTTI在编译时打开和检查.class文件,反射是在运行时打开和检查.class文件;
动态代理设计模式:
空对象思想:
* 标记接口,通过判断某个对象是否为标记接口的实例而确定是否为空对象;
public interface Null{}public class Person{}public class NullPerson extends Person implements Null{}Person np=new NullPerson();if(np instanceof Null){//~}* 空对象的思想避免了一部分繁琐的比较;
命令设计模式:
public interface Operation{String description();void command();}public interface Robot{String name();String model();List<Operation> operations();}public class SnowRemovalRobot implements Robot{String name(){~};String model(){~};List<Operation> operations(){return Arrays.asList(new Operation(){//~;//implements description() & command();},new Operation(){//~;//implements description() & command();},new Operation(){//~;//implements description() & command();});}}* interface关键字的一个重要目标就是允许程序员隔离构件,降低耦合性,但是通过反射以及RTTI,耦合性还是会传播出去;
* 解决方法:1. 程序员决定使用实际的类而不是接口的话,需要对自己负责; 2. 设置包访问权限;
* 但是通过反射机制,仍旧可以到达并调用所有方法以及访问和修改域,包括private。通过getDeclaredMethod()以及setAccessible(true)实现;
- 2014.1.27 Java RTTI && 反射
- Java RTTI与反射
- java-----RTTI与反射
- java RTTI和反射
- Java RTTI与反射
- Java RTTI与反射
- Java RTTI与反射
- Java中的RTTI与反射
- Java基础:RTTI与反射
- Java RTTI和反射机制
- Java RTTI和反射机制
- 【Java基础】RTTI和Java反射机制
- 【Java基础】RTTI与反射之Java
- 【Java基础】RTTI与反射之Java
- java:RTTI与反射的区别
- Java中的RTTI和反射机制
- Thinking in Java RTTI和反射机制
- JAVA的反射机制与RTTI
- Eclipse 的列模式和自动换行功能
- eclipse 常用默认快捷键
- vim插件编写中的plug和SID
- 多继承
- HDU 1166 敌兵布阵
- 2014.1.27 Java RTTI && 反射
- Java 7之异步I/O第2篇 - I/O操作之NIO
- 使用django的login来登陆用户的时候需要为用户模型添加backend
- 研发周报:精简代码,为网站减负的十大建议
- Java部分面试题
- Backbone.js学习
- 漫谈浏览器的明天
- usb-serial-2 usb主机控制器驱动
- 提示框显示