三、Java中级--4、java反射

1、什么是反射

动态的加载类,在使用的时候加载进内,通过Class.forName("")将其加载。

示例1:


结构

Person类:

package javastudy;

public class Person {
    int age;
    String name;
    public void display(){
        String s=String.format("姓名=%s,年龄=%d",name,age);
        System.out.println(s);
    }
}

Testit:

package javastudy;

public class Testit {

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        // TODO Auto-generated method stub
        Class c=Class.forName("javastudy.Person");  //将Person类加载进进来(内存),此时c相当于是Person;是泛型,理解为通配符
        Person zhang=(Person)c.newInstance();//新建对象,将object转换为Person
        zhang.name="jack";
        zhang.age=20;
        zhang.display();
    }
}

2、反射的其他作用

  • 获得这个类实现了哪些接口 getInterfaces
  • 得到其父类 getSuperclass
  • 得到所有的构造函数 getConstructors
    示例2:得到构造函数


    三、Java中级--4、java反射_第1张图片
    结构

    Person类

package javastudy;

public class Person {
    int age;
    String name;
    public void display(){
        String s=String.format("姓名=%s,年龄=%d",name,age);
        System.out.println(s);
    }
    public Person(){
        
    }
    public Person(String name,int age){
        this.name=name;
        this.age=age;
    }
}

Testit类

package javastudy;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class Testit {

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        // TODO Auto-generated method stub
        Class c=Class.forName("javastudy.Person");  //将Person类加载进进来(内存),此时c相当于是Person;是泛型,理解为通配符
//      Person zhang=(Person)c.newInstance();//新建对象,将object转换为Person
//      zhang.name="jack";
//      zhang.age=20;
//      zhang.display();
        Constructor[] cons=c.getConstructors();  //数组形式存放Person存在的构造函数,可能包含有多个
        Person wang=(Person) cons[1].newInstance("jerry",30);//取数组中的[1]第2个函数,因此要将Person中定义为public
        wang.display();
    }
}

示例3:得到此类实现了哪些接口
新增加一个interface


三、Java中级--4、java反射_第2张图片
结构

Animal接口

package javastudy;

public interface Animal {

}

Person类

package javastudy;
public class Person implements Animal{
    }

Testit类

package javastudy;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class Testit {

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        // TODO Auto-generated method stub
        Class c=Class.forName("javastudy.Person");  //将Person类加载进进来(内存),此时c相当于是Person;是泛型,理解为通配符
        Class[] inter=c.getInterfaces();
        for(int i=0;i
执行结果

你可能感兴趣的:(三、Java中级--4、java反射)