java反射机制代码(JAVA反射机制代码)

本文目录
JAVA反射机制代码
1.就是说根据你传进去的对象类型返回相应的代理。这个不是在静态编译时决定的, 而是运行时决定的,所以叫做动态。this指的是当前InvocationHandler对象,也就是new MyInvocationHandler()出来的。
2.执行RealSubject中的say方法,因为这个时候实际的对象是bind(new RealSubject())。
3.没有调用自己啊。
JAVA的反射机制
import java.lang.reflect.*;
/*所谓的反射机制就是 在一个类中调用另一个类里面的方法和属性等,另一个类可能还没有定义好,但是
* 只要知道他里面有方法,就可以调用;调用那个类就要现获得哪个类的完整名字,在创建一个那个类的一个对象
* 如果是调用无参的,实例化对象以后就可以书出了
* 但是如果是有参数的构造,就需要getDeclaredConstructor()方法得到一个相对应的构造函数,放到Constructor的一个变量里面
* 然后,在创建一个Object对象实例化有刚才得到的构造函数,最后在输出
使用反射机制:
调用无参构造器实例华 House对象;
调用有参数构造起实例华House对象;
调用toString方法
*/
public class ReflectTestPro {
public static void main(String args) throws Exception {
Class c = Class.forName("chap06.House");//路径
// new House();
// 调用无参构造器实例华 House对象;
Object h1 = c.newInstance();// 多态表现 父类和子类
System.out.println(h1);
// 调用无参构造器实例华 ArrayList对象;
Class c1 = Class.forName("java.util.ArrayList");// 类名要完整
Object h3 = c1.newInstance();// 相当于new ArrayList();
System.out.println(h3);
// 调用有参数构造起实例华House对象;
Constructor cons = c.getDeclaredConstructor(new Class { String.class,
String.class, double.class });//可其构造函数里面的参数类型一定要一致
Object h3 = cons.newInstance(new Object { "shanghai", "3-2-1",
new Double(100.0) });//实例化这个类的一个实例
// 相当于常规方式中的new House("shanghai///,"3-2-1",100)
System.out.println(h3);
// 调用有参构造器实例华 Date对象
Class c4 = Class.forName("java.util.Date");
Constructor cons4 = c4.getDeclaredConstructor(new Class { long.class });
Object h4 = cons4.newInstance(new Object { new Long(999999l) });
System.out.println(h4);
// 调用toString方
Method m = c.getDeclaredMethod("toString", new Class {});
String s = (String) m.invoke(h3, new Object {});// Stirng
// s=h3.toString();
System.out.println(s);
}
}
.java的反射机制是什么
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。
java反射机制跪求
不知道你想知道具体的什么,我把我的笔记贴给你把
Class.forName("某个类")去加载哪个类的字节码
1.去加载,
2.曾经加载过,在内存中加载
如何得到各个字节码对应的实例对象(Class类型)
1.类名.class 例如System.class 固定格式
2.对象.getClass() 例如new Date().getClass()
3.Class.forName("类名")
九个预定义的Class对象(八个基本数据类型,一个void)
根据反射的信息构建一个类
反射很消耗程序性能
Method methods = c.getMethods();
得到方法后执行的方法:
m.invoke(obj,args);两个参数是:你要调用的方法是属于哪一个对象的方法,你要把这个对象传给它,第二个参数是这个方法所需要的参数
我的理解就是反射可以拿到一个类或者对象的任何东西,不管是私有的变量或者方法
java反射机制相关
(1)获得对象的类型:
–Class classType=object.getClass();
–System.out.println("Class:"+classType.getName());
在java.lang.Object类中定义了getClass()方法,因此对于任意一个Java对象,都可以通过此方法获得对象的类型。Class类是Reflection API 中的核心类,它有以下方法
–getName():获得类的完整名字。
–getFields():获得类的public类型的属性。
–getDeclaredFields():获得类的所有属性。
–getMethods():获得类的public类型的方法。
–getDeclaredMethods():获得类的所有方法。
•getMethod(String name, Class parameterTypes):获得类的特定方法,name参数指定方法的名字,parameterTypes参数指定方法的参数类型。
•getConstructors():获得类的public类型的构造方法。
•getConstructor(Class parameterTypes):获得类的特定构造方法,parameterTypes参数指定构造方法的参数类型。
•newInstance():通过类的不带参数的构造方法创建这个类的一个对象。
(2)通过默认构造方法创建一个新对象:
•Object objectCopy=classType.getConstructor(new Class{});
•以上代码先调用Class类的getConstructor()方法获得一个Constructor 对象,它代表默认的构造方法,然后调用Constructor对象的newInstance()方法构造一个实例。
(3)获得对象的所有属性:
•Field fields=classType.getDeclaredFields();
•Class 类的getDeclaredFields()方法返回类的所有属性,包括public、protected、默认和private访问级别的属性
java反射机制
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Admin {
public Admin(){
}
private String id = "";
public String getId() {
System.out.print(id);
return id;
}
public void setId(String id) {
this.id = id;
}
public static void main(String args)
throws ClassNotFoundException, InstantiationException, IllegalAccessException,
SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
String str="com.spring.event.Admin";
Class c=Class.forName(str);
Object obj=c.newInstance();
// 这里是里设置属性的值
Method m = c.getMethod("setId",new Class{Class.forName("java.lang.String")});
m.invoke(obj,new Object{"penghao122"});
// 这里是里获取属性的值
m = c.getMethod("getId",new Class{});
m.invoke(obj,new Object {});
}
}
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Admin {
public Admin(){
}
private String id = "";
public String getId() {
System.out.print(id);
return id;
}
public void setId(String id) {
this.id = id;
}
public static void main(String args)
throws ClassNotFoundException, InstantiationException, IllegalAccessException,
SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
String str="com.spring.event.Admin";
Class c=Class.forName(str);
Object obj=c.newInstance();
// 这里是里设置属性的值
Method m = c.getMethod("setId",new Class{Class.forName("java.lang.String")});
m.invoke(obj,new Object{"penghao122"});
// 这里是里获取属性的值
m = c.getMethod("getId",new Class{});
m.invoke(obj,new Object {});
}
}
这个是反射的经典例子。

更多文章:
avantage怎么设置为中文(Avantage安装丢失GIT)
2026年10月15日 03:00
activex控件未注册怎么办(登陆视频监控网页时提示activex控件未注册,怎么解决)
2026年10月14日 20:30
excel连接sql数据库教程(excel怎么连接sql数据库)
2026年10月14日 19:40






