java基础——反射基础知识
2016-08-31 23:23
204 查看
动态代理在项目中应用的比较多,动态代理是依靠反射技术来实现的,今天就来系统的学习一下反射。
java中提供的反射机制是说在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。
java反射的主要实现类:
java.lang.Class:表示正在运行的java应用程序中的类和接口,提供得到Construtor、Field、Method的方法。
java.lang.reflect.Constructor:提供关于类的单个构造方法的信息以及对它的访问权限。
java.lang.reflect.Field:提供关于类或接口的属性信息,以及对它的动态访问权限。
java.lang.reflect.Method:提供关于类或接口中某个方法的信息。
下面通过代码来学习:
以上代码基于Person类:
java中提供的反射机制是说在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。
java反射的主要实现类:
java.lang.Class:表示正在运行的java应用程序中的类和接口,提供得到Construtor、Field、Method的方法。
java.lang.reflect.Constructor:提供关于类的单个构造方法的信息以及对它的访问权限。
java.lang.reflect.Field:提供关于类或接口的属性信息,以及对它的动态访问权限。
java.lang.reflect.Method:提供关于类或接口中某个方法的信息。
下面通过代码来学习:
//获取Class类对象 Class class1 = Person.class; Class class2 = Class.forName("com.ls.Person"); Person person = new Person(); Class class3 = person.getClass();
//创建对象实例 Person person = (Person)Class.forName("com.ls.Person").newInstance();
//获取属性 //返回此 Class 对象表示的类或接口的所有可访问公共字段 Field[] fields = Class.forName("com.ls.Person").getFields(); //返回 Class 对象所表示的类或接口所声明的所有字段。包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段 Field[] fields2 = Class.forName("com.ls.Person").getDeclaredFields(); //返回 Class 对象所表示的类或接口的指定已声明字段 Field field3 = Class.forName("com.ls.Person").getDeclaredField("age"); //返回Class 对象所表示的类或接口的指定公共成员字段 Field field4 = Class.forName("com.ls.Person").getField("name"); for (int i = 0; i < fields.length; i++) { System.out.println(fields[i].getName()); } for (int i = 0; i < fields2.length; i++) { System.out.println(fields2[i].getName()); } //启用和禁用访问安全检查的开关。默认为false。值为 true表示反射的对象在使用时应该取消 Java 语言访问检查 field3.setAccessible(true); System.out.println(field3.get(person)); System.out.println(field4.get(person));
//获取方法 Method method = Class.forName("com.ls.Person").getMethod("getName", null); Method method2 = Class.forName("com.ls.Person").getMethod("setName", String.class); System.out.println(method.invoke(Class.forName("com.ls.Person").newInstance(), null)); System.out.println(method2.invoke(Class.forName("com.ls.Person").newInstance(), "柳松"));
以上代码基于Person类:
class Person { public String name = "ls"; private String age = "18"; public Person(){} public Person(String name,String age){ this.name = name; this.age = age; } public String getName() { return name; } public String setName(String name) { return name; } }综上,可以理解为反射就是把java类中的各种成分映射成相应的java类,即一个类以及类中的变量、方法、构造函数、包等信息,都可以当成一个对象来处理,分别对应jdk中相应的类:Class、Field、Method、Construction、Package等。
相关文章推荐
- 学习Spring必学的Java基础知识(1)----反射
- 学习Spring必学的Java基础知识(1)----反射
- 学习Spring必学的Java基础知识(1)----反射
- 学习Spring必学的Java基础知识(1)----反射
- Java基础知识:反射
- Java基础知识:反射
- java反射基础知识
- 编程基础知识——C++能不能支持Java和ObjC的反射?
- 学习Spring必学的Java基础知识(1)----反射
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制
- 学习Spring必学的Java基础知识----反射
- android反射组件 (一)java 自定义annotation基础知识
- 学习Spring必学的Java基础知识(1)----反射
- Java核心技术卷I:基础知识(原书第8版):12.9 反射和泛型
- 学习Spring必学的Java基础知识(1)----反射
- Java基础知识_反射
- Java基础知识整理三(反射机制详解…
- Java基础知识――类装载器与反射机制
- Java 反射的基础知识(笔记),用于框架
- android反射组件 (一)java 自定义annotation基础知识