import java.lang.reflect.Method;
import java.util.Arrays;
//反射(动态的)
public class Dome1 {
public static void main(String[] args) throws Exception {
//1.需要得到类的全路径名[全路径名=包路径+类名]
String string=“day3.Student”;//限定名
//2.通过Class。forName()生成了Student类的字节码文件对象
Class<?> studentClass = Class.forName(string);//?:数据类型不确定
//3.可以调用Class newInstance //studentConstuctor就是== Student stu=new Student();
Object studentConstuctor = studentClass.newInstance();
//4.反射获取类里面[成员方法] [本类+父类所有的public修饰的方法Method对象!]
/* //–》生成类里面的方法
//studentClass(字节码对象)
Method[] methods = studentClass.getMethods();//获取父类的
for (Method method : methods) {
System.out.println(method);
}/
Method[] methods = studentClass.getDeclaredMethods();//–》暴力反射
/
* 暴力反射:
* 获取的是[本类 所有的方法Method对象! 包括私有]
/
for (Method method : methods) {
if (“defalutMethod”.equals(method.getName())) {
//打印名字
System.out.println(method.getName());
//打印权限修饰符-----Modifier(解码)
System.out.println(method.getModifiers());
//返回值类型
System.out.println(method.getReturnType());
//参数列表
System.out.println(Arrays.toString(method.getParameterTypes()));
//调用方法 (method–对象)
method.invoke(studentConstuctor,“郭靖”);
/
* 不定长参数:
* add(int a,int…sss){}
* 1.如果你没有想要传进去的值,那么可以不写
* 2.自动封装成一个数组
* 3.
*/
}
}
}
}
class Student {
public String name;
protected int age;
int leg;
private String sex;
//构造方法
public Student() {
}
protected Student(String name){
this.name=name;
}
Student(int leg,String sex){
this.sex = sex;
this.leg = leg;
}
private Student(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
//普通方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getLeg() {
return leg;
}
public void setLeg(int leg) {
this.leg = leg;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public void publicMethod(){
System.out.println("公共方法被调用了");
}
protected void protectedMethod(String str){
System.out.println(str);
System.out.println("受保护的方法被调用了。。");
}
void defalutMethod(String name){
System.out.println("默认的方法被调用了。。"+name);
}
@SuppressWarnings("unused")
private void privateMethod(String name,int age,String bb){
System.out.println(name);
System.out.println("私有的方法被调用了...");
}
}