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相关推荐

  1. 包里替换class文件_Java 反射之根基 Class 类

    Java 反射之根基 Class 类 Java中反射机制很重要,Java的动态语言就是靠反射机制实现的,反射技术也是程序员走的更远必不可少的一个技能.一般情况下我们都是通过类来创建对象,如果要求通过一 ...

  2. java反射源码_java反射技术详解附源码

    在学校学习Java时,由于学的不扎实,也没经历过太多实战项目,所以很多重要的知识点瞟一眼就过去了,比如现在要讲的反射,当时直接就忽略掉了,可现在发现很多地方需要反射,不得不重新学习一下,上学欠了太多债 ...

  3. java反射最佳实践_Java 反射最佳实践 – 码农网

    标签: 概要:最简单优雅的使用反射. 本文的例子都可以在示例代码中看到并下载,如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pull request.本文的示例代码主要 ...

  4. java 反射 工厂模式_Java反射机制demo(七)—反射机制与工厂模式

    Java反射机制demo(七)-反射机制与工厂模式 工厂模式 简介 工厂模式是最常用的实例化对象模式. 工厂模式的主要作用就是使用工厂方法代替new操作. 为什么要使用工厂模式?直接new不好吗? 直 ...

  5. java反射 数组类型_Java反射-数组

    通过反射使用数组有时会比较棘手.特别是需要获得一个特定类型数组的Class对象,如int[]等.本文将讨论如何通过反射创建数组和获得他们的Class对象. 注意:本文在阅读Eyal Lupu的博客&q ...

  6. java反射随意值_Java反射总结

    能够分析类能力的程序称为反射.对于给定的Java类名,可以通过反射获取类的信息.将类的各成分映射出相应的Java类. Class类 在程序运行期间,Java运行时系统始终对所有的对象维护一个被称为运行 ...

  7. java反射创建实例_Java反射创建实例

    Java反射创建实例 package com.wkcto.chapter08.demo02; import java.lang.reflect.Constructor; import java.lan ...

  8. java反射的原理_java反射机制的实现原理

    java反射机制的实现原理 反射机制: 所谓的反射机制就是java语言在运行时拥有一项自观的能力. 通过这种能力可以彻底的了解自身的情况为下一步的动作做准备. 下面具体介绍一下java的反射机制.这里 ...

  9. java读取本地文件_java 读取本地文件实例详解

    java 读取本地文件实例详解 用javax.xml.w3c解析 实例代码: package cn.com.xinli.monitor.utils; import org.w3c.dom.Docume ...

最新文章

  1. MATLAB如何保存仿真高清图片(matlab)
  2. php蜘蛛池搭建教程,【小旋风教程】万能蜘蛛池x4安装教程 _ 惠州SEO
  3. 省呱呱典型用户和用户场景
  4. Spring Boot中使用AOP统一处理Web请求日志
  5. 代理模式中的静态代理
  6. django model Meta选项
  7. php 提取前一百个字,如何在PHP中提取字符串的前100個字符?
  8. es6之数据结构 set,WeakSet,mapWeakMap
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的电影购票系统
  10. Android--xml布局文件中使用include
  11. android 自定义园动画,如何在Android中绘制一个带有动画的圆
  12. 请求发送者与接收者解耦——命令模式(三)
  13. 《信号与系统》解读 前言:为什么要解读《信号与系统》?
  14. matlab指南针的例子,小米指南针源码
  15. 量子计算最新进展:量子芯片将可利用现有硅工艺制造
  16. 基于Lua的游戏服务端框架简介
  17. 小程序如何开通微信支付?
  18. 微信公众号:开发者工具下载、安装、使用
  19. 4417. 神奇的字符串
  20. 70行代码撸一个桌面自动翻译神器

热门文章

  1. 代码整洁之道 垃圾编码收集
  2. 命令行查看Memcached运行状态
  3. [交互设计工具/原型创作工具]Axure RP Pro 5.0新特性 破解版 注册码
  4. Make sure you've included captcha.urls as explained in the INSTALLATION section on
  5. window下Jekyll+github搭建自己的博客
  6. 在Linux下查看系统版本信息命令总结
  7. SQL查询表中的有那些索引
  8. js中常用framesetiframe页面跳转传参方法实例大全
  9. nova5i有鸿蒙系统吗,华为nova 5i怎么样?值得入手么?
  10. “数据结构+算法”视角的Asprova