映射构造方法

package Reflect;

public interface Move {
void moveType();
}

package Reflect;

public interface Study {
void studyInfo();
}

package Reflect;

public class Person {
public String name;
public int age;
}

package Reflect;

public class Student extends Person implements Move,Study{
public Student(){
System.out.println(“无参构造”);
}
public Student(String school){
System.out.println(“public有参构造”);
this.school=school;
}
private Student (String name,int age){
System.out.println(“private 有参构造”);
this.name=name;
this.age=age;
}
String school;
public void showInfo(){
System.out.println("学校是: "+this.school);
}
@Override
public void moveType() {
System.out.println(“学习知识”);
}

@Override
public void studyInfo() {
    System.out.println("开车学习");

}

}

package Reflect;

import java.lang.reflect.Constructor;

public class Test1 {
public static void main(String[] args) {
try {
Class clazz = Class.forName(“Reflect.Student”);
// //通过包名.类名的字符串,调用class. forName方法获取指定类的class实例
// Class superClazz=clazz.getSuperclass(); //获取父类
// System.out.println("父类是 "+superClazz.getName());
//
// Class[] interfaces = clazz.getInterfaces();//获取当前类的所有接口
// for (Class c : interfaces){
// System.out.println("接口是 "+c.getName());
// }
// Constructor [] cons = clazz.getConstructors();//获取到类的公有的构造方法
// for (Constructor c : cons){
// System.out.println("构造方法是 "+c.getName());//获取构造方法名称
// //getModifiers()获取修饰符 返回数组1代表public
// System.out.println("构造方法是 "+c.getName()+"修饰符是 "+c.getModifiers());
// Class[] paramClazz = c.getParameterTypes();
// for (Class pc : paramClazz){
// System.out.println("构造方法是 "+c.getName()+“参数类型是 “+pc.getName());
// }
// }
// System.out.println(”----------------------------------------------”);
// Constructor [] cons1 = clazz.getDeclaredConstructors();//获取类的所有构造方法,包括公有和私有的
// for (Constructor c : cons1){
// System.out.println("构造方法是 "+c.getName());//获取构造方法名称
// //getModifiers()获取修饰符 返回数组2代表private
// System.out.println("构造方法是 "+c.getName()+"修饰符是 "+c.getModifiers());
// Class[] paramClazz = c.getParameterTypes();
// //获取构造方法的参数类型,有几个参数数组的元素就有几个
// for (Class pc : paramClazz){
// System.out.println("构造方法是 "+c.getName()+"参数类型是 "+pc.getName());
// }
// }
//如何用反射的构造方法来创建对象
Object obj = clazz.newInstance(); //相当于调用student类的无参公有的构造方法
// Student stu = (Student) obj;

// Constructor c = clazz.getConstructor(String.class);
// //指定获取有一个参数并且为string类型的公有的构造方法
// Student stu1 = (Student) c.newInstance(“aa”);
// //newInstance实例化对象,相当于调用public Student(String school)
// System.out.println(stu1.school);
//通过反射机制,可以强制的调用私有的构造方法
Constructor c = clazz.getDeclaredConstructor(String.class,int.class);//指定获取有两个参数 String.class,int.class
c.setAccessible(true);//解除私有的封装,下面就可以对这个私有方法强制
Student stu = (Student)c.newInstance(“张三”,18);
//指定获取有两个参数
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();

    }
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值