Java获取类信息的三种方法+通过反射获取私有属性 柔光的暖阳◎ 2024-03-22 19:55 45阅读 0赞 通过下面三种方法,我们可以获取到类的信息,包括类的名称、修饰符、父类、接口、字段、方法等信息。这些信息可以用于进行反射操作,例如动态创建对象、调用方法、访问字段等。 通过反射可以 1.使用Class.forName()方法 Class.forName()方法可以通过类的全限定名来获取类信息,例如: Class<?> cls = Class.forName("com.example.MyClass"); 这里,com.example.MyClass是类的全限定名,cls是获取到的类信息。需要注意的是,Class.forName()方法需要指定类的全限定名,如果类未被加载或不存在,会抛出ClassNotFoundException异常。 2.使用类字面常量 在Java中,我们可以使用类字面常量来获取类信息,例如: Class<MyClass> cls = MyClass.class; 这里,MyClass.class是类字面常量,cls是获取到的类信息。需要注意的是,类字面常量只能用于已知类的情况,如果类未被加载或不存在,会抛出NoClassDefFoundError异常。 3.使用对象的getClass()方法 在Java中,我们可以使用对象的getClass()方法来获取类信息,例如: MyClass obj = new MyClass(); Class<?> cls = obj.getClass(); 这里,obj是一个MyClass类型的对象,cls是获取到的类信息。需要注意的是,getClass()方法只能用于已知对象的情况,如果对象为null,会抛出NullPointerException异常。 ### **应用** ### #### 1.创建一个类,它的name是私有的,怎样把Abc的实例对象设置name为“张三”呢??? #### 可以通过反射。 public class Abc { private String name; @Override public String toString() { return "Abc{" + "name='" + name + '\'' + '}'; } } public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, NoSuchMethodException, InvocationTargetException{ Abc a = new Abc(); //把名字设置成张三 Class cl = Abc.class; //获取Abc类中名为name的私有属性 Field nameField = cl.getDeclaredField("name"); //设置该属性的可访问性,俗称暴力反射 nameField.setAccessible(true); nameField.set(a,"张三"); System.out.println(a); } #### 2.创建一个类,它的name是私有的,setName()方法是私有的,怎样把Abc的实例对象设置name为“张三”呢??? #### 还是可以通过反射。 public class Abc { private String name; private void setName(String name) { this.name = name; } @Override public String toString() { return "Abc{" + "name='" + name + '\'' + '}'; } } public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, NoSuchMethodException, InvocationTargetException{ Abc a = new Abc(); Class<Abc> abcClass = Abc.class; //获取Abc类中名为setName的私有方法 Method setName = abcClass.getDeclaredMethod("setName", String.class); setName.setAccessible(true); Object zhangsan = setName.invoke(a, "张三"); System.out.println(a); }
相关 Java反射机制:如何获取类、方法及属性信息 在Java中,反射机制允许我们访问和操作运行时的类、对象以及它们的方法。以下是获取类、方法及属性信息的基本步骤: 1. **获取Class对象**: 首先你需要一个具体 ╰+哭是因爲堅強的太久メ/ 2024年09月11日 14:18/ 0 赞/ 27 阅读
相关 Java获取类信息的三种方法+通过反射获取私有属性 通过下面三种方法,我们可以获取到类的信息,包括类的名称、修饰符、父类、接口、字段、方法等信息。这些信息可以用于进行反射操作,例如动态创建对象、调用方法、访问字段等。 通过反射 柔光的暖阳◎/ 2024年03月22日 19:55/ 0 赞/ 46 阅读
相关 Java反射(三):java获取方法信息 1、基本数据类型,某些关键字也有类类型 package testclass; public class ClassDemo { publi 电玩女神/ 2024年02月17日 23:44/ 0 赞/ 42 阅读
相关 Java反射技术--获取私有属性和方法 1、首先,创建一个类,部分属性和方法设置为private。 package com.example.demo.utils; / @Aut ╰+攻爆jí腚メ/ 2022年11月11日 13:14/ 0 赞/ 206 阅读
相关 Java通过反射获取类的属性值 一 概述 每个定义的类都是java.lang.Class的实例对象,Java在运行时,只会生成一个Class对象。对于关键字new创建的对象为静态加载的对象,而在编译时就 墨蓝/ 2022年09月16日 11:27/ 0 赞/ 247 阅读
相关 java反射获取私有属性和方法demo student对象 package MaReflection; public class Student { private int nu 痛定思痛。/ 2022年05月21日 05:13/ 0 赞/ 240 阅读
相关 Java反射获取私有属性和方法 Student类: //使用反射获取如下类中的属性以及方法,并给属性赋值为:"李四",并调用其中的eat方法打印结果为:李四在吃苹果 // // pu 约定不等于承诺〃/ 2021年12月21日 14:11/ 0 赞/ 655 阅读
相关 反射获取私有属性 //获取学生类的字节码对象 Class clazzClass=Class.forName("com.test2.Student"); //获取学 淡淡的烟草味﹌/ 2021年12月21日 11:39/ 0 赞/ 323 阅读
相关 反射获取私有属性 package com.day14.fanshe; import java.lang.reflect.Field; public c 男娘i/ 2021年12月20日 06:55/ 0 赞/ 321 阅读
还没有评论,来说两句吧...