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中的动态代理). ...
随机推荐
- mybatis+MySQL--CRUD
①导入jar包: ②.配置config.xml: ③.entity: mapping: ④.DAO: —————————————————————————————————— 目录结构: —————— ...
- 数据采集实践学习二(C#)
前一篇文章写到我获取数据的方式不是通过分析HTML获得,而是通过分析请求链接,然后模拟请求方法获取数据,这只是一种方法.而且是在我通过分析HTML获取不到的情况下,曲线救国,参考别人文章实现的.很高兴 ...
- win64位安装python-mysqldb1.2.5
在其他版本的mysqldb里面时间查询有问题最后确定还是在 1.2.5 版本下来解决,需要解决的问题就是这个:"Cannot open include file: 'config-win.h ...
- Java数据结构之字符串模式匹配算法---Brute-Force算法
模式匹配 在字符串匹配问题中,我们期待察看源串 " S串 " 中是否含有目标串 " 串T " (也叫模式串).其中 串S被称为主串,串T被称为子串. 1.如果在 ...
- JavaScriptCore 使用
JavaScriptCore JavaScriptCore是webkit的一个重要组成部分,主要是对JS进行解析和提供执行环境.代码是开源的,可以下下来看看(源码).iOS7后苹果在iPhone平台推 ...
- [解决方案]vs2015无法解析外部符号__imp__fprintf和__imp____iob_func
转自:http://www.cnblogs.com/ubosm/p/5444919.html 使用vs2015编译ffmpeg的一个小项时,出现了__imp__fprintf和__imp____iob ...
- ping广播地址会如何(转)
来源:http://kb.cnblogs.com/a/1560881/ 首先,了解通常有4种广播地址:受限制的广播,网段的广播,子网的广播,所有子网的广播 其次,假如我的地址10.26.20.1/16 ...
- IOS CALayer的阴影属性
@property(nullable) CGColorRef shadowColor; /* The opacity of the shadow. Defaults to 0. Specifying ...
- HTML空格标签
双学位论文+本学位开题报告+实训项目+实训考试+学员考试,真是脑子都要爆炸... 话不多说,留个小知识点,HTML的空格替代符号表示法: 1. 半个空白,1个字符宽度: 或者 2.1个空白,2个 ...
- Angular--页面间切换及传值的四种方法
1. 基于ui-router的页面跳转传参(1) 在AngularJS的app.js中用ui-router定义路由,比如现在有两个页面,一个页面(producers.html)放置了多个produce ...