java反射机制代码(java反射机制相关)
本文目录
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的反射机制是什么
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反射机制
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 {}); } } 这个是反射的经典例子。
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);}}
更多文章:
pow函数怎么定义(power跟pow函数有什么区别语言里面有power这个函数吗)
2024年6月28日 16:32
panel discussion(panel discussion是什么意思)
2024年6月18日 22:43
慕课网官网库函数包含什么(请问#i nclude <linux/skbuff.h>是什么库函数啊 )
2024年7月21日 20:07
registry workshop(windows xp在欢迎使用的界面那里提示无法加载配置文件,怎么解决)
2024年8月24日 04:30
前端图片居中怎么设置(web前端,一张图片的实际尺寸为1334×662,屏幕分辨率比这张图片还高,前端如何设计铺满整个屏幕的)
2024年7月13日 00:28
plsql怎么打开表(pl/sql连接oracle数据库tables里面不显示表)
2024年9月10日 11:05
applicable rules(APPLICABLE RULES UCP LATEST VERSION 是什么意思)
2024年7月18日 04:11
excel中怎么运行vbs代码(如何利用vbs打开excel.)
2024年9月9日 03:40
java人脸识别(用OpenCV开发人脸识别软件,用Java好还是用C/C++好)
2024年6月20日 17:53