java反射(获取某个类或者某个对象所对应的Class对象的常用3中方法)

来源:互联网 发布:武科大 知乎 编辑:程序博客网 时间:2024/04/28 11:48

1.使用Class类的静态方法 forName:   Class.forName("java.lang.Object");

public class TestClassForName
{
public static void main(String[] args) throws Exception
{
Class<?> classtype = Class.forName("java.lang.Object");//获得Clss对象


Method[] methods = classtype.getDeclaredMethods();


for(Method method: methods)
{
System.out.println(method);
}
}
}


2.使用类的,class语法: XXX.class


public class TestClass 
{
public int addMethod(int a, int b)
{
return a + b;
}


public String echo(String message)
{
return "Hell:"+message;
}

public static void main(String[] args) throws Exception
{
Class<?> classType = InvokeTester.class;//获得Class对象


Object invokeTester = classType.newInstance();


Method addMethod = classType.getMethod("addMethod",new Class[]{int.class,int.class});


Object result1 = addMethod.invoke(invokeTester,new Object[]{1,3});


System.out.println(result1);


System.out.println("==============================");


Method echoMethod = classType.getMethod("echo",new Class[]{String.class});


Object result2 = echoMethod.invoke(invokeTester,new Object[]{"辛华轩"});


System.out.println((String)result2);
}
}



3.使用对象的getClass()方法:

String s = "XXX";

Class<?> class = XXX.getClass();



-----------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------


若想通过类的不带参数的构造方法来生成对象,我们有两种方式:

A:

先获得Class对象,然后通过该Class对象的newInstance()方法直接生成即可:

Class<?> classType = String.class;

Object obj = classType.newInstance();


B:

先获得Class对象,然后通过该对象获得对应的ConStructor对象,再通过该ConStructor对象的newInstance()方法生成:

Class<?> classType = Customer.class;

Constructor cons = ClassType.getConstructor(new Class[] {});

Object obj = cons.newInstance(new Object[]{});



若想通过类的带参数的构造方法生成对象,只能使用下面一种方式:

Class<?> classType = Customer.class;

Constructor cons = ClassType.getConstructor(new Class[] {XXXA.class,XXXB.clss});

Object obj = cons.newInstance(new Object[]{xxxA,xxxB});


原创粉丝点击