1.反射可以做什么

2.反射相关的API

3.获取Class运行时类的实例的三种方法:

1)通过运行时类本身的.class属性*****

Class clazz= Person.class;

2)通过运行时类的对象获取

Person p=new Person;

Class clazz=p.getClass();

3)通过Class的静态方法获取,//通过此方式,体现反射的动态性。来什么字符串类,就造什么类******

String className="com.cmge.org.Person";

Class clazz=Class.forName(className);

4)通过类加载器

String className="com.cmge.org.Person";

ClassLoader loader=this.getClass.getClassLoader();

Class clazz=loader.loadClass(className);

System.out.printIn(clazz.getName());

4.创建运行时类的实例,并获取类的相关结构

方法一://创建运行时类的实例,使用newInstance(),实际上调用了类的无参构造器。因此要想运行时类的实例创建成功,必须要有无参构造器,并且无参构造器的访问权限是公开的

String className="com.cmge.org.Person";

Class clazz=Class.forName(className);

Object object=clazz.newInstance();

Person p=(Person)object;

5、通过反射获取类的完整结构

1)获取运行时类的属性(getFields()获取公开属性、getDeclaredFileds()获取运行时类申明的全部属性),

获取属性的修饰符、变量类型、变量名。

2)获取运行时类的方法

获取运行时类的方法(getmethods()获取公开的方法、getDeclaredMethods()获取全部方法)

Class clazz=Person.class;

Method[]  m1=clazz.getMethods();

Method[] m2=clazz.getDeclaredMethods();

获取方法的注释、方法修饰符、方法返回值类型、方法变量名、方法参数列表、方法异常

for(Method m in m2){

Annotation[] anns=m.getAnnotations();//获取方法注释

String str=Modifier.toString(m.getModifiers());//获取方法修饰符

Class typeclass=m.getReturnType();//获取返回值类型

Class[] params=m.getParameterTypes();//获取参数列表

Class[] exps=m.getExceptionTypes();

}

3)获取运行时类的构造器及其他

Class clazz=Person.class;

Constructor c=clazz.getDeclaredConstructor();//获取构造器

//获取运行时类的父类、

//获取父类的泛型、

Class[] interfaces=clazz.getInterfaces();//获取实现的接口、

Packge p=clazz.getPackge();//获取所在的包

Annotation[] anns=clazz.getAnnotations();//获取类的注解

6、调用运行时类的指定的属性,指定的方法

1)调用指定的属性

Class clazz=Person.class;

Field name=clazz.getField("name");

Person p=(Person) clazz.newInstance();

name.set(p,"Jerry");//设置指定的属性值

2)调用指定的方法

Class clazz=Person.class;

Method m=clazz.getMethod("show");

Person p=(Person)clazz.newInstance();

Object obj=m.invoke(p);//调用指定的方法

Method m2=clazz.getMethod("info");//其中info是静态的方法

m2.invoke(Person.class);//调用静态的方法

Method m3=clazz.getMethod("display",String.class,Integer.class);//调用有两个参数的方法

Object obj2=m3.invoke(p,"USA",10);

3)调用指定的构造器

7、动态代理与AOP

******重要,需要重复学习

视频地址:http://edu.csdn.net/course/detail/809/11015?auto_start=1

基础知识《八》---Java反射机制的更多相关文章

  1. Java开发培训基础知识解析之反射机制

    Java是老牌编程语言,是当前应用最广泛的编程语言之一.想要学习Java你就一定要掌握Java基础知识,而反射对于初学Java的人来说绝对是非常重要的知识点.什么是反射?如何理解反射机制?如何使用反射 ...

  2. 《Java基础知识》Java 反射详解

    定义 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射 ...

  3. Android学习之基础知识八—Android广播机制

    一.广播机制简介 Android提供了一套完整的API,允许应用程序自由的发送和接受广播,发送广播借助于我们之前学过的:Intent,而接收广播需要借助于广播接收器(Broadcast Receive ...

  4. Android学习之基础知识八—Android广播机制实践(实现强制下线功能)

    强制下线功能算是比较常见的了,很多的应用程序都具备这个功能,比如你的QQ号在别处登录了,就会将你强制挤下线.实现强制下线功能的思路比较简单,只需要在界面上弹出一个对话框,让用户无法进行任何操作,必须要 ...

  5. Java反射学习:深入学习Java反射机制

    一.Java反射的理解(反射是研究框架的基础之一) Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的 ...

  6. java基础知识(十一)java反射机制(上)

    java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...

  7. java基础知识(十一)java反射机制(下)

    1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...

  8. 【java基础】Java反射机制

    一.预先需要掌握的知识(java虚拟机)  1)java虚拟机的方法区:  java虚拟机有一个运行时数据区,这个数据区又被分为方法区,堆区和栈区,我们这里需要了解的主要是方法区.方法区的主要作用是存 ...

  9. Java基础学习总结(75)——Java反射机制及应用场景

    什么是Java反射机制? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的以及动态调用对象的方法的功能称为 ...

  10. 夯实Java基础(二十一)——Java反射机制

    1.反射机制概述 Java反射机制是指程序在运行状态中,对于任何一个类,我们都能够知道这个类的所有属性和方法(包括private.protected等).对于任何一个对象,我们都能够对它的属性和方法进 ...

随机推荐

  1. ASP.NET WebAPI 08 Message,HttpConfiguration,DependencyResolver

    ASP.NET WebAPI 08 Message,HttpConfiguration,DependencyResolver   Message WebAPI作为通信架构必定包含包含请求与响应两个方法 ...

  2. WebGrid Helper with Check All Checkboxes

    WebGrid Helper with Check All Checkboxes myEvernote Link Tuesday, September 13, 2011ASP.NET ASP.NET ...

  3. Spring入门_04_注解注入

    applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xm ...

  4. mysql explain详解

    对于经常使用mysql的兄弟们,对explain一定不会陌生.当你在一条SELECT语句前放上关键词EXPLAIN,MySQL解释它将如何处理SELECT,提供有关表如何联合和以什么次序的信息.借助于 ...

  5. Java通过JNI调用C

    Java调用C有多种方式,本文介绍笔者最近的学习过程,避免今后再犯类似的错误. 首先,Java肯定是调用C的动态链接库,即通过编译器编译后的dll/so文件. 下面介绍gcc编译dll的方法. 一般情 ...

  6. 【最新】2015年7月之15个最新jQuery插件

    Hello,一个激动人心的好消息,现在我为大家整理最近7月发布的jQuery插件. 如果你熟悉任何下面列出的插件,请分享你的反馈与我们的读者,或如果你知道哪一个我们没有收录,那么请与我们分享在下面的评 ...

  7. mongodb 与 c++ 的配合使用

    最近在尝试使用 mongodb 作为服务端持久化方案,服务端程序是使用 c++ 写的,折腾了不少时间,记录一下吧. 1.下载 boost 1.56.0 http://www.boost.org/use ...

  8. 基本select语句的生命周期

    (1) 客户端sqlserver网络接口通过一种网络协议(可以是共享内存:简单高速,客户端和sql server在同一台计算机默认连接方式:TCP/IP:访问sql server最常用的一种协议,客户 ...

  9. 使用MVVM框架avalon.js实现一个简易日历

    最近在做公司内部的运营管理系统,因为与日历密切相关,同时无需触发条件直接显示在页面上,所以针对这样的功能场景,我就用avalon快速实现了一个简易日历,毕竟也是第一次造日历这种轮子,所以这里记录下我当 ...

  10. 编写更好的C#代码

    引言 开发人员总是喜欢就编码规范进行争论,但更重要的是如何能够在项目中自始至终地遵循编码规范,以保证项目代码的一致性.并且团队中的所有人都需要明确编码规范所起到的作用.在这篇文章中,我会介绍一些在我多 ...