public class ReflexAndClass { public static void main(String[] args) throws Exception { /** * 获取Class对象的三种方式 * 1 Object ——> getClass(); * 2 任何数据类型(包括基本数据类型)都有一个静态的class属性 * 3 通过Class类的静态方法:forName(String className)(常用) * * * 注意:在运行期间,一个类,只有一个Class对象产生。 * 三种方式常用第三种,第一种对象都有了还要反射干什么。第二种需要导入类的包,依赖太强,不导包就抛编译错误。 * 一般都第三种,一个字符串可以传入也可写在配置文件中等多种方法。 * @throws Exception */ //第一種 getClass Student stu = new Student(); Class stuClass1 = stu.getClass(); System.out.println(stuClass1.getName()); //第二種 class属性 Class stuClass2 = Student.class; System.out.println(stuClass2==stuClass1); //第三種 try { Class stuClass3 = Class.forName("reflex.Student");//student的路径 System.out.println(stuClass3); } catch (ClassNotFoundException e) { e.printStackTrace(); } /**通过Class对象可以获取某个类中的:构造方法、成员变量、成员方法;并访问成员; * * 1.获取构造方法: * 1).批量的方法: * public Constructor[] getConstructors():所有"公有的"构造方法 * public Constructor[] getDeclaredConstructors():获取所有的构造方法(包括私有、受保护、默认、公有) * * 2).获取单个的方法,并调用: * public Constructor getConstructor(Class... parameterTypes):获取单个的"公有的"构造方法: * public Constructor getDeclaredConstructor(Class... parameterTypes):获取"某个构造方法"可以是私有的,或受保护、默认、公有; * * 调用构造方法: * Constructor-->newInstance(Object... initargs) * 获取私有的构造方法的时候需要使用setAccessible设置访问权限为true才能进行构造,否则出现异常 */ Class<?> clazz = Class.forName("reflex.Student"); Constructor[] public1 = clazz.getConstructors(); System.out.println("公有構造方法"); for(Constructor con : public1){ System.out.println(con); } Constructor[] public2 = clazz.getDeclaredConstructors(); System.out.println("所有構造方法"); for(Constructor con : public2){ System.out.println(con); } Constructor con = clazz.getConstructor(null); System.out.println("公有無參:" + con); Constructor cons = clazz.getDeclaredConstructor(String.class); System.out.println("所有無參公有構造方法"+cons); Object name = clazz.getDeclaredConstructor(String.class).newInstance("chen"); Student s = new Student(); System.out.println("名稱為:" + name); //调用构造方法 Object obj = con.newInstance(); // System.out.println("obj = " + obj); // Student student = (Student)obj; } }
public class Student { //---------------构造方法------------------- //(默认的构造方法) Student(String str){ System.out.println("(默认)的构造方法 s = " + str); } //无参构造方法 public Student(){ System.out.println("调用了公有、无参构造方法执行了。。。"); } //有一个参数的构造方法 public Student(char name){ System.out.println("姓名:" + name); } //有多个参数的构造方法 public Student(String name ,int age){ System.out.println("姓名:"+name+"年龄:"+ age);//这的执行效率有问题,以后解决。 } //受保护的构造方法 protected Student(boolean n){ System.out.println("受保护的构造方法 n = " + n); } //私有构造方法 private Student(int age){ System.out.println("私有的构造方法 年龄:"+ age); } }
原文地址:https://www.cnblogs.com/ch94/p/10287451.html
时间: 2024-10-11 04:00:20