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. Spring Ioc--Bean装配

    继前一篇IoC概述.Spring容器总结,接下来总结下Bean的装配过程. 要使引用程序中的Spring容器成功启动,需要同时具备以下3个条件: 1.Spring框架的类包,放在应用程序的类路径下. ...

  2. Java多线程编程核心技术---单例模式与多线程

    立即加载/饿汉模式 立即加载就是使用类的时候已经将对象创建完毕. public class MyObject { //立即加载方式==饿汉模式 private static MyObject myOb ...

  3. [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作

    写在前面 前篇文章整理了angularjs学习目录,有园子里的朋友问我要这方面的demo,周末也没什么事,就在之前的单页应用的demo上面添加了增删改查的操作.代码比较简单,这里只列举比较重要的代码片 ...

  4. c语言中time相关函数

    工作中遇到的函数: int seed = time(NULL); srand(seed); signal(SIGINT, stop); signal(SIGUSR1, sig_usr1); 搜time ...

  5. data and dream

    1 用通俗的语言介绍下线性回归->逻辑回归->SVM之间的区别和联系. 2 聚类算法的应用场景,以及k-means中的k值怎么确定. def center(data): center = ...

  6. Androidstudio的快捷键

    只记忆常用的快捷键. 1,alt+enter导包,抛异常什么的,用来自动修正的 2,Ctrl+alt+V自动补全 3,Alt+Insert 生成代码(如get,set方法,构造函数等) 4,Ctrl+ ...

  7. FireBug调试工具笔记

         Firebug是网页浏览器 Mozilla Firefox下的一款开发类插件, 现属于Firefox的五星级强力推荐插件之一.它集HTML查看和编辑.Javascript控制台.网络状况监视 ...

  8. R-数据结构

    目录 数据类型(模式) 字符型 数值型 逻辑型 整形 复数型(虚数) 原生型(字节) 数据结构 向量 矩阵 数组 数据框 列表 数据类型 数据结构  向量 用于存储数值型.字符型或逻辑型数据的一维数组 ...

  9. php补充

    PHP 教程 echo 和 print 之间的差异:echo - 能够输出一个以上的字符串print - 只能输出一个字符串,并始终返回 1提示:echo 比 print 稍快,因为它不返回任何值. ...

  10. LUXURY15

    A - Guess Your Way Out! Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & ...