5.7反射

反射库,提供了一个非常丰富且精心设计的工具集,以使编写能够动态java代码的程序,咋i设计和运行添加类时,能够快速的开发工具动态地查询新添加类的功能
能够分析类能力的程序称为反射,反射机制可以用来

  • 实现数组的操作代码。
  • 利用 Method对象, 这个对象很像C++中的函数指针 。
  • 在通行中分析类的能力。
  • 在运行中査看对象,例如,编写一个toString方法供所有装使用。

Class类

Java进行时系统始终为所有的对象维护一个被称为通行时的类型标识。这个信息保存着每个对象所属的类足迹 。 虚拟机利用通行时类型信息选择相应的方法的执行

  • Object类中的getClass( )方法将会返回一个class装型的实例。
  • Class方法是getName。这个方法将返回类的名字
  • 如果类在一个包里,包的名字也作为类名的一部分
    在启动时, 包含main方法的·类被加载。 它会加我所需要的类。 这些被加载类又要加载他们需要的类
  • 虚拟机为每个类型管理一个Class对象。因此,可以利用= =通算特实现两个类对象比骄傲操作
  • newInstanoe方法调用默认的构造器初始化新创建的对象。 如果这个类没有默认的构造器, 就会抛出一个异常。

捕获异常

当程序运行过程中发生错误时, 就会 “抛出异常” 。 抛出异常比终止程序要灵活得多,因为提供一个“捕获”异常处理器对异常情况进行处理

  • 异常有两种类型:未检查异常和已检查异常,对于已检查异常,编译器将会检查是否提供了处理器
try{
  可能引发异常的语句}
catch(Exception e){
   处理程序动作}
try{
 String name = ...;
Class c1 = Class.forName(name);
do someting with c1}
catch(Exception e){
   e.printStackTrace();}/*Throwable类的printStackTrace方法打印出栈的轨迹。 
Throwable是Exception类的超类*/

如果装名不存在,则将跳过try块中的剰余代码,程序直接进入catch子句 如果try块中没有抛出任何异常, 那么会跳过calch子句的处理器代码
stailc Class foName(String className)
返回描述类名为className的Class对象
Object newInstance()
返回这个类的一个新实例。
Object newInstance(Object[] args)
构造一个这个构造器所属类的新实例。
void printStackTrace()
将Throwable对象和栈的轨迹输出到标准错误流。

利用反射分析类的能力

检查类的结构:Field类有一个getType方法,用来返回描述域所属类型的Class对象。Method 和Constructor 类有能够报告参数类型的方法,Method类还有可以报告返回类型的方法。

  • 获取反射对象(反射入口):
    Class,1.Class.forName(全类名:包名加类名)
    2.类名.class
    3.对象.getClass()
  • 获取方法
    Class入口:Class.forName();
    获取所有的公共的反法
    Medhod[] methods = perClazz.getMethods();
    (公共方法:1.本类以及父类、接口中的所有方法2.符合访问修饰符规律的方法)
  • 获取所有的公共方法
    Class入口:Class.forName();
Class<?> perClazz = null;
try{
  perClazz = Clazz.forName("reflect.Person");
}catch(ClassNotFoundException e)
  e.printStackTrace();
}
Method[] declaredMethods=perClazz.getDeclardeMethods();
for(Method declaredMethod:declaredMethod)
{System.out.println(declaredMethod);
}
  • 获取所有的接口
    Class入口:Class.forName();
Class<?> perClazz = null;
try{
  perClazz = Clazz.forName("reflect.Person");
}catch(ClassNotFoundException e)
  e.printStackTrace();
}
}
Class<?> [] interface = perClazz.getInterfaces();
for(Class<?> inter:interfaces){
System.out.println(inter);
}
  • 获取所有的父类
    Class入口:Class.forName();
Class<?> perClazz = null;
try{
  perClazz = Clazz.forName("reflect.Person");
}catch(ClassNotFoundException e)
  e.printStackTrace();
}
Class<?> superclass = perClass.getSuperclass();
System.out.println(superclass);
}
  • 获取构造方法
Class<?> perClazz = null;
try{
  perClazz = Clazz.forName("reflect.Person");
}catch(ClassNotFoundException e)
  e.printStackTrace();
}
Construcor<?>[] constructors = perClazz.getConstructors();
for(Construcor<?>constructor:constructors){
System.out.println(constructor);}
  • 获取所有的公共属性
Class<?> perClazz = null;
try{
  perClazz = Clazz.forName("reflect.Person");
}catch(ClassNotFoundException e)
  e.printStackTrace();
}
Field[] fields = perClazz.getFields();
forIField field:fields){
System.out.println(fields)}
//取所有的属性 
Field[] declareFields = perClazz.getDeclareFields();
forIField declareField:declareFields ){
System.out.println(declareField)}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容

  • 其实跟很多人一样,以前的我也是个夜猫子,但是现在,我已经坚持早起打卡135天啦,整个人的状态也开始变得越来越好。 ...
    努力奔跑的许小孟阅读 157评论 0 0
  • 螺旋台阅读 163评论 0 0
  • 在历史大剧《大秦帝国之崛起》中,秦国在经历了几次合纵伐秦以后,决定率先对东方各国发起进攻。义渠的义渠王是义渠骇,他...
    不如唱歌阅读 5,505评论 0 0
  • 克罗齐“一切历史都是当代史” 中国传统史学研究的方法 考据学 西方社会科学注重强调理论,中国古人重视辞章、义理和考...
    joongsu198阅读 639评论 0 0