写点什么

Dagger2 源码分析(二,深入理解 Java 虚拟集百度云

用户头像
Geek_f90455
关注
发布于: 1 小时前
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 对象的 newInstance()方法来创建 Class 对象对应类的实例。


Class<?> c = String.class;Object str = c.newInstance();
复制代码


  • 先通过 Class 对象获取指定的 Constructor 对象,再调用 Constructor 对象的 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)

复制代码


用户头像

Geek_f90455

关注

还未添加个人签名 2021.07.06 加入

还未添加个人简介

评论

发布
暂无评论
Dagger2源码分析(二,深入理解Java虚拟集百度云