java——反射中的Class类

Class类是反射机制中非常重要的类,得到Class类的三种方法:

  1. Class.forName(类名)

  2. 类名.Class

  3. 实例.getClass()

代码如下


public class ClassTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			Class a=Class.forName("B");
			A a1=(A)a.newInstance();
			a1.f();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		// TODO Auto-generated method stub

	}

}
class A{
	
	public void f(){
		System.out.println("Class A");
	}
}
 class B extends A{
	public void f(){
		 System.out.println("Class B");
	 }
 }

但是如果该类构造函数不是默认无参数的,则必须获得这个构造器,如还用上述代码则会报InstantiationException异常。带参的构造如下

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;


public class ClassTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			Class a=Class.forName("B");
			Method[] m=a.getMethods();
			Constructor[] cn=a.getConstructors();
			Field[] f=a.getFields();
			Constructor cons=B.class.getConstructor(int.class);
			A a1=(A) cons.newInstance(1);
			a1.f();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		// TODO Auto-generated method stub

	}

}
class A{
	int i;
	public A(int i){
		this.i=i;
	}
	public void f(){
		System.out.println("Class A");
	}
}
 class B extends A{
	 public B(int i) {
		super(i);
		// TODO Auto-generated constructor stub
	}

	public void f(){
		 System.out.println("Class B");
	 }
 }

Class类还有其他方法:得到成员变量、得到方法、得到构造方法

                    Method[] m=a.getMethods();

                    Constructor[] cn=a.getConstructors();

                    Field[] f=a.getFields();

Java创建对象的方法:

  1. 通过new来创建
  2. 通过反射机制的Class
  3. 通过clone()方法
  4. 通过反序列化方式

猜你喜欢

转载自blog.csdn.net/qq_33605294/article/details/87943641