java开发:反射的理解

本文介绍了Java反射机制,包括如何在运行时获取类的所有属性和方法,以及类的类对象。同时,对比了静态加载和动态加载的区别,强调反射是动态加载的特性。通过示例说明反射在简单工厂模式优化中的应用,讨论了反射的优缺点,并指出在实际开发中,如Spring框架如何利用配置文件避免频繁的代码修改。
摘要由CSDN通过智能技术生成

什么是反射:

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

什么是类的类对象:

在面向对象的世界里,万物皆对象。类也是对象,它是java.lang.Class类的实例对象。我们可以通过反射拿到所有类的类对象。通过这个类的类对象我们可以获取这个类的所有信息。

什么静态加载和动态加载

我们知道程序是运行在虚拟机当中,我们.java文件会编译后变成.class文件存放在虚拟机的堆中,而我们的程序是运行在内存当中,静态加载是指在编译时期就必须确定程序需要的所有类的信息,像new User()就是静态加载,如果User这个对象不存在则编译肯定不会通过。(因为User.java根本不存在,编译后虚拟机当中肯定没有它的class文件,而静态加载就是在编译时期就要将所有需要使用到的类的信息都放到内存中,即它要拿到类的所有信息)
而反射属于动态加载,在运行时刻才会确定类的信息

验证:

 interface Fruit {
   
    void getName();
}

public class Orange implements Fruit{
   
    @Override
    public void getName() {
   
        System.out.println("我是橙子");
    }
}

public class Apple implements Fruit{
   
    @Override
    public void getName() {
   
        System.out.println("我是苹果");
    }

}
 Apple  apple = (Apple) Class.forName("com.example.reflectionapplication.Orange").newInstance();
  apple.getName();

正常我们Apple apple = new Orange()编译时就会报异常。如上通过反射创建Orange对象赋值给Apple对象,编译可以通过,运行时就才抛异常了。因此证明了反射是动态加载。

**反射我们可以用在哪里

继续引用上面的例子,我们使用简单工厂模式和工厂模式来创建对象

简单工厂模式


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值