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. [原] MSSQL MDF文件太大问题

    USE 你的库名; GO -- 数据库空间使用情况 EXEC sp_spaceused; -- 查下文件空间使用情况 SELECT file_id, name, [文件大小(MB)] = size / ...

  2. Flexbox布局(转)

    Flexbox布局( Flexible Box 或CSS3 弹性布局),是CSS3中的一种新的布局模式,是可以自动调整子元素的高和宽,来很好的填充任何不同屏幕大小的显示设备中的可用显示空间,收缩内容防 ...

  3. oracle实例恢复之检查点队列

    chain即链. oracle中链有很多种,LRU.LRUW.checkpoint queue等,都是干什么的呢??? LRU将可用块(干净的块)串起来.LRUW将脏块串起来,指导DBWR进程率先将冷 ...

  4. 【实践】js实现简易的四则运算计算器

    最近看了一个大神推荐的某公司面试程序员的js 面试题,题目是用js 做一个计算器于是跟着大神的思想自己做了一下 ps:功能还没有完善好毕竟自己还是一只菜鸟还在不断学习中. 闲话不多说先上css代码 & ...

  5. python学习笔记之类class(第六天)

         参考文档:              1.金角大王博客:http://www.cnblogs.com/alex3714/articles/5188179.html               ...

  6. C语言 06 指针

    int *p; //第一个*是象征意义. p = &a; 等价于 int *p = &a; //第二个*是不正确的 *p = &a; //第三个*是访问指针变量指向的存储空间. ...

  7. maven国内镜像(maven下载慢的解决方法)

    Maven是当前流行的项目管理工具,但官方的库在国外经常连不上,连上也下载速度很慢.国内oschina的maven服务器很早之前就关了.今天发现阿里云的一个中央仓库,亲测可用. <mirror& ...

  8. angularJS中directive与directive 之间的通信

    上一篇讲了directive与controller之间的通信:但是我们directive与directive之间的通信呢? 当我们两个directive嵌套使用的时候怎么保证子directive不会被 ...

  9. 阐述ArrayList、Vector、LinkedList的存储性能和特性。

    答:ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快 ...

  10. IOS 视频缩略图的生成

    使用AVFoundation框架可以生成视频缩略图,用到的类: >>AVAsset: 用于获取多媒体的相关信息,如多媒体的画面和声音等. >>AVURLAsset: AVAss ...