一 怎么获取类的实例
1.例子
package com.reflet;
/**
* Created by wq on 2017/8/18.
*/
class Student{
private String name;
private Integer age;
/* public Student(String name,Integer age){
this.name=name;
this.age=age;
System.out.print("Student类的构造方法");
}*/
@Override
public String toString() {
return "Student类的toString方法";
}
}
public class ReflectDemo {
public static void main(String args[]) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
Class<?> cls = Class.forName("com.reflet.Student");
Object obj = cls.newInstance();
}
}
Object obj = cls.newInstance(); 默认调用的是无参的构造函数
2.获取一个类中全部的构造函数
package com.reflet;
import java.lang.reflect.Constructor;
/**
* Created by wq on 2017/8/18.
*/
public class RefletStringDemo {
public static void main(String agrs[]) throws ClassNotFoundException {
Class<?> cls = Class.forName("java.lang.String");
//取得全部构造方法
Constructor<?>[] cons = cls.getConstructors();
for (int x=0;x<cons.length;x++){
System.out.println(cons[x]);
}
//?怎么调用指定的构造方法
}
}
3.怎样调用指定参数的构造函数呢
Class<?> cls = Class.forName("com.reflet.Student");
//指定参数的类型
Constructor<?> cons = cls.getConstructor(String.class,Integer.class);
Object obj =cons.newInstance("TOM",20);
二。怎么调用类之中可以使用的方法呢?
(1父类继承而来的方法2.本类自定义的方法)
package com.reflet;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* Created by wq on 2017/8/18.
*/
class Student implements Message{
public void fun(){};
public void print(){}
@Override
public void get() {
}
}
interface Message{
public void get();
}
public class ReflectDemo {
public static void main(String args[]) throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException {
Class<?> cls = Class.forName("com.reflet.Student");
// 取得全部方法 包括继承来的方法
Method met[] =cls.getMethods();
for(int x=0;x<met.length;x++){
System.out.println(met[x]);
}
//只取得本类中的方法
Method meth[] =cls.getDeclaredMethods();
for(int x=0;x<meth.length;x++){
System.out.println(meth[x]);
}
}
}
package com.reflet;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
/**
* Created by wq on 2017/8/18.
*/
class Student implements Message{
public void fun(){};
public void print(){}
@Override
public void get() {
}
}
interface Message{
public void get();
}
public class ReflectDemo {
public static void main(String args[]) throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException {
Class<?> cls = Class.forName("com.reflet.Student");
Method met[] =cls.getMethods();
for(int x=0;x<met.length;x++){
//取得修饰符 返回的是修饰符对应的代码
System.out.print(met[x].getModifiers()+",");
//取得修饰符名称
System.out.print(Modifier.toString( met[x].getModifiers())+",");
//取得返回值的类型名称
System.out.println(met[x].getReturnType().getSimpleName());
Class<?> params[] =met[x].getParameterTypes();
if(params.length>0){ //表示有参数
for (int y=0;y<params.length;y++){
System.out.println(params[y].getSimpleName()+" arg- "+y+",");
if (y<params.length-1){ //还有参数 就输出逗号
System.out.println(",");
}
}
}
//取得方法的名称
System.out.print(met[x].getName());
System.out.println();
}
Method meth[] =cls.getDeclaredMethods();
for(int x=0;x<meth.length;x++){
System.out.println(meth[x]);
}
}
还有取得异常等等不做描述。。。
}