Java的反射机制
来源:互联网 发布:java 迭代器 从头 编辑:程序博客网 时间:2024/06/07 17:56
Java 反射的简单介绍与运用
java的反射机制:简单来说就是通过类名来获得类的所有信息。
优点:可以实现动态创建和编译,体现出灵活性。
缺点:运行效率没有直接new对象快,但现在有很大的提升,可以忽略不计
首先获得类的Class文件(.calss文件)
1、通过类的全名(含包名),但不推荐使用,编译时,编译器并不知道该类是否存在,需要抛出异常:
Class clazz=Class.forName("className");
2、直接通过类名(不含包名),编译时可以直接发现该类是否存在
Class clazz=className.class;
创建对象实例
Object obj =clazz.newInstance();
获得属性的方法
1、获得public属性
Field f1=clazz .getField("name");
f1.set(obj,"liu");
2、获得非public属性
Field f2=clazz .getDeclaredField("name");
f2.setAccessible(true);
f2.set(obj,"liu");
3、获得所有public属性
Field[] f3=clazz .getField();
4、获得所有public属性
Field[] f4=clazz .getDeclaredField();
获得方法的方法
1、获得无形参的方法
Method m1=clazz.getMethod("getName");
m1.invoke(obj);
2、获得有形参的方法
Method m2=clazz.getMethod("disPlay",String.class);//String.class为形参的类型
m2.invoke(obj);
3、获得所有的方法
Method[] m3=clazz.getMethod();
package javabean;
public class User {
private String name;
private String password;
public User() {
// TODO Auto-generated constructor stub
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public void disPlay(String sort){
System.out.println("该用户的身份:"+sort);
}
@Override
public String toString() {
return "User [name=" + name + ", password=" + password + "]";
}
}
public class User {
private String name;
private String password;
public User() {
// TODO Auto-generated constructor stub
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public void disPlay(String sort){
System.out.println("该用户的身份:"+sort);
}
@Override
public String toString() {
return "User [name=" + name + ", password=" + password + "]";
}
}
package javabean;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Test {
public void test() throws InstantiationException, IllegalAccessException, NoSuchFieldException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
Class<User> clazz=User.class;
/*Class<User> clazz=Class.forName("javabean.User.java");*/
User user=clazz.newInstance();
Field f1=clazz.getDeclaredField("name");
f1.setAccessible(true);
f1.set(user, "jxy");
Field f2=clazz.getDeclaredField("password");
f2.setAccessible(true);
f2.set(user, "123");
Method m1=clazz.getMethod("disPlay", String.class);
m1.invoke(user, "管理员");
}
public static void main(String[] args) throws InstantiationException, IllegalAccessException, NoSuchFieldException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
Test t=new Test();
t.test();
}
}
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Test {
public void test() throws InstantiationException, IllegalAccessException, NoSuchFieldException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
Class<User> clazz=User.class;
/*Class<User> clazz=Class.forName("javabean.User.java");*/
User user=clazz.newInstance();
Field f1=clazz.getDeclaredField("name");
f1.setAccessible(true);
f1.set(user, "jxy");
Field f2=clazz.getDeclaredField("password");
f2.setAccessible(true);
f2.set(user, "123");
Method m1=clazz.getMethod("disPlay", String.class);
m1.invoke(user, "管理员");
}
public static void main(String[] args) throws InstantiationException, IllegalAccessException, NoSuchFieldException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
Test t=new Test();
t.test();
}
}
提示:只是简单的介绍了反射机制的使用,如果想继续深入了解,可以再查看其他的文档或视频。
1 0
- java的反射机制
- Java的反射机制
- Java的反射机制
- Java 的反射机制
- JAVA的反射机制
- Java 的反射机制
- java的反射机制
- Java的反射机制
- Java 的反射机制
- JAVA的反射机制
- Java 的反射机制
- java的反射机制
- java的反射机制
- java的反射机制
- Java的反射机制
- Java的反射机制
- Java的反射机制
- Java的反射机制
- 前端入门(一)
- xml的解析一
- POJ 1002 练习
- Android——体系架构 +四层
- iOS及Mac开源项目和学习资料(一)
- Java的反射机制
- 读取本地txt文件数据和excel文件数据
- 第2周项目2-程序的多文件组织
- 微服务架构设计 第一步: 从特性到业务场景
- vollery框架使用及支持https
- Bmob 初始化 程序停止运行解决方法
- linux设备驱动模型 之driver(驱动)原理与实例分析
- 专访吕毅:链家网技术架构的演进之路
- zookeeper学习资料