个人网站设计总结佛山网红打卡点
2026/4/2 15:37:44 网站建设 项目流程
个人网站设计总结,佛山网红打卡点,当铺网站建设方案,下载搭建网站软件下载反射反射允许对成员变量、成员方法和构造方法的信息进行编程访问。简单来说就是获取类里所有的信息。IDEA里自动提示的功能就是通过反射实现的。获取class对象的三种方式1.Class.forName(全类名)2.类名.class3.对象.getclass()这三种方式对应Java当中三个不同的阶段…反射反射允许对成员变量、成员方法和构造方法的信息进行编程访问。简单来说就是获取类里所有的信息。IDEA里自动提示的功能就是通过反射实现的。获取class对象的三种方式1.Class.forName(全类名)2.类名.class3.对象.getclass()这三种方式对应Java当中三个不同的阶段。如果我们想创建一个类对象分为以下三个阶段1.编写.java文件并将其编译为.class字节码文件。在这个阶段代码没有被加载到内存中只是在硬盘上进行操作。这个阶段是源代码阶段。源代码阶段使用第一种方式获取class对象2.接下来要运行代码。将.class字节码文件加载到内存当中。这个阶段是加载阶段。加载阶段使用第二种方式3.我们可以在内存中new一个对象这个阶段是运行阶段。运行阶段使用第三种方式。public class ReflectionDemo1 { public static void main(String[] args) throws ClassNotFoundException { //1.第一种方式 //全类名包名类名选中类名右键找到复制/粘贴特殊点击复制引用 //最为常用 Class Clazz1 Class.forName(learn.reflection.Student); ​ //打印 System.out.println(Clazz1); ​ //2.第二种方式一般更多的是当作参数进行传递 Class Clazz2 Student.class; ​ //验证 System.out.println(Clazz1 Clazz2); ​ //3.第三种方式 //当我们已经有了这个类的对象时才能使用 Student stu new Student(); Class Clazz3 stu.getClass(); ​ //验证 System.out.println(Clazz1 Clazz2); System.out.println(Clazz2 Clazz3); } }利用反射获取构造方法Class类中用于获取构造方法的方法方法名称说明Constructor?[] getConstructors()返回所有公共构造方法对象的数组Constructor?[] getDeclaredConstructors()返回所有构造方法对象的数组ConstructorTgetConstructor(Class?...parameterTypes)返回单个公共构造方法对象ConstructorTgetDeclaredConstructor(Class?...parameterTypes)返回单个构造方法对象Constructor类中用于创建对象的方法方法名称说明T newInstance(Object...initargs)根据指定的构造方法创建对象setAccessible(boolean flag)设置为true表示取消访问检查新增几个构造函数public class Student { private String name; private int age; ​ public Student() { } ​ public Student(String name) { this.name name; } ​ protected Student(int age) { this.age age; } ​ private Student(String name, int age) { this.name name; this.age age; } ​ public String getName() { return name; } ​ public void setName(String name) { this.name name; } ​ public int getAge() { return age; } ​ public void setAge(int age) { this.age age; } ​ Override public String toString() { return Student{ name name \ , age age }; } }public class ReflectionDemo1 { public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { //1.获取Student类的class字节码文件对象 Class clazz Class.forName(learn.reflection.Student); ​ //2.获取public构造方法 Constructor[] cons clazz.getConstructors(); for (Constructor con : cons) { System.out.println(con); } ​ System.out.println(-------------); ​ //3.获取所有构造方法 Constructor[] dc clazz.getDeclaredConstructors(); for (Constructor con : dc) { System.out.println(con); } ​ System.out.println(-------------); ​ //获取单个构造方法空参构造 System.out.println(clazz.getDeclaredConstructor()); ​ //获取单个构造方法参数为一个String类型变量的构造函数 //括号中的参数与想要获得的构造方法的参数对应 System.out.println(clazz.getDeclaredConstructor(String.class)); ​ //获取单个构造方法参数为一个String类型和一个int类型变量的构造函数 Constructor TempCon clazz.getDeclaredConstructor(String.class, int.class); System.out.println(TempCon); ​ System.out.println(-------------); ​ //获取权限修饰符.getModifiers方法 //public为1private为2protected为4 //static为8final为16synchronized为32 //用的都是2的n次幂 System.out.println(TempCon.getModifiers()); ​ System.out.println(-------------); ​ //获取参数 Parameter[] parameters TempCon.getParameters(); for (Parameter parameter : parameters) { System.out.println(parameter); } ​ System.out.println(-------------); ​ //通过反射创建对象 //由于两个参数的构造方法为priavte //要先临时取消权限校验 TempCon.setAccessible(true); Student stu (Student) TempCon.newInstance(张三,18); System.out.println(stu); } }利用反射获取成员变量Class类中用于获取成员变量的方法方法名称说明Field[] getFields()返回所有公共成员变量对象的数组Field[] getDeclaredFields()返回所有成员变量对象的数组Field getField(String name)返回单个公共成员变量对象Field getDeclaredField(String name)返回单个成员变量对象Field类中用于创建对象的方法方法名称说明void set(Object obj, Object value)赋值Object get(Object obj)获取值修改Student类的内容public class Student { private String name; private int age; public String gender; ​ public Student(String name, int age, String gender) { this.name name; this.age age; this.gender gender; } ​ public Student() { } ​ public String getName() { return name; } ​ public void setName(String name) { this.name name; } ​ public int getAge() { return age; } ​ public void setAge(int age) { this.age age; } ​ public String getGender() { return gender; } ​ public void setGender(String gender) { this.gender gender; } ​ Override public String toString() { return Student{ name name \ , age age , gender gender \ }; } }public class ReflectionDemo1 { public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchFieldException { //1.获取Student类的class字节码文件对象 Class clazz Class.forName(learn.reflection.Student); ​ //2.获取public成员变量 Field[] fields1 clazz.getFields(); ​ for (Field field : fields1) { System.out.println(field); } ​ System.out.println(-------------); ​ //3.获取所有成员变量 Field[] fields2 clazz.getDeclaredFields(); ​ for (Field field : fields2) { System.out.println(field); } ​ System.out.println(-------------); ​ //4.获取单个的成员变量 Field name clazz.getDeclaredField(name); System.out.println(name); ​ System.out.println(-------------); ​ //5.获取权限修饰符 System.out.println(name.getModifiers()); ​ System.out.println(-------------); ​ //6.获取成员变量名 System.out.println(name.getName()); ​ System.out.println(-------------); ​ //7.获取成员变量类型 System.out.println(name.getType()); ​ System.out.println(-------------); ​ //8.获取成员变量记录的值 Student s new Student(张三,18,男); name.setAccessible(true); Object value name.get(s); System.out.println(value); ​ System.out.println(-------------); ​ //9.修改对象记录的值 name.set(s,凯文); System.out.println(s); } }利用反射获取成员方法方法名与前面类似改成Method而已。有几点需要注意1.getMethods方法可以获取所有public的方法对象包括父类中所有的public方法。getDeclaredMethods则不能获取父类的但可以获取私有的和前面一样2.获取方法抛出的异常Class[] exceptionTypes m.getExceptionTypes(); for (Class exceptionType : exceptionTypes) { System.out.println(exceptionType); }3.方法运行Student s new Student(); clazz.getMethod(eat, String.class).invoke(s,汉堡);invoke第一个参数表示方法的调用者第二个参数表示在调用方法的时候传递的实际参数

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询