栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java学习小结之反射

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java学习小结之反射

反射
  • 通过类名可以获取该类下的属性,方法,构造方法等
  • 动态地获取类的信息
  • 运行的时候,获取类的信息并创建对象,调用方法
Class类型

java.lang.Class

  • JVM运行的时候,把类加载到内存中,同时也会自动为这个类创建一个Class类型的对象
  • 该对象封装了类的所有信息,包括属性方法,构造方法等
  • 通过getXXX方法,获取该Class类型对象的封装信息
获取对象的三种方式 1.类名.class

如:

Class studentClass = Student.class;
2.Class.forName(‘类的路径’)

如:

String className = "demo2.Student";
Class aClass = Class.forName(className);
3.对象.getClass();

如:

Student student = new Student();
Class c=student.getClass();
反射常用方法
  • 获取成员变量
  • 获取属性
  • 获取方法
  • 获取构造方法
  • 获取接口
  • 获取内部类 等等

举例:

package demo2;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class StudentTest {
    public static void main(String[] args) throws ClassNotFoundException {
    //    获取Class类型对象
    //    类名.class
        Class studentClass = Student.class;
    //    Class.forName("类的路径")
        String className = "demo2.Student";
        Class aClass = Class.forName(className);//可能异常:类找不到,或者类不存在
        System.out.println(aClass.getName());
    //    对象
        System.out.println("获取对象:");
        Student student = new Student();
        Class c=student.getClass();

    //    获取成员变量
        System.out.println("获取成员变量:");
        Field[] fields = aClass.getFields();
        for (Field field : fields) {
            System.out.println(field);
        }
    //    获取属性
        System.out.println("获取成员属性:");
        Field[] declaredFields = aClass.getDeclaredFields();
        for (Field declaredField : declaredFields) {
            declaredField.setAccessible(true);
            System.out.println(declaredFields);
            System.out.println(declaredField.getName());
        }
    //    获取方法
        System.out.println("获取成员方法:");
        Method[] methods = aClass.getMethods();
        for (Method method : methods) {
            System.out.println(method.getName());
        }

    //    获取构造方法
        System.out.println("获取构造方法:");
        Constructor[] constructors = aClass.getConstructors();
        for (Constructor constructor : constructors) {
            System.out.println(constructor);
        }
    //    获取接口
        System.out.println("获取接口:");
        Class[] interfaces = aClass.getInterfaces();
        for (Class anInterface : interfaces) {
            System.out.println(anInterface);
        }
    //    获取内部类
        System.out.println("获取内部类:");
        Class[] declaredClasses = aClass.getDeclaredClasses();
        for (Class declaredClass : declaredClasses) {
            System.out.println(declaredClass);
        }
    }
}
newInstance创建对象

使用时要求:

  1. 类必须已经记载运行在虚拟机中
  2. 类已经连接,需要Class.forName方法完成,不需要new方法创建
newInstance和new区别
  • new可以用有参构造和无参构造,强类型,效率高,可以调用任何public修饰的构造方法
  • newInstance调用无参构造,弱类型,效率低
内省inspector
  • 基于反射,对java.bean类属性事件的一种缺省处理方式
  • 只要类中有setXxx,getXxx方法,其中get方法没有参数,有返回值,set方法中有参数无返回值
  • 满足上面两点,内省机制认为Xxx是属性
  • 首字母恢复小写
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/276305.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号