java反射class文件_Java反射(一)Class
Java的反射应该算Java最灵活的一部分,反射机制是站在更高层次的抽象上,把Java中的类、方法、构造器、成员变量、接口等又抽象成了一个个类。先说说反射的基石Class类吧。
Class类的实例表示一个Java类在内存中的一段字节码。Java程序运行时要用到某类时一定要先将其类对应的class文件的字节码加载到内存中才能使用,而一个Class类的实例正是代表这些内容。
Class类没有公有构造方法,所以不可能用new来得到Class的实例,一般Class是首次调用该类时由JVM构造的,我们在程序中想要得到某类的class实例有下面三种方法:
Class claz1=Client.class;
Client client=new Client();
Class claz2=client.getClass();
try {
Class claz3=Class.forName("com.lttclaw.client.Client");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}前两种方法比较明白,但这两种方法要求该类必须已经编写了并在工程下面,第三种方法就要灵活的多,它允许我们用类的全名来获得class实例。
class的实例有很多有用的方法,我简单罗列一些:
getClasses()返回的是这个类的所有的public修饰的内部类和接口构成的Class数组
getConstructor(Class>... paramType) 这个比较有意思,是返回以参数列表类型一致的那一个public修饰的构造器,后面会单独说说这个Constructor
getConstructors()返回一个public修饰的Constructor数组,包含类的全部构造器
getField(String name)返回一个public修饰的成员变量,方法名为name
getFields()返回一个Field数组,包含public修饰的所有成员变量
getMethod(String name,Class> paramType)返回一个public 修饰的方法,此方法名为name,参数列表类型为paramType
getMethods()返回一个Method数组,包含此类所有的public方法
以上方法还有一套getDeclaredXXX表示那些不是public的也会被包含进来
getName()返回类的完整名,包含包名
getSimpleName()返回类的名称,不包含包名
newInstance()这个就是用这个类的不带参数的构造方法构造出一个类的实例
Class类里面值得一提的是有九种基本类型,其实就是八种基本数据类型boolean,byte,char,short,int,long,float, anddouble外加一个void,要判断是否是基本类型可以用isPrimitive(),基本类型都有其对应的包装类型,在这些包装类型里都有个常量对应其基本类型的class,即Boolean.TYPE, Character.TYPE, Byte.TYPE, Short.TYPE, Integer.TYPE, Long.TYPE, Float.TYPE, Double.TYPE, Void.TYPE。基本类型用getName()得到名字时是一个单字母——
boolean
Z
byte
B
char
C
class or interface
Lclassname;
double
D
float
F
int
I
long
J
short
S
还有一个有意思的类型是数组类型,判断类是不是数组类型可以用isArray(),数组类型的类用getName()时返回名字是[类名,举几个API上的例子:
(new Object[3]).getClass().getName()
returns "[Ljava.lang.Object;"
(new int[3][4][5][6][7][8][9]).getClass().getName()
returns "[[[[[[[I"
java反射class文件_Java反射(一)Class相关推荐
- 包里替换class文件_Java 反射之根基 Class 类
Java 反射之根基 Class 类 Java中反射机制很重要,Java的动态语言就是靠反射机制实现的,反射技术也是程序员走的更远必不可少的一个技能.一般情况下我们都是通过类来创建对象,如果要求通过一 ...
- java反射源码_java反射技术详解附源码
在学校学习Java时,由于学的不扎实,也没经历过太多实战项目,所以很多重要的知识点瞟一眼就过去了,比如现在要讲的反射,当时直接就忽略掉了,可现在发现很多地方需要反射,不得不重新学习一下,上学欠了太多债 ...
- java反射最佳实践_Java 反射最佳实践 – 码农网
标签: 概要:最简单优雅的使用反射. 本文的例子都可以在示例代码中看到并下载,如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pull request.本文的示例代码主要 ...
- java 反射 工厂模式_Java反射机制demo(七)—反射机制与工厂模式
Java反射机制demo(七)-反射机制与工厂模式 工厂模式 简介 工厂模式是最常用的实例化对象模式. 工厂模式的主要作用就是使用工厂方法代替new操作. 为什么要使用工厂模式?直接new不好吗? 直 ...
- java反射 数组类型_Java反射-数组
通过反射使用数组有时会比较棘手.特别是需要获得一个特定类型数组的Class对象,如int[]等.本文将讨论如何通过反射创建数组和获得他们的Class对象. 注意:本文在阅读Eyal Lupu的博客&q ...
- java反射随意值_Java反射总结
能够分析类能力的程序称为反射.对于给定的Java类名,可以通过反射获取类的信息.将类的各成分映射出相应的Java类. Class类 在程序运行期间,Java运行时系统始终对所有的对象维护一个被称为运行 ...
- java反射创建实例_Java反射创建实例
Java反射创建实例 package com.wkcto.chapter08.demo02; import java.lang.reflect.Constructor; import java.lan ...
- java反射的原理_java反射机制的实现原理
java反射机制的实现原理 反射机制: 所谓的反射机制就是java语言在运行时拥有一项自观的能力. 通过这种能力可以彻底的了解自身的情况为下一步的动作做准备. 下面具体介绍一下java的反射机制.这里 ...
- java读取本地文件_java 读取本地文件实例详解
java 读取本地文件实例详解 用javax.xml.w3c解析 实例代码: package cn.com.xinli.monitor.utils; import org.w3c.dom.Docume ...
最新文章
- MATLAB如何保存仿真高清图片(matlab)
- php蜘蛛池搭建教程,【小旋风教程】万能蜘蛛池x4安装教程 _ 惠州SEO
- 省呱呱典型用户和用户场景
- Spring Boot中使用AOP统一处理Web请求日志
- 代理模式中的静态代理
- django model Meta选项
- php 提取前一百个字,如何在PHP中提取字符串的前100個字符?
- es6之数据结构 set,WeakSet,mapWeakMap
- 基于JAVA+SpringMVC+Mybatis+MYSQL的电影购票系统
- Android--xml布局文件中使用include
- android 自定义园动画,如何在Android中绘制一个带有动画的圆
- 请求发送者与接收者解耦——命令模式(三)
- 《信号与系统》解读 前言:为什么要解读《信号与系统》?
- matlab指南针的例子,小米指南针源码
- 量子计算最新进展:量子芯片将可利用现有硅工艺制造
- 基于Lua的游戏服务端框架简介
- 小程序如何开通微信支付?
- 微信公众号:开发者工具下载、安装、使用
- 4417. 神奇的字符串
- 70行代码撸一个桌面自动翻译神器
热门文章
- 代码整洁之道 垃圾编码收集
- 命令行查看Memcached运行状态
- [交互设计工具/原型创作工具]Axure RP Pro 5.0新特性 破解版 注册码
- Make sure you've included captcha.urls as explained in the INSTALLATION section on
- window下Jekyll+github搭建自己的博客
- 在Linux下查看系统版本信息命令总结
- SQL查询表中的有那些索引
- js中常用framesetiframe页面跳转传参方法实例大全
- nova5i有鸿蒙系统吗,华为nova 5i怎么样?值得入手么?
- “数据结构+算法”视角的Asprova