所有的变量类型或者是一个引用,或者是原始类型, 字符串,类,枚举,数组,接口,注解,都是引用
对所有的对象,JVM都会立即生产一个java.lang.Class的不可变实例,包含各种方法来检测这个对象的运行时属性
Class也可以创建新类和新对象,也是所有反射API的主入口
java.lang.reflect 包中的所有类都没有public的构造,只能调用Class的相关方法获得他们的实例
1.如果存在一个实例对象,最简单的方法就是调用Object.getClass()来获得Class对象
2.如果没有实例,只有一个类型,可以使用XX.class,当然更适合于原始类型.class,也适用于多重数组,包括void类型
3.Class.forName("com.duke.MyLocaleServiceProvider");
一般用于全名,是Class类的static方法,可以直接用,不过原始类型只能用第二种
Class cDoubleArray = Class.forName("[D");//类似于double[].class Class cStringArray = Class.forName("[[Ljava.lang.String;");//类似于String[][].class
4.每个包装类包括Void,都有个TYPE字段,也会获得Class对象
5.有的方法也会返回另一个Class对象,不过前提是已经有了一个Class对象
Class.getSuperclass()//父类
Class.getEnclosingClass()//外部类
Class.getClasses()//返回所有内部类,枚举,接口,包括继承过来的
Character也有几个方法(略)
XX.getDeclaringClass()//可以是Class,Field,Method,Constractor
当然匿名内部类是没有名字的,名字是null
每个类和成员都会有不同的修饰符(modifiers),包括注解,java.lang.reflect.Modifier
但不是所有注解都能通过反射得到
getDeclaredField()会返回包括private字段,但不包括继承的
getField()会返回public的字段,也包括继承的
字段和方法都是这样,但构造是没有继承这一说
private static void printMembers(Member[] mbrs, String s) {//这是一个通用的成员打印方法 out.format("%s:%n", s); for (Member mbr : mbrs) { if (mbr instanceof Field) out.format(" %s%n", ((Field)mbr).toGenericString()); else if (mbr instanceof Constructor) out.format(" %s%n", ((Constructor)mbr).toGenericString()); else if (mbr instanceof Method) out.format(" %s%n", ((Method)mbr).toGenericString()); } if (mbrs.length == 0) out.format(" -- No %s --%n", s); out.format("%n"); }
Class.newInstance()可以用来实例化一个对象,但调用的是无参的那个构造,没有无参构造会异常
所以应该用Constructor.newInstance(),可以传入参数
reflect包中有个Member接口,代表类中的成员,
实现它的类有Field,Method,和Constructor
按照最新规范,继承来的东西也属于成员,而构造并不属于成员,reflect包的这个实现是比较特殊的
另外三个类的父类是AccessibleObject 类,里面有方法setAccessible(true),和static方法
还有,反射里,对字段重新赋值的话,是没有自动装箱拆箱的
Field类里的setXX方法会降低很多性能,因为涉及到很多操作,不过在JRE看来效果是一样的
在没有setAccessible(true)之前,final的字段是不能修改的,但有了权限后的确可以修改
public field 都包括:
这个类中定义的
这个类的父类中定义的
这个类实现的接口中定义的
这个类实现的接口所继承的接口中的
public static void main(String... args) {//这样写跟以前是一样的,数组完全可以取代可变长度参数列表
相关推荐
Trail:Scala平台的路由库
VS代码的Sourcetrail扩展 此扩展使VS Code可以与进行通信 链接 项目主页,新闻: 说明文件: 下载,评论: 代码,问题: 特征 插件设置 通过上下文菜单将VS Code中的位置发送到Sourcetrail 显示插件是否连接...
Trail 是一个协作的实时任务管理环境。 堆 Trail 的客户端使用 AngularJS 构建,使用 Firebase 作为持久性服务。 Trail 还使用 NodeJS 服务器来存储附加(外围)数据。 服务 Firebase:用于获得实时用户体验。 所有...
ProtonTrail-Godot的3D Trail插件 概述 Godot Engine的3D Trail自定义节点 在运行时生成 可调分辨率 它只是一个网格,因此您可以在其上应用自己的材料 如何使用 将存储addons到您的addons文件夹 转到Project ...
vim-sourcetrail Vim插件可将光标位置与同步。 安装 使用您选择的插件管理器。 git clone https://github.com/CoatiSoftware/vim-sourcetrail ~/.vim/bundle/vim-sourcetrail 将Plugin 'CoatiSoftware/vim-source...
此项目是测试在Heroku上部署Web api时工作方式的线索
ecto_trail:EctoTrail允许将Ecto变更集更改存储在单独的audit_log表中
Trail是一种模块化且灵活的审核跟踪日志服务。 特征 作为独立服务器运行或扩展现有服务 具有灵活架构的Postgres后端 REST和GraphQL接口 支持Fastify和Hapi框架 文献资料 完整文档可在或docs/文件夹中找到。 执照 ...
paper_trail:使用Ecto跟踪并记录数据库中的所有更改。 恢复到历史记录中的任何时间
想要的帮助:请尝试sequelize-paper-trail@3.0.0-rc.6并给 :thumbs_up: / :thumbs_down: 如果它按预期工作,请。 跟踪模型的更改,以进行审核或版本控制。 查看模型在其生命周期的任何阶段的样子,将其还原为任何...
[1]杜东阳,吕文兵等。 用于从治疗后鼻咽18F-FDG PET / CT图像中最佳区分复发与炎症的机器学习方法。 J Nucl Med,2018年第1期。 59号补充1125 该matlab代码包含2个演示: “ demo_tr_te_CI”:matlab代码,通过使用...
这是一个用于跟踪的存储库 - 一...启动 Trail 的步骤: cd kibana/样品 节点服务器.js 转到浏览器并启动: 笔记: 确保 elastic-search 在 localhost:9200 上运行 在elastic-search中保留一些数据以便能够开始查询
踪迹该软件包将公开一个@trail刀片指令,您可以将其包含在主刀片或布局文件中。 此刀片指令公开了一个Trail JavaScript对象,该对象包含config和应用程序具有的命名路由的集合。 如果您知道我的意思,该指令还公开了...
步骤1 要安装,您必须首先选择一个放置此存储库的文件夹。 我已经选择: /root/backend/extensions/modules因为这对我来说似乎是最正确的。 将此存储库克隆到该位置。第2步该安装表了。 您可以使用此扩展的原始作者...
paper_trail 科 Ruby 活动记录 未发行 主 > = 2.5.0 > = 5.2,<6> = 2.4.0 > = 5.2,<6> = 2.3.0 > = 4.2,<6> = 2.3.0 > = 4.2,<5> = 2.2.0 > = 4.2,<5> = 2.1.0 > = 4.0,<5> = 1.9.3 > = 4.0,<5> = ...
$ npm install --save eulerian-trail 用法 var eulerianTrail = require ( 'eulerian-trail' ) ; eulerianTrail ( { edges : [ [ 0 , 1 ] , [ 1 , 2 ] , [ 2 , 3 ] , [ 3 , 6 ] , [ 6 , 7 ] , [ 7 , 10 ] ,...
技术路线 现在不要
Rocketseat Ignite开发的汽车租赁应用程序-NodeJS Trail :laptop: 使用: :backhand_index_pointing_right: 磨碎机 :backhand_index_pointing_right: 昂首阔步 :backhand_index_pointing_right: ORM型 :...
D3 步道布局 这是用于在 D3 中创建路径的布局函数,其中(与原生 d3.svg.line() 元素不同)您需要将特定的美学应用到行的每个元素。 演示 最初的用例是具有衰减不透明度的轨迹来表示运动:这是一个示例图像: (即将...
区块链审计追踪 该存储库包含一个分支,在其顶部构建了概念验证的区块链审计跟踪实现。 该区块链审计追踪是我在阿姆斯特丹大学验证审计追踪数据的学士论文的一部分。 该论文的完整版本可,该实现的演示视频可在获得...