1 package 反射; 2 3 public class Test反射 { 4 public static void main(String[] args) { 5 System.out.println(Runtime.getRuntime().getClass());//class java.lang.Runtime 6 Test反射 t=new Test反射(); 7 System.out.println(t.getClass());//class 反射.Test反射 8 } 9 }
getClass
1 package 反射; 2 3 public class Test反射 { 4 public static void main(String[] args) { 5 Test反射 t=new Test反射(); 6 //Class类是反射操作的源头,所有的反射都要从此类开始进行。 7 Class<?> cls=t.getClass();//第1种Class类实例化方法,用的很少 8 System.out.println(cls);//class 反射.Test反射 9 Class<?> cls2=Test反射.class;//第2种Class类实例化方法,用的多,使用领域:Hibernate、Mybatis、Spring 10 System.out.println(cls2);//class 反射.Test反射 11 Class<?> cls3=null; 12 try { 13 cls3=Class.forName("反射.Test反射");//第3种Class类实例化方法,用的多。此处要写全名,即加上包名,否则报错。 14 } catch (ClassNotFoundException e) { 15 e.printStackTrace(); 16 } 17 System.out.println(cls3);//class 反射.Test反射 18 } 19 }
Class类3种实例化方式
1 package 反射; 2 class A{ 3 public A(){ 4 System.out.println("调用无参构造实例化对象。"); 5 } 6 @Override 7 public String toString() { 8 return "调用toString()方法。"; 9 } 10 } 11 public class Test反射 { 12 public static void main(String[] args) { 13 Class<?> cls=null; 14 try { 15 cls=Class.forName("反射.A"); 16 } catch (ClassNotFoundException e) { 17 e.printStackTrace(); 18 } 19 Object o=null; 20 try { 21 o=cls.newInstance(); 22 } catch (InstantiationException e) { 23 e.printStackTrace(); 24 } catch (IllegalAccessException e) { 25 e.printStackTrace(); 26 } 27 System.out.println(o); 28 /** 29 * 运行结果: 30 * 调用无参构造实例化对象。 31 * 调用toString()方法。 32 */ 33 } 34 }
利用反射进行实例化对象
时间: 2024-11-10 14:56:26