Java基础--反射
2015-10-27 16:31
337 查看
1, 反射:就是把java类中各种成分映射成相应的java类。
2,反射用的方法
字节码:字节码通常指的是已经经过编译,但与特定机器码无关,需要直译器转译后才能成为机器码的中间代码。编译器将源码编译成字节码,特定平台上的虚拟机器将字节码转译为可以直接执行的指令。 要学的方法,Class,Field,Method, Constructor, Package。。。 Method代表一个类中方法的类型, Class是一个类,Class类代表java类。 没有构造方法,不能new对象。 Class cls1 = 字节码1; Class cls2 = Date.class; Person p1; p1.getClass();//得到字节码 Class.forName("java.lang.String");//返回字节码 三种方式获得字节码: 1,类名.class,如System.class 2,对象.getClass(),如new Date().getClass(); 3,Class.forName("类名"),如 Class.forName("java.util.Date"); 通常用第三种,源程序不需要知道类名,运行时传入参数获取。 九个预定义的.class,包括八种基本数据类型和void类型。 String str1 = "abc"; Class cls1 = str1.getClass(); Class cls2 = Stirng.class(); Class cls3 = Class.forName("java.lang.String"); 这三个是同一份字节码。 isPrimitive()判断是否是基本类型, cls1.isPrimitive(); 九种预定义Class实例对象,int.class == Integer.Type 数组类型的Class实例对象,Class.isArray() 总之,只要在源程序中出现的类型,都有各自的Class实例对象,如int[]
2,反射用的方法
获取类的构造方法: Constructor类,代表某个类中的一个构造方法。 Constructor[] constructors = Class.forName("java.lang.String").getConstuctor() Ex. Constructor cons1 = String.class.getConstructor(StringBuffer.class); String str2 = (String)cons1.newInstance(new StringBuffer("abc")); ReflectPoint pt1 = new ReflectPoint(3,5); Field fieldy = pt1.getClass().getField("y"); Fieldy.get(pt1);//这样取出的就是pt1中的参数5. 对于private变量可用getDeclaredField("x"); 取出用fieldx.setAccessible(true);然后再取。 同一份字节码的比较用==比。(field.getType() == String.class()) Method:方法的反射。 Method methodCharAt = String.class.getMethod("charAt", int.class); methodCharAt.invoke(str, 1);如果此处str为null,那么调用的是静态方法。 数组的反射, 具有相同维数和元素类型的数组属于同一类型 反射的应用,写框架。 应用的例子,主体部分
Properties props = new Properties(); InputStream ips = new FileInputStream("config.properties"); props.load(ips); ips.close(); String className = props.getProperty("className"); Collection collections = (Collection)Class.forName(className).newInstance();
相关文章推荐
- 数据转换错误,java.lang.NumberFormatException: null
- spring 核心技术
- Spring笔记——Bean后处理器
- Spring+CXF3.1.3搭建SOAP服务端(一)
- Java:基本数据类型包装类
- java之文件基本操作
- java多线程学习-java.util.concurrent详解(一) Latch/Barrier
- Java使用多线程发送消息
- springmvc +uploadify 3.2.1 上传文件
- 自定义方法copy数组 和 Java类库对数组复制的支持
- java Vamei快速教程03 构造器和方法重载
- springmvc+mybatis项目中的统一异常处理器
- native activity 下调用java
- Spring Unit Test
- 解决ext+struts文件上传,json返回结果无法读取到的问题
- spring整合shiro
- java email操作demo和解析eml文件
- eclipse、myeclipse 打开当前文件所在文件夹的方法
- 冒泡排序算法及其简单优化(基于Java)
- java Vamei快速教程02 方法和数据成员