Java之类的构造器(反射)
反射:
Java反射机制:指的是在Java程序运行状态中,对于任何一个类,都可以获得这个类的所有属性和方法;对于给定的一个对象,都能够调用它的任意一个属性和方法。这种动态获取类的内容以及动态调用对象的方法称为反射机制。Java的反射机制允许在对类未知的情况下,获取类相关信息的方式变得更加多样灵活,调用类中相应方法,是Java增加其灵活性与动态性的一种机制。
Java反射机制主要提供了以下功能:
- 在运行时判断任意一个对象所属的类;
- 在运行时构造任意一个类的对象;
- 在运行时判断任意一个类所具有的成员变量和方法;
- 在运行时调用任意一个对象的方法。
Class类中存在以下几个重要的方法:
- getName():
一个Class对象描述了一个特定类的特定属性,而这个方法就是返回String形式的该类的简要描述。
- newInstance()
该方法可以根据某个Class对象产生其对应类的实例。需要强调的是,它调用的是此类的默认构造方法。
- getClassLoader()
返回该Class对象对应的类的类加载器。
- .getComponentType()
该方法针对数组对象的Class对象,可以得到该数组的组成元素所对应对象的Class对象。例如:
int[] ints = new int[]{1,2,3};
Class class1 = ints.getClass();
Class class2 = class1.getComponentType();
而这里得到的class2对象所对应的就应该是int这个基本类型的Class对象。
- getSuperClass()
返回某子类所对应的直接父类所对应的Class对象。
- isArray()
判定此Class对象所对应的是否是一个数组对象。
小实例:
运行时输入类名创建对象,然后输入方法名,该对象调用该方法;
- 利用Scanner来获取输入的类的名字
注意:要调用的类写在包内的话,输入时的格式为:包名.类名
Scanner sc = new Scanner(System.in);System.out.println("请输入类名:");
String classname = sc.nextLine();// 获取类名;
2..根据获取到的类名,创建类( 调用Class.forName(className)方法),该过程会抛出一个没有找到类的一个异常;
Class c;//要调用的类class写在包内的话,要加上包.类;
try {
c = Class.forName(classname);
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
3.根据我们创建的类,创建构造器(调用getConstructo()方法);
Constructor con = c.getConstructor(int.class);
getConstructor方法里面需要的参数类型,是你要调用的构造方法的参数类型。如果是String型的参数的话,那么该方法写的就是 c.getConstructor(String.class)
4. 获取要传给需要调用的构造方法的参数值
System.out.println("请输入构造的参数");String cna=sc.nextLine();
5.根据构造器创建对象;
Object o=con.newInstance(Integer.parseInt(cna));//Integer.parseInt(cna),把string类型的数据,转换为int型
6.对象创建好之后,就可以调用方法了,首先是输入我们的方法名
System.out.println("请输入方法名:");String name = sc.nextLine();// 获取输入的方法名;
7.得到方法名之后,获取方法。
Method me=c.getMethod(name, int.class);//getMethod(方法名, 方法的参数类型)
8.在对象上面调用方法;
me.invoke(o,14);//me.invoke(对象,方法的参数);
这样一个动态绑定的过程就完成了。当然这个过程会有很多的异常需要抛出。
以上是 Java之类的构造器(反射) 的全部内容, 来源链接: utcz.com/z/392108.html