Java反射机制原理及使用(二) 女爷i 2022-08-10 12:50 173阅读 0赞 1.获取字节码文件中的字段: (1)获取公共字段,使用Class中的getField()方法。 注:将Person类中的age访问权限改为public: public static void getPublicFieldDemo() throws Exception{ String className = "Person"; Class clazz = Class.forName(className); Field field = null; field = clazz.getField("age"); Object obj = clazz.newInstance(); Object o = field.get(obj); System.out.println(o); } 结果: ---------- java ---------- Person run 0 Output completed (0 sec consumed) - Normal Termination 若age访问权限为private,则会报访问异常: ---------- java ---------- Exception in thread "main" java.lang.NoSuchFieldException: age at java.lang.Class.getField(Class.java:1690) at ReflectDemo.getPublicFieldDemo(ReflectDemo.java:20) at ReflectDemo.main(ReflectDemo.java:12) Output completed (0 sec consumed) - Normal Termination (2)获取本类中的所有字段,使用Class中的getDeclaredField()方法。 注意:由于访问权限问题,访问超限时需要对相应字段的访问取消权限检查。即:使用暴力访问方式。 public static void getPrivateFieldDemo() throws Exception{ String className = "Person"; Class clazz = Class.forName(className); Field field = null; field = clazz.getDeclaredField("age"); field.setAccessible(true); Object obj = clazz.newInstance(); Object o = field.get(obj); System.out.println(o); } //结果:此时的age问私有数据。 ---------- java ---------- Person run 0 Output completed (0 sec consumed) - Normal Termination 2.获取字节码文件中的方法: (1)获取字节码文件中的所有公共方法: 使用Class类中的成员方法getMethods(); public static void getPublicMethods() throws Exception{ String className = "Person"; Class clazz = Class.forName(className); Method[] methods = clazz.getMethods(); for(Method method:methods){ System.out.println(method); } } //结果: ---------- java ---------- public void Person.set(java.lang.String,int) public void Person.show() public final void java.lang.Object.wait() throws java.lang.InterruptedException public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException public boolean java.lang.Object.equals(java.lang.Object) public java.lang.String java.lang.Object.toString() public native int java.lang.Object.hashCode() public final native java.lang.Class java.lang.Object.getClass() public final native void java.lang.Object.notify() public final native void java.lang.Object.notifyAll() Output completed (0 sec consumed) - Normal Termination (2)获取字节码文件本类中的所有方法:(不包含继承来的方法) 仅需将上面的代码中getMethods()方法改成getDeclaredMethods方法即可! (3)获取字节码文件中的指定方法: public static void getSomeMethods() throws Exception{ String className = "Person"; Class clazz = Class.forName(className); Constructor constructor = clazz.getConstructor(String.class,int.class); Object obj = constructor.newInstance("小米",50); Method method = clazz.getMethod("show",null); //需要注意,该方法仅能获取公共方法,获取非公共的方法需要使用getDeclaredMethod。 method.invoke(obj,null); } //结果: ---------- java ---------- Person run + name ::小米 age :50 Person name :小米 age :50 Output completed (0 sec consumed) - Normal Termination (3)获取字节码文件中的指定方法:(带参非公有) 注:show在Person类中为private修饰并含有两个参数的方法,其定义代码为: private void show(String name1,String name2){ System.out.println("Person name :"+name1 +" name2 :"+name2); } 获取它的代码为: public static void getprivateMethods() throws Exception{ String className = "Person"; Class clazz = Class.forName(className); Constructor constructor = clazz.getConstructor(String.class,int.class); Object obj = constructor.newInstance("小米",50); Method method = clazz.getDeclaredMethod("show",String.class,String.class); method.setAccessible(true); method.invoke(obj,"小强","小米"); } //结果为: ---------- java ---------- Person run + name ::小米 age :50 Person name :小强 name2 :小米 Output completed (0 sec consumed) - Normal Termination
相关 Java反射机制详解及使用示例 Java的反射机制允许我们在运行时检查类、接口、方法和字段等信息,对系统进行动态操作。 以下是对反射机制的一些详细解释和使用示例: 1. **获取类信息**: - ` 系统管理员/ 2024年09月11日 04:36/ 0 赞/ 27 阅读
相关 Java反射机制使用误区及案例 Java反射机制是一种强大的工具,可以让我们在运行时检查类、字段和方法等信息。然而,它的使用也存在一些误区,下面我们将通过几个案例来说明这些误区。 1. **随意获取敏感信息 超、凢脫俗/ 2024年09月10日 19:42/ 0 赞/ 20 阅读
相关 Reflection反射机制原理、使用场景 及 缺陷 反射 一个需求 引出反射 需求如下: 根据配置文件re.properties中的指定信息,创建Cat对象并调用方法hi > 在配置文件中代码:classfull ゞ 浴缸里的玫瑰/ 2024年03月26日 18:08/ 0 赞/ 13 阅读
相关 谈谈java 反射机制以及反射机制的原理 Person p=new Person(); 这是什么?当然是实例化一个对象了.可是这种实例化对象的方法存在一个问题,那就是必须要知道类名才可以实例化它的对象,这样我们在应 女爷i/ 2024年03月17日 16:37/ 0 赞/ 13 阅读
相关 Java反射机制原理及使用(一) 1.Java反射机制是在运行状态中,对于任意一个类(class文件),都能够知道该类的所有属性和方法。 (1)对于任意一个对象,都能够调用它的任一方法和属性。 (2)j 古城微笑少年丶/ 2022年08月13日 11:40/ 0 赞/ 194 阅读
相关 Java反射机制原理及使用(二) 1.获取字节码文件中的字段: (1)获取公共字段,使用Class中的getField()方法。 注:将Person类中的age访问权限改为public: 女爷i/ 2022年08月10日 12:50/ 0 赞/ 174 阅读
相关 Java反射机制及IoC原理 [Java反射机制及IoC原理][Java_IoC] 一. 反射机制概念 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结 末蓝、/ 2022年03月02日 07:14/ 0 赞/ 233 阅读
相关 Java反射机制,反射机制原理,学习与记录 JAVA反射机制,先看下百度百科解释 > 百度百科: > > JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个 水深无声/ 2022年02月24日 09:08/ 0 赞/ 252 阅读
还没有评论,来说两句吧...