反射:Class的实例化

反射是Java中的一种特性,能够从class中获取该实例化对象的信息包括方法以及属性。

通俗点来讲:我们使用类的时候通常是这个顺序:

import 该类 —> 实例化该类【使用 new 关键字】–>使用其方法

而反射是

获取实例化Class对象 —> 使用其方法或者获取其信息

就是可以通过已实例化的Class对象获取对应的类的属性、方法、包等信息

用个示例来讲就是:顺着来是需要找到你的家package,然后再在你的家找到你,然后反过来就是,我知道了你的名字【包.类】就能把你的所有信息都搞到【这样讲就有点像推理的感觉】

反射主要用到的类就是Class、Constructor[构造器]、Method[方法]、Field[属性],后面三种都可以通过Class获得

Class类

public final class Class<T> implements Serializable, GenericDeclaration, Type, AnnotatedElement

这个类可以获取类的源信息,这个类使用泛型,避免所谓的向下转型

Class:三种实例化方式

1)使用Object类的实例化对象的getClass()方法来获取

Food

package javabase.entity;
public class Food {
    public Food(){
        System.out.println("====又一餐美味的享受====");
    }
}

Main

package javabase;
import javabase.entity.Food;
public class Main {
    public static void main(String[] args) {
        Food food = new Food();
        Class clazz = food.getClass();
        System.out.println(clazz.getName());
    }
}

运行结果

====又一餐美味的享受====
javabase.entity.Food
2)使用jvm里直接支持的【类.class】

Main

package javabase;
import javabase.entity.Food;
public class Main {
    public static void main(String[] args) {
        Class clazz = Food.class;
        System.out.println(clazz.getName());
    }
}

运行结果,由于没有实例化Food对象,所以并没有执行构造方法

javabase.entity.Food
3)Class类支持:一个static方法 —forName

可以减少import语句,直接使用字符串来进行创建类的实例

public static Class<?> forName(String var0) throws ClassNotFoundException 

Main

package javabase;
public class Main {
    public static void main(String[] args) {
        Class clazz = null;
        try {
            clazz = Class.forName("javabase.entity.Food");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        System.out.println(clazz.getName());
    }
}

运行结果:同样是没有执行Food的构造方法,但不需要导入包了,直接把类的路径放在 forName 方法就行

javabase.entity.Food
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值