Java反射机制和Class

一. 实例化Class类的三种方法

 

     Ⅰ. 通过Object类的getClass方法实例化

     Ⅱ.通过Class类中的forName方法实例化

     Ⅲ.通过类.class的方式实例

 

代码:

     package com.ljp.classDemo; class X{ } public class InstantiationClass { public static void main(String[] args) { Class<?> c1=null; Class<?> c2=null; Class<?> c3=null; //通过Class中的forName方法实例化 try { c1=Class.forName("com.ljp.classDemo.X"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } //通过Object类的getClass方法实例化 c2=new X().getClass(); //通过类.class方法的实例化 c3=X.class; System.out.println(c1.getName()); System.out.println(c2.getName()); System.out.println(c3.getName()); } }

 

    其中第Ⅱ中方法用得最多。

 

二. 通过Class对象实例化其他类的方法

 

     我们通常是用new关键字来实例化一个类,但除此之外我们还可以通过反射来实例化类。在此把要实例的类分为有无参构造函数和没有无参构造函数两种来讨论,两种情况的实例方式略有不同。

 

Ⅰ. 含有无参构造函数的类的实例化方法

        主要是通过Class类中的newInstance方法来实现。

 代码:

      package com.ljp.classDemo; class Person{ private String name; private int age; public String getName() { return name; } public int getAge() { return age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public String toString(){ return "姓名:"+name+",年龄:"+age; } } public class InstanceDemo01 { public static void main(String[] args) { Class<?> class1=null; try { class1=Class.forName("com.ljp.classDemo.Person"); } catch (ClassNotFoundException e) { e.printStackTrace(); } Person person=null; try { //实例化对象 person=(Person) class1.newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } person.setName("张三"); person.setAge(20); System.out.println(person); } }

 

Ⅱ. 不含有无参构造的类的实例化方法

        需通过Class对象得到Constructor类,然后再通过Constructor类中的newInstance方法实例化,与Class类中的newInstance方法不同的是,Constructor的newInstance方法可以传入参数

     代码:

          package com.ljp.classDemo; import java.lang.reflect.Constructor; class Person1{ private String name; private int age; public Person1(String name,int age){ this.name=name; this.age=age; } public String getName() { return name; } public int getAge() { return age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public String toString(){ return "姓名:"+name+",年龄:"+age; } } public class InstanceDemo02 { public static void main(String[] args) { Class class1=null; try { class1=Class.forName("com.ljp.classDemo.Person1"); } catch (ClassNotFoundException e) { e.printStackTrace(); } Constructor<?> cst[]=null; //取得Person1类中的构造函数 cst=class1.getConstructors(); Person1 person1=null; //通过Construct类中newInstant方法实例化对象 try { person1=(Person1) cst[0].newInstance("李思",20); } catch (Exception e) { e.printStackTrace(); } System.out.println(person1.toString()); } }

 

你可能感兴趣的:(Java反射机制和Class)