每一个类的Class对象都只有一个 。
示例代码:
package com.test.code.reflex;public class Student {}public class Demo01 {public static void main(String[] args) throws ClassNotFoundException {// 获得Student类对应的Class对象Class<Student> c1 = Student.class;// 创建学生对象Student stu = new Student();Class<? extends Student> c2 = stu.getClass();System.out.println(c1 == c2);// 通过Class类的静态方法获得: static Class forName("类全名")Class<?> c3 = Class.forName("com.test.code.reflex.Student");System.out.println(c1 == c3);System.out.println(c2 == c3);}}
Demo01运行结果:
文章插图
(2)Class类常用方法
String getSimpleName(); 获得类名字符串:类名 String getName(); 获得类全名:包名+类名 T newInstance() ; 创建Class对象关联类的对象
示例代码:public class Demo02 {public static void main(String[] args) throws IllegalAccessException, InstantiationException {// 获得Class对象Class<Student> c = Student.class;// 获得类名字符串:类名System.out.println(c.getSimpleName());// 获得类全名:包名 + 类名System.out.println(c.getName());// 创建对象Student stu = (Student)c.newInstance();System.out.println(stu);}}
Demo02运行结果:文章插图
4.反射之操作构造方法(1)Constructor类概述反射之操作构造方法的目的:获得Constructor对象来创建类的对象 。
Constructor类概述:类中的每一个构造方法都是一个Constructor类的对象
(2)Class类中与Constructor相关的方法
1. Constructor getConstructor(Class... parameterTypes)(3)Constructor对象常用方法
* 根据参数类型获得对应的Constructor对象 。
* 只能获得public修饰的构造方法
2. Constructor getDeclaredConstructor(Class... parameterTypes)
* 根据参数类型获得对应的Constructor对象
* 可以是public、protected、(默认)、private修饰符的构造方法 。
3. Constructor[] getConstructors()
* 获得类中的所有构造方法对象 , 只能获得public的
4. Constructor[] getDeclaredConstructors()
* 获得类中的所有构造方法对象
* 可以是public、protected、(默认)、private修饰符的构造方法 。
1. T newInstance(Object... initargs)"—— 根据指定的参数创建对象示例代码:
2. void setAccessible(true) 设置"暴力反射"——是否取消权限检查 , true取消权限检查 , false表示不取消
public class Student {private String name;private String sex;private int age;//公有构造方法public Student(String name, String sex, int age) {this.name = name;this.sex = sex;this.age = age;}//私有构造方法private Student(String name, String sex) {this.name = name;this.sex = sex;}}
public class Demo03 {/*** Constructor[] getConstructors()*获得类中的所有构造方法对象 , 只能获得public的* Constructor[] getDeclaredConstructors()*获得类中的所有构造方法 , 包括private修饰的*/@Testpublic void test03(){// 获得Class对象Class<Student> c = Student.class;// 获得类中的所有构造方法对象 , 只能是public修饰的Constructor<?>[] cons_one = c.getConstructors();for (Constructor<?> con : cons_one) {System.out.println(con);}System.out.println("--------------------------------");// 获取类中所有的构造方法 , 包括public、protected、(默认)、private的Constructor<?>[] cons_two = c.getDeclaredConstructors();for (Constructor<?> con : cons_two) {System.out.println(con);}}/*** Constructor getDeclaredConstructor(Class... parameterTypes)*根据参数类型获得对应的Constructor对象*/@Testpublic void test02() throws Exception {// 获得Class对象Class<Student> c = Student.class;// 获得两个参数构造方法对象Constructor<Student> con = c.getDeclaredConstructor(String.class, String.class);// 取消权限检查(暴力反射)con.setAccessible(true);// 根据构造方法创建对象Student stu = con.newInstance("liuyifei", "女");System.out.println(stu);}/*** Constructor getConstructor(Class... parameterTypes)*根据参数类型获得对应的Constructor对象*/@Testpublic void test01() throws Exception {// 获得Class对象Class<Student> c = Student.class;// 获得无参数构造方法对象 注意:记得在Student类中加无参构造方法 , 不然会报错Constructor<Student> con = c.getConstructor();// 根据构造方法创建对象Student student = con.newInstance();System.out.println(student);// 获得有参数的构造方法对象Constructor<Student> con2 = c.getConstructor(String.class, String.class, int.class);// 创建对象Student stu2 = con2.newInstance("jack", "男", 18);System.out.println(stu2);}}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 春中的薄烟的读音 薄烟的读音
- 项目管理|企业中的一个好员工为什么开始混日子了
- 钱币|唐继尧双旗币为何可以成为钱币中的黑马
- 傻子谈恋爱 恋爱中的人不是诗人就是傻子
- 娱乐圈|娱乐圈中的“关系户”,无颜值、无实力,却能接戏接到手软
- 济南的秋天阅读理解 济南的秋天
- 韩国惊悚悬疑电视剧 韩国惊悚片
- 无缝接轨的恋爱状态是对的吗 恋爱无缝衔接是不是就算劈腿 工作中的无缝衔接什么意思
- 成语一衣带水中的水原指 成语一诺千金最早是形容西汉
- 生活中的熵增原理 熵增和熵减