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> -- 反射机制的更多相关文章

  1. java.lang.Class<T> -- 反射机制及动态代理

    Interface : Person package java_.lang_.component.bean; public interface Person { String area = " ...

  2. Java 核心类库之反射机制

    1:什么是反射机制? 2:反射机制它可以做什么呢? 3:反射机制对应的API又是什么? 1):通过反射机制来获取一个对象的全限定名称(完整包名),和类名: 2):实例化Class对象 3):获取对象的 ...

  3. Java进阶之reflection(反射机制)——反射概念与基础

    反射机制是Java动态性之一,而说到动态性首先得了解动态语言.那么何为动态语言? 一.动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以引进,已有的函数可以被删除等结构上的变化.比如常见 ...

  4. 在JAVA中,关于反射机制的讨论

    一.什么是反射机制         简单的来说,反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字,     那么就可以通过反射机制来获得类的所有信息. 二.哪里用到反射机制 ...

  5. Java SE之初探反射机制

    [Keywords]:Java,Hibernate,虚拟机,框架,SQL [Abstract]:   反射的概念:所谓的反射就是java语言在运行时拥有一项自观的能力,反射使您的程序代码能够得到装载到 ...

  6. JAVA(五)反射机制/Annotation

    成鹏致远 | lcw.cnblog.com |2014-02-04 反射机制 1.认识Class类 在正常情况下,必须知道一个类的完整路径之后才可以实例化对象,但是在 java中也允许通过一个对象来找 ...

  7. java的泛型与反射机制

    什么是泛型? 泛型,即“参数化类型”.顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参) ...

  8. JAVA动态性之一一反射机制reflection

    package com.bjsxt.reflection.test.bean; public class User { private int id; private int age; private ...

  9. Java动态代理和反射机制

    反射机制 Java语言提供的一种基础功能,通过反射,我们可以操作这个类或对象,比如获取这个类中的方法.属性和构造方法等. 动态代理:分为JDK动态代理.cglib动态代理(spring中的动态代理). ...

随机推荐

  1. SQLite的优化总结

    网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下. 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2 ...

  2. git操作笔记

    首先本文参考廖雪峰的git学习教程,写的非常好,值得学习. http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b80 ...

  3. angularJS——ng-bind指令与插值的区别

    在AngularJS中显示模型中的数据有两种方式: 一种是使用花括号插值的方式: <p>{{text}}</p> 另一种是使用基于属性的指令,叫做ng-bind: <p ...

  4. Java数据结构之字符串模式匹配算法---Brute-Force算法

    模式匹配 在字符串匹配问题中,我们期待察看源串 " S串 " 中是否含有目标串 " 串T " (也叫模式串).其中 串S被称为主串,串T被称为子串. 1.如果在 ...

  5. oracle迁移postgres之-Ora2Pg

    描述 Ora2Pg:甲骨文PostgreSQL数据库模式转换器是一个免费的工具用于Oracle数据库迁移到PostgreSQL兼容模式.它连接Oracle数据库,扫描它自动提取其结构或数据,然后生成S ...

  6. java.sql.SQLException: null, message from server: "Host '192.168.xxx.xxx' is not allowed to connect to this MySQL server"

    当你连接自己的电脑上的MySQL时,报这样的错,你可以把ip换成 127.0.0.1或者localhost  ,当然前提是用户名和密码正确

  7. 使用PHP QR Code生成二维码

    使用PHP QR Code生成二维码   HP QR Code是一个PHP二维码生成类库,利用它可以轻松生成二维码,官网提供了下载和多个演示demo,查看地址: http://phpqrcode.so ...

  8. linux下与windows下的换行符

    [原文有些许错误,已作了修改] 回车符号和换行符号产生背景 关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别.在计算机还没有出现之前,有一种叫做电传 ...

  9. UIToolbar 莫名黑线条 隐藏办法

    - (void)awakeFromNib { [self setBackgroundImage:[UIImage new]forToolbarPosition:UIBarPositionAny bar ...

  10. laravel安装学习步骤

    在看知乎比较php框架的优劣的时候提到为什么laravel这么好国内用的少,还有就是yii2,有人提到原因就是composer在国内无法使用.这制约了使用composer进行包管理的框架在国内的传播和 ...