public static Class<?> forName(String className)
复制代码
直接获取某一个对象的 class
Class<?> klass = int.class;
Class<?> classInt = Integer.TYPE;
复制代码
调用某个对象的 getClass() 方法
StringBuilder str = new StringBuilder("123");
Class<?> klass = str.getClass();
复制代码
#####判断是否为某个类的实例
一般地,我们用 instanceof 关键字来判断是否为某个类的实例。同时我们也可以借助反射中 Class 对象的 isInstance() 方法来判断是否为某个类的实例,它是一个 native 方法:
public native boolean isInstance(Object obj);
复制代码
#####创建实例
通过反射来生成对象主要有两种方式。
Class<?> c = String.class;
Object str = c.newInstance();
复制代码
//获取String所对应的Class对象
Class<?> c = String.class;
//获取String类带一个String参数的构造器
Constructor constructor = c.getConstructor(String.class);
//根据构造器创建实例
Object obj = constructor.newInstance("23333");
System.out.println(obj);
复制代码
#####获取构造器信息
得到构造器的方法
Constructor getConstructor(Class[] params) -- 获得使用特殊的参数类型的公共构造函数,
Constructor[] getConstructors() -- 获得类的所有公共构造函数
Constructor getDeclaredConstructor(Class[] params) -- 获得使用特定参数类型的构造函数(与接入级别无关)
Constructor[] getDeclaredConstructors() -- 获得类的所有构造函数(与接入级别无关)
复制代码
获取类构造器的用法与上述获取方法的用法类似。主要是通过 Class 类的 getConstructor 方法得到 Constructor 类的一个实例,而 Constructor 类有一个 newInstance 方法可以创建一个对象实例:
public T newInstance(Object ... initargs)
复制代码
#####获取类的成员变量(字段)信息
获得字段信息的方法
Field getField(String name) -- 获得命名的公共字段
Field[] getFields() -- 获得类的所有公共字段
Field getDeclaredField(String name) -- 获得类声明的命名的字段
Field[] getDeclaredFields() -- 获得类声明的所有字段
复制代码
#####调用方法
获得方法信息的方法
-- 使用特定的参数类型,获得命名的公共方法
Method getMethod(String name, Class[] params)
-- 获得类的所有公共方法
Method[] getMethods()
-- 使用特写的参数类型,获得类声明的命名的方法
Method getDeclaredMethod(String name, Class[] params)
-- 获得类声明的所有方法
Method[] getDeclaredMethods()
复制代码
当我们从类中获取了一个方法后,我们就可以用 invoke() 方法来调用这个方法。invoke 方法的原型为:
public Object invoke(Object obj, Object... args)
throws IllegalAccessException, IllegalArgumentException,
InvocationTargetException
**Java面试核心知识点笔记**
其中囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。
![蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6](https://static001.geekbang.org/infoq/b2/b2297004cc7433d063ef78a89b78793b.png)
**Java中高级面试高频考点整理**
![蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6](https://static001.geekbang.org/infoq/9f/9f20a64928436aaf03ef859fb5cd7fb0.png)
**更多Java进阶知识笔记文档分享,这些对于面试还是学习来说都是一份不错的学习资料**
**[有需要的朋友可以戳这里即可免费领取](https://gitee.com/vip204888/java-p7)**
![蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6](https://static001.geekbang.org/infoq/a1/a1c9924ca83ea9302a008b53da98f553.png)
**最后还分享Java进阶学习及面试必备的视频教学**
![蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6](https://static001.geekbang.org/infoq/13/138de1c1692c554ee4bfcc6d524c5cd5.png)
复制代码
评论