基础知识《八》---Java反射机制
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反射机制的更多相关文章
- Java开发培训基础知识解析之反射机制
		
Java是老牌编程语言,是当前应用最广泛的编程语言之一.想要学习Java你就一定要掌握Java基础知识,而反射对于初学Java的人来说绝对是非常重要的知识点.什么是反射?如何理解反射机制?如何使用反射 ...
 - 《Java基础知识》Java 反射详解
		
定义 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射 ...
 - Android学习之基础知识八—Android广播机制
		
一.广播机制简介 Android提供了一套完整的API,允许应用程序自由的发送和接受广播,发送广播借助于我们之前学过的:Intent,而接收广播需要借助于广播接收器(Broadcast Receive ...
 - Android学习之基础知识八—Android广播机制实践(实现强制下线功能)
		
强制下线功能算是比较常见的了,很多的应用程序都具备这个功能,比如你的QQ号在别处登录了,就会将你强制挤下线.实现强制下线功能的思路比较简单,只需要在界面上弹出一个对话框,让用户无法进行任何操作,必须要 ...
 - Java反射学习:深入学习Java反射机制
		
一.Java反射的理解(反射是研究框架的基础之一) Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的 ...
 - java基础知识(十一)java反射机制(上)
		
java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...
 - java基础知识(十一)java反射机制(下)
		
1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...
 - 【java基础】Java反射机制
		
一.预先需要掌握的知识(java虚拟机) 1)java虚拟机的方法区: java虚拟机有一个运行时数据区,这个数据区又被分为方法区,堆区和栈区,我们这里需要了解的主要是方法区.方法区的主要作用是存 ...
 - Java基础学习总结(75)——Java反射机制及应用场景
		
什么是Java反射机制? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的以及动态调用对象的方法的功能称为 ...
 - 夯实Java基础(二十一)——Java反射机制
		
1.反射机制概述 Java反射机制是指程序在运行状态中,对于任何一个类,我们都能够知道这个类的所有属性和方法(包括private.protected等).对于任何一个对象,我们都能够对它的属性和方法进 ...
 
随机推荐
- SSH+Ext+mysql快速开发
			
一.需要知识点 1.SSH整合 2.EXT使用 以及深入细节点 二.小功能实现 1.Servlet实现校验码验证 2.首页布局实现 3.struts错误信息显示(struts标签使用) 4.首页整体布 ...
 - ASP.NET MVC使用Bootstrap系列(3)——使用Bootstrap 组件
			
阅读目录 Bootstrap 导航条 列表组 徽章 媒体对象 页头 路径导航 分页 输入框组 按钮式下拉菜单 警告框 进度条 小结 Bootstrap为我们提供了十几种的可复用组件,包括字体图标.下拉 ...
 - 单选框的回显c:if
			
<input type="radio" name="sex" value="boy" <c:if test="${te ...
 - Thinkphp 模板中直接对数据处理 模板中使用函数     中文字符串截取
			
1.Thinkphp 模板中直接对数据处理:{$data.name|substr=0,3} 2.中文字符串截取函数:mb_substr=0,14,'utf-8' 3.中文字符串统计:iconv_str ...
 - Linux命令lsb_release:查看当前系统的发行版信息
			
Linux里的lsb_release命令用来查看当前系统的发行版信 息(prints certain LSB (Linux Standard Base) and Distribution inform ...
 - [译]A Beginner’s Guide to npm — the Node Package Manager
			
原文: http://www.sitepoint.com/beginners-guide-node-package-manager/ Installing Node.js 验证你的安装是否成功. $ ...
 - 【AngularJS】—— 2 初识AngularJs(续)
			
前一篇了解了AngularJS的一些简单的使用,这里继续跟着w3c学习一下剩下的内容. 本篇根据w3cschool.cc继续学习AngularJS剩余的内容,包括: 1 事件 2 模块 3 表单 4 ...
 - PHP文件操作 读取与写入
			
基本知识: PHP文件系统是基于Unix系统的 文件数据基本类型:二进制数据.文本数据 文件输入流:数据从源文件到内存的流动 文件输出流:数据从内存保存到文件的流动 文件操作函数: >>& ...
 - List对象排序通用方法
			
import java.util.Collections; import java.util.Comparator; import java.util.List; import java.lang.r ...
 - Ruby学习之mixin
			
直接上代码: module Action def jump @distance = rand(4) + 2 puts "I jumped forward #{@distance} feet! ...