一、Class类

1、类是对象,类是java.lang.Class类的实例对象,这个对象称为该类的类类型;

2、任何一个类都是Class的实例对象,类的表达式:

  (1)Class c1 = int.Class;

  (2) Class c2 = c1.getClass();

  (3) Class c3 =null; c3 = Class.forName ("com.imooc.reflect.Foo");

3、任何一个类都有一个隐含的静态成员变量;

4、创建类类型创建该类的实例对象:

  c1.newInstance();//需要进行强制类型转换,前提是需要有无参数的构造方法

5、Class.forName("类的全称")不仅表示了类的类类型,还表示了动态加载类;

6、编译时刻加载类是静态加载类,运行时刻加载类是动态加载类;

7、通过new创建对象是静态加载类,在编译时刻就需要加载所有的可能使用到的类;

二、方法的反射

1、如何获得方法

  方法名和方法的参数列表才能唯一决定某个方法;

2、方法的反射操作

  method.invoke(Object,fields);//和直接调用的效果一样

3、为什么要用到方法的反射

  指定方法名调用方法,例如通过标准的javabean的属性名获取其属性值

4、通过Class,Method来认识泛型的本质:

  反射的操作都是编译后的操作,编译之后集合的泛型是去泛型化的

  Java中集合的泛型是防止错误输入的,只在编译阶段有效,绕过编译就无效了(绕过编译就绕过了泛型)

三、成员变量的反射

1、获取成员变量信息

(1)成员变量也是对象,Java.lang.reflect.Field

(2)Field类封装了关于成员变量的操作

(3)getFields()方法获取的是所有的Public的成员变量的信息

(4)getDeclaredFields()获取的是该类自己声明的成员变量的信息

四、构造方法的放射

1、构造函数也是对象,java.lang.Constructor中封装了构造函数的操作

2、getConstructors获取所有的public的构造方法

3、getDeclaredConstructors获取的是所有的构造函数

4、3中获取的构造函数,Constructor.getParameterTypes()得到的是参数列表的类类型

五、Java类的加载机制

1、类名.getName(),获取类的类类型的全程;

2、类名.getSimpleName(),获取类类型名称,不含包名

3、getDeclaredMethods()获取的是所有该类自己声明的方法

4、Method类,方法对象,一个成员方法就是一个Method对象

5、gerMethods()获取类的方法,取的是所有public的函数,包括从父类继承而来的,不问访问权限

6、getReturnType()获取方法的返回值的类类型

7、getParameterTypes()得到参数列表的的类型的类类型

最后附上反射部分的练习代码:

public class ReflectTest {
public static void main(String args[]){
try {
Class class1 = String.class;//创建对象class1
//Class class2 = float.class;//创建对象class1 Field[] field=class1.getFields();//获取class1的所有成员变量
Method[] methods =class1.getMethods();//获取class1的所有方法
Constructor[] constructor=class1.getConstructors();//获取class1的所有构造方法 System.out.println("=======class1的成员变量======");
for (Field field2 : field) {
System.out.println(field2.getName());
} System.out.println("=======class1的所有方法======"); for (Method m : methods) {//遍历class1的所有方法
System.out.print(m.getName()+"(");
Parameter[] pms=m.getParameters();
for (Parameter p : pms) {//遍历方法的参数列表
System.out.print(p.getType()+",");
}
//m.invoke(obj, args);
System.out.println(")");
}
System.out.println("=======class1的所有构造方法======");
for (Constructor constructor2 : constructor) {//遍历class1的所有构造方法
System.out.print(constructor2.getName()+"(");
Parameter[] pm2 = constructor2.getParameters();
for (Parameter pc : pm2) {//遍历构造方法的参数列表
System.out.print(pc.getType().getName()+",");
}
System.out.println(")");
} } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}

  

java进阶——反射(Reflect)的更多相关文章

  1. Java基础——反射 reflect

    什么是反射 (1)Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称 ...

  2. java笔记--反射进阶之总结与详解

    一.反射进阶之动态设置类的私有域 "封装"是Java的三大特性之一,为了能更好保证其封装性,我们往往需要将域设置成私有的, 然后通过提供相对应的set和get方法来操作这个域.但是 ...

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

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

  4. JAVA进阶之旅(二)——认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践

    JAVA进阶之旅(二)--认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践 我们继续聊JAVA,这次比较有意思,那就是反射了 一.认识 ...

  5. Java进阶(六)Java反射机制可恶问题NoSuchFieldException

    作为一种重要特性,Java反射机制在很多地方会用到.在此做一小结,供朋友们参考. 首先从一个问题开始着手. 可恶的问题又来了,NoSuchFieldException,如下图所示: 完全不知道这个qu ...

  6. Java的反射机制Reflect

    简介: 动态获取类的信息.动态调用对象的方法的功能叫做:Java 的反射(Reflection)机制. Reflection是不同于C++等静态语言,而被视为准动态语言的关键性质.反射机制允许程序在运 ...

  7. Java基础-反射(reflect)技术详解

    Java基础-反射(reflect)技术详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.类加载器 1>.JVM 类加载机制  如下图所示,JVM类加载机制分为五个部分 ...

  8. Java中的反射--Reflect

    在张孝祥老师的Java讲解中,学习到了Java反射的一部分知识,觉得有必要好好学习一下哈. 一.反射的理解 经典总结:反射就是把Java类中的各种成分映射成为相应的Java类 例如:一个Java类中用 ...

  9. Java进阶(二十五)Java连接mysql数据库(底层实现)

    Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜 ...

随机推荐

  1. java 中的拦截器和过滤器

    区别: 1.拦截器是基于java的反射机制的,而过滤器是基于函数回调 2.过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3.拦截器只能对action请求起作用,而过滤器则可以对几 ...

  2. Android之史上最全最简单最有用的第三方开源库收集整理

    Android开源库 自己一直很喜欢Android开发,就如博客签名一样, 我是程序猿,我为自己代言 . 在摸索过程中,GitHub上搜集了很多很棒的Android第三方库,推荐给在苦苦寻找的开发者, ...

  3. Fchart

    1.FCF_Column3D.swf <?xml version="1.0" encoding="UTF-8"?> <graph bgcolo ...

  4. 4 Python 日期和时间

    Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能. Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间. 时间间隔是以秒为单位的浮点小数. ...

  5. Python TCP通信网络编程

    最近在看廖雪峰老师的基础教程(http://www.liaoxuefeng.com/),今天实现了一下简单Python的Socket的网络编程. 1. Socket网络编程 Socket是网络编程的一 ...

  6. Cot

    题目大意 两种操作 给坐标上一个直角三角形中每个整点权值$+1$ 求坐标上一个直角三角形中每个整点权值之和 题解 一顿分析思考加推导之后,发现并不存在这样的数据结构(大概是有,只是我不知道),于是考虑 ...

  7. Gym 100801B Black and White(构造)

    题意:给定X,Y,分别表示由'.'和'@'组成的连通块的个数. 思路:假如X<Y,我们用两部分来构造这个结果,第一部分由一个'.'连通块和Y-(X-1)割'@'连通块组成,第二个部分由X-1个' ...

  8. bzoj 1819: 电子字典 Trie

    题目: Description 人们在英文字典中查找某个单词的时候可能不知道该单词的完整拼法,而只知道该单词的一个错误的近似拼法,这时人们可能陷入困境,为了查找一个单词而浪费大量的时间.带有模糊查询功 ...

  9. poj 1208 Web Navigation(堆栈操作)

    一.Description Standard web browsers contain features to move backward and forward among the pages re ...

  10. HDOJ1059(多重背包)

    1.解法一:多重背包 #include<iostream> #include<cstdio> using namespace std; #define MAX(a,b) (a& ...