java.lang.Class<T> -- 反射机制
1反射机制是什么
反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
2反射机制能做什么
反射机制主要提供了以下功能:
在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法;
生成动态代理。
3反射机制的相关API
通过一个对象获得完整的包名和类名
package edu.pri.lime.test;
public class TestReflect {
public static void main(String[] args){
TestReflect reflect = new TestReflect();
// 通过一个对象获得完整的包名和类名
System.out.println(reflect.getClass().getName());
}
}
实例化Class类对象
package edu.pri.lime.test;
public class TestReflect {
public static void main(String[] args) throws ClassNotFoundException{
Class<?> clazzA = Class.forName("edu.pri.lime.test.TestReflect");
Class<?> clazzB = new TestReflect().getClass();
Class<?> clazzC = TestReflect.class;
System.out.println(clazzA.getName());
System.out.println(clazzB.getName());
System.out.println(clazzC.getName());
}
}
获取一个对象的父类与实现的接口
package edu.pri.lime.test;
import java.io.Serializable;
public class TestReflect implements Serializable{
private static final long serialVersionUID = -3407476067923921222L;
public static void main(String[] args) throws ClassNotFoundException{
Class<?> clazz = Class.forName("edu.pri.lime.test.TestReflect");
// 获取父类
Class<?> clazzSup = clazz.getSuperclass();
System.out.println(clazzSup.getName());
// 获取所有接口
Class<?> clazzInte[] = clazz.getInterfaces();
for(Class<?> in : clazzInte){
System.out.println(in.getName());
}
}
}
获取某个类中的全部构造函数
package edu.pri.lime.test; import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier; public class TestReflect implements Serializable{
private static final long serialVersionUID = -3407476067923921222L; private int id;
private String name; public TestReflect() {
super();
// TODO Auto-generated constructor stub
} public TestReflect(int id) {
super();
this.id = id;
} public TestReflect(String name) {
super();
this.name = name;
} public TestReflect(int id, String name) {
super();
this.id = id;
this.name = name;
} public static void main(String[] args) throws ClassNotFoundException{ Class<?> clazz = Class.forName("edu.pri.lime.test.TestReflect");
// 获取所有构造函数
Constructor<?>[] constructors = clazz.getConstructors();
for(Constructor<?> con : constructors){
// 获取构造函数所有参数类型
Class<?>[] paramTypes = con.getParameterTypes();
System.out.print(Modifier.toString(con.getModifiers()) + " ");
System.out.print(con.getName() + "(");
for(int i = 0;i < paramTypes.length;i++){
if(i < paramTypes.length - 1){
System.out.print(paramTypes[i].getName().substring(paramTypes[i].getName().lastIndexOf(".") + 1) + ",");
}else{
System.out.print(paramTypes[i].getName().substring(paramTypes[i].getName().lastIndexOf(".") + 1));
}
}
System.out.println(");");
}
}
}
通过反射机制实例化一个类的对象
java.lang.Class<T> -- 反射机制的更多相关文章
- java.lang.Class<T> -- 反射机制及动态代理
Interface : Person package java_.lang_.component.bean; public interface Person { String area = " ...
- Java 核心类库之反射机制
1:什么是反射机制? 2:反射机制它可以做什么呢? 3:反射机制对应的API又是什么? 1):通过反射机制来获取一个对象的全限定名称(完整包名),和类名: 2):实例化Class对象 3):获取对象的 ...
- Java进阶之reflection(反射机制)——反射概念与基础
反射机制是Java动态性之一,而说到动态性首先得了解动态语言.那么何为动态语言? 一.动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以引进,已有的函数可以被删除等结构上的变化.比如常见 ...
- 在JAVA中,关于反射机制的讨论
一.什么是反射机制 简单的来说,反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的所有信息. 二.哪里用到反射机制 ...
- Java SE之初探反射机制
[Keywords]:Java,Hibernate,虚拟机,框架,SQL [Abstract]: 反射的概念:所谓的反射就是java语言在运行时拥有一项自观的能力,反射使您的程序代码能够得到装载到 ...
- JAVA(五)反射机制/Annotation
成鹏致远 | lcw.cnblog.com |2014-02-04 反射机制 1.认识Class类 在正常情况下,必须知道一个类的完整路径之后才可以实例化对象,但是在 java中也允许通过一个对象来找 ...
- java的泛型与反射机制
什么是泛型? 泛型,即“参数化类型”.顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参) ...
- JAVA动态性之一一反射机制reflection
package com.bjsxt.reflection.test.bean; public class User { private int id; private int age; private ...
- Java动态代理和反射机制
反射机制 Java语言提供的一种基础功能,通过反射,我们可以操作这个类或对象,比如获取这个类中的方法.属性和构造方法等. 动态代理:分为JDK动态代理.cglib动态代理(spring中的动态代理). ...
随机推荐
- 刷新各ifream当前页,下拉项改变触发事件js,给选中项加背景色js
<script type="text/javascript" language="javascript"> //刷新框架各页面 function r ...
- 手机APP功能测试经验分享2016.06.06
1.登录时,Android和IOS同样的操作,提示信息不一致: 2.注册等页面切换成横屏容易不兼容.把内存卡去掉,再发送图片.音频.视频容易出错. 3.Android和IOS同样的功能,同样的原型图, ...
- Vuejs——(2)Vue生命周期,数据,手动挂载,指令,过滤器
(八)传入的数据绑定 先创建一个对象(假如是obj),然后将他传入Vue实例中,作为data属性的值,那么 ①obj的值的变化,将影响Vue实例中的值的变化: ②相反一样: ③可以在Vue实例外面操纵 ...
- 161223、mysql锁的两个例子
版本:mysql5.5.52 存储引擎:InnoDB 隔离级别:READ-COMMITTED 示例一: 事务1:左图 事务2:右图 1. 事务2中属于快照读,基于多版本的并发控制协议--MV ...
- 设置Beyond Compare 为 Git 默认的比较工具
对于Beyond Compare4,Git版本号在2.2.0之后的,请在Git中依次输入以下命令: git config --global diff.tool bc3 git config --glo ...
- 反射 __import__
__import__ 根据字符串导入模块 def run(): inp = input('请输入URL:') m,p = inp.split('/') obj = __import__(m) if h ...
- input 的blur事件之后button的onclick事件不执行解决方案
最近发现网页程序中有个BUG,就是在input标签输入框中输入完数据后,直接点击“取消” 按钮的时候.出现网页崩死的情况: 经过小主酸菜我,各种方法的尝试后,找到一个初步可以解决的方案,在这里分享给大 ...
- wf(五)
测试工作流: 运用wf(四)的solution: 创建单元测试项目: 1.选择HelloWorkflow解决方案,右键选择添加新建项目:选择单元测试模板,命名为HelloWorkflow.Tests. ...
- R语言解读一元线性回归模型
转载自:http://blog.fens.me/r-linear-regression/ 前言 在我们的日常生活中,存在大量的具有相关性的事件,比如大气压和海拔高度,海拔越高大气压强越小:人的身高和体 ...
- widgets、dialogs与自动连接(auto-connect)
QMetaObject的自动连接设施(auto-connect facilities)可以自动将槽与信号连接起来,只需要声明和定义一个符合标准命名规则的槽函数 void on_<object n ...