获取Class类对象的几种方式
获取Class对象的几种方式
一、获取Class对象的四种方式
1、通过类.class
获取
Class<Reflect> class1 = Reflect.class;
2、通过对象.getClass()
获取
Class<? extends Reflect> class2 = new Reflect().getClass();
3、通过类Class.forName()
获取
Class<?> class3 = Class.forName("interview.Reflect");
4、通过类ClassLoader.loadClass()
获取
Class<?> class4 = Reflect.class.getClassLoader().loadClass("interview.Reflect");
二、关于获取Class对象的一些引伸
1、反射
反射机制是在运行状态中,对于任意一个类,都能知道其所有属性和方法;对于任意一个对象,都能调用它的任意一个方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制
2、Class类中常用方法
getName():返回String形式的该类的名称。
newInstance():根据某个Class对象产生其对应类的实例,它调用的是此类的默认构造方法(没有默认无参构造器会报错)
getClassLoader():返回该Class对象对应的类的类加载器。
getSuperClass():返回某子类所对应的直接父类所对应的Class对象
getConstructor(Class[]) :返回当前 Class 对象表示的类的指定的公有构造子对象。
getConstructors() :返回当前 Class 对象表示的类的所有公有构造子对象数组。
getDeclaredConstructor(Class[]):返回当前 Class 对象表示的类的指定已说明的一个构造子对象。
getDeclaredConstructors() :返回当前 Class 对象表示的类的所有已说明的构造子对象数组。
getDeclaredField(String) :返回当前 Class 对象表示的类或接口的指定已说明的一个域对象。
getDeclaredFields() :返回当前 Class 对象表示的类或接口的所有已说明的域对象数组。
getDeclaredMethod(String, Class[]) :返回当前 Class 对象表示的类或接口的指定已说明的一个方法对象。
getDeclaredMethods() :返回 Class 对象表示的类或接口的所有已说明的方法数组。
getField(String) :返回当前 Class 对象表示的类或接口的指定的公有成员域对象。
getFields() :返回当前 Class 对象表示的类或接口的所有可访问的公有域对象数组。
getInterfaces() :返回当前对象表示的类或接口实现的接口。
getMethod(String, Class[]) :返回当前 Class 对象表示的类或接口的指定的公有成员方法对象。
getMethods() :返回当前 Class 对象表示的类或接口的所有公有成员方法对象数组,包括已声明的和从父类继承的方法。
isInstance(Object) :此方法是 Java 语言 instanceof 操作的动态等价方法。
isInterface() :判定指定的 Class 对象是否表示一个接口类型
isPrimitive() :判定指定的 Class 对象是否表示一个 Java 的基类型。
3、Class.forName()和ClassLoader.loadClass()的区别
- foranme在类加载的时候会执行静志代码块
- loadclass只有在调用newInstance方法的时候才会执行静态代码块
- 初始化不同:Class.forName()会对类初始化,而loadClass(只会装在或链接。可见的效果就是类中静态初始化段及字节码中对所有静态成员的初始工作的执行(这个过程在类的所有父类中递归地调用).这点就与ClassLoader.loadClass()不同. ClassLoader.loadClass(加载的类对象是在第一次被调用时才进行初始化的。你可以利用上述的差异.比如,要加载一个静态初始化开销很大的类,你就可以选择提前加载该类(以确保它在classpath下),但不进行初始化,直到第一次使用该类的域或方法时才进行初始化
- 类加载器不用:Class.forName(String)方法(只有一个参数),使用调用者的类加载器来加载,也就是用加载了调用forName方法的代码的那个类加载器。当然,它也有个重载的方法,可以指定加载器。相应的,ClassLoader.loadClass()方法是一个实例方法(非静态方法),调用时需要自己指定类加载器,那么这个类加载器就可能是也可能不是加载调用代码的类加载器(调用代用代码类加载器通getClassLoaderoQ获得)
获取Class类对象的几种方式相关推荐
- 获取Class类对象的三种方式
三种方式分类 类名.class属性 对象名.getClass()方法 Class.forName(全类名)方法 示例代码 public class ReflectDemo {public static ...
- java反射获取实体类_java 反射获取类对象的三种方式
Java反射经常用到的就是获取对象中的属性,那么Java获取类对象就是必不可少的啦! Java实体类: public class ReflexModel { private String code; ...
- 获取class文件对象的三种方式
package cn.learn_01;/** 反射:就是通过class文件对象,去使用该文件中的成员变量,构造方法,成员方法.* * Person p = new Person();* p.使用* ...
- 普通类创建获取session 方式_Springboot系列之RestApi中获取枚举类属性的几种方式...
前言 我们在日常开发中经常会遇到,实体类中的枚举属性,在通过@ResponseBody注解返回到前端后,默认被解析成了枚举对象的name值,当我们需要获取枚举类的详细属性时就会变得非常麻烦,今天给大家 ...
- JavaScript 创建类/对象的几种方式
在JS中,创建对象(Create Object)并不完全是我们时常说的创建类对象,JS中的对象强调的是一种复合类型,JS中创建对象及对对象的访问是极其灵活的. JS对象是一种复合类型,它允许你通过变量 ...
- 面试题,反射创建类实例的三种方式是什么
1.获得Class:主要有三种方法: (1)Object-->getClass (2)任何数据类型(包括基本的数据类型)都有一个"静态"的class属性 (3)通过class ...
- java 给对象创建实例_Java中创建(实例化)对象的五种方式
Java中创建(实例化)对象的五种方式1.用new语句创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3.运用反 ...
- 获取Class对象的三种方式
获取Class对象的三种方式 Object --> getClass() 通过对象.getclass 任何数据类型(包括基本数据类型)都有一个"静态"的class属性 通过类 ...
- Java动物类enjoy方法打印_Java反射学习-2 - 获取Class对象的三种方式
1 packagecn.tx.reflect;2 3 importjava.lang.reflect.Constructor;4 importjava.lang.reflect.Field;5 imp ...
最新文章
- 解决Windows Git Bash中文乱码问题
- Verilog 中的移位(算术移位, 逻辑移位, 循环移位)
- window对象方法之setTimeout(),setInterval()
- 终于等到你!2020年电子设计竞赛来了!
- 不可靠的信号、可靠信号
- 《Adobe Flash Professional CC经典教程》——1.15 复习
- “6亿元入股锤子”项目涉嫌国资流失被调查?官方回应来了
- 【kafka】kafka 错误代码解释
- 关于VSCode更新对于emmet2.0支持的配置更改问题。
- 如何编写一个抢购bot_如何编写一个SkyWalking插件
- Android开发 - 掌握ConstraintLayout(一)传统布局的问题 1
- 开关电源入门1-基本原理
- 中文(语音结果)的文本纠错综述 Chinese Spelling Check
- 5个免费的PPT模板下载网站
- 图像处理之图像复原[逆滤波、维纳滤波、约束最小二乘法、Lucy-Richardson和盲解卷积复原]
- python柱状图显示数值_Python实现绘制双柱状图并显示数值功能示例
- 如何管理好团队?史玉柱自述
- python之Continuity循环
- 现在俏皮话越来越多了
- Python实现投影法分割图像(二)