《java反射机制剖析(一)》的API我们看到了许多接口和类,我们能够通过这些接口做些什么呢?

从上篇API中我们能看到它能够完成下面的这些功能:

1)     获得类

A.     运用getClass()  (每个class都有此函数)

i.    String str = "abc";

ii.    Class c1 = str.getClass();

B.     运用Class.forName() (static method 最常被使用)

i.    Class c1 = Class.forName ("java.lang.String");

ii.    Class c2 = Class.forName ("java.awt.Button");

C.     运用  .class 语法

i.    Class c1 = String.class;

ii.    Class c2 = java.awt.Button.class;

iii.    Class c4 = int.class;

iv.    Class c5 = int[].class;

D.     运用 TYPE语法 ( primitive wrapper classes 基本数据类型包装类的 TYPE语法)

i.    Class c1 = Boolean.TYPE;

2)     获得属性(这个功能的实例见Java反射机制剖析(2))

以下四个方法可以获得属性,主要参见的是Java.lang.class

Public  Field  getField

(String name)

返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段

public Field[] getFields()

返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段

Public  Field

getDeclaredField(String name)

返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段

public  Field[]

getDeclaredFields()

返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段

3)     获得方法()

以下四个方法可以获得方法,要参见的是Java.lang.class

public  Method

getMethod(String name,

... )

返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法

public Method[] getMethods()

返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法

public Method

getDeclaredMethod(String name,…)

返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法

public Method[]

getDeclaredMethods()

返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法

4)     获取类的构造器

以下四个方法可以获得方法,要参见的是Java.lang.class

public  Constructor

getConstructor(Class<?>... )

返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法

public  Constructor<?>[]

getConstructors()

返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有公共构造方法

Public  Constructor<T>

getDeclaredConstructor(Class<?>...)

返回一个 Constructor 对象,该对象反映此 Class 对象所表示的类或接口的指定构造方法

public  Constructor<?>[]

getDeclaredConstructors()

返回 Constructor 对象的一个数组,这些对象反映此 Class 对象表示的类声明的所有构造方法。它们是公共、保护、默认(包)访问和私有构造方法

实例

    import java.lang.reflect.Constructor;  

    public class TestConstructor {
/**
* @param args
* @throws ClassNotFoundException
* @throws SecurityException
* @throws NoSuchMethodException
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Class classType=Class.forName(args[0]);
Constructor Constructor= classType.getConstructor(); System.out.println(Constructor.toString()); } }

5)     新建类的实例

调用类的Class对象的newInstance方法

示例:

    import java.lang.reflect.Constructor;  

    public class TestConstructor {
/**
* @param args
* @throws ClassNotFoundException
* @throws SecurityException
* @throws NoSuchMethodException
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Class classType=Class.forName(args[0]);
//Constructor Constructor= classType.getConstructor();
Object inst=classType.newInstance();
System.out.println(inst);
}
}

调用默认Constructor对象的newInstance方法

示例:

    import java.lang.reflect.Constructor;  

    public class TestConstructor {
/**
* @param args
* @throws ClassNotFoundException
* @throws SecurityException
* @throws NoSuchMethodException
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Class classType=Class.forName(args[0]);
Constructor Constructor= classType.getConstructor();
Object inst=Constructor.newInstance();
System.out.println(inst);
}
}

调用带参数Constructor对象的newInstance方法

示例:

    Class classType=User.class
Constructor constructor2 =
classType.getDeclaredConstructor(int.class, String.class); Object inst = constructor2.newInstance(1, "123"); System.out.println(inst);

转自:http://blog.csdn.net/lfsf802/article/details/7239711

Java反射机制剖析(二)-功能以及举例的更多相关文章

  1. Java反射机制剖析(三)-简单谈谈动态代理

    通过Java反射机制剖析(一)和Java反射机制剖析(二)的学习,已经对反射有了一定的了解,这一篇通过动态代理的例子来进一步学习反射机制. 1.     代理模式 代理模式就是为其他对象提供一种代理来 ...

  2. Java反射机制剖析(四)-深度剖析动态代理原理及总结

    动态代理类原理(示例代码参见java反射机制剖析(三)) a)  理解上面的动态代理示例流程 a)  理解上面的动态代理示例流程 b)  代理接口实现类源代码剖析 咱们一起来剖析一下代理实现类($Pr ...

  3. Java反射机制剖析(一)-定义和API

    1.     什么是Java反射机制 Java的反射机制是在程序运行时,能够完全知道任何一个类,及其它的属性和方法,并且能够任意调用一个对象的属性和方法.这种运行时的动态获取就是Java的反射机制.其 ...

  4. java反射机制剖析(二)— Class Loader

    上一篇博客简要的提了一下java反射机制中涉及到的一些相关知识,那么ClassLoader就是当中之中的一个.本篇博客就具体的对ClassLoader做一个相对深入的了解. 作为了解须要知道的是.事实 ...

  5. 【54】Java反射机制剖析

    java反射机制: 1.指的是可以于运行时加载,探知和使用编译期间完全未知的类. 2.程序在运行状态中, 可以动态加载一个只有名称的类, 对于任意一个已经加载的类,都能够知道这个类的所有属性和方法; ...

  6. 菜鸟学Java(十五)——Java反射机制(二)

    上一篇博文<菜鸟学编程(九)——Java反射机制(一)>里面,向大家介绍了什么是Java的反射机制,以及Java的反射机制有什么用.上一篇比较偏重理论,理论的东西给人讲出来总感觉虚无缥缈, ...

  7. Java 反射机制(二)

    <Core Java Volume I --- Fundamentals>介绍了三种创建Class对象的方法.本文将举例说明这三种创建Class对象---创建类的方法. 一.public ...

  8. Java反射机制(二):通过反射取得类的结构

    在反射运用过程中,如果你想得到一个类的完整结构,那么就要使用到java.lang.reflect包中的几个类: · Constructor  表示类中的构造方法 · Field  表示类中的属性 · ...

  9. Java反射机制深度剖析

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! Java反射机制是Java语言中一种很重要的机制,可能在工作中用到的机会不多,但是在很多框架中都有用到这种机制.我们知道Java是一门静态 ...

随机推荐

  1. Springboot在IDEA中执行,开启热部署

    仅适用IDEA中,eclipse中不需要设置 一.开启idea自动make功能 1 - Enable Automake from the compiler PRESS: CTRL + SHIFT + ...

  2. java基础--动态代理实现与原理详细分析

    关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 一.代理模式                     ...

  3. Linux 入门笔记

    一开始对linux总有些抵触,黑黑的命令框不知道如何下手,这次因为工作交接的缘故需要负责之前同事的Node后端部分,node,redis这些都是部署在Linux上的,看了几次运维的同学噼里啪啦的敲命令 ...

  4. MarkDown 常用语法教程

    MarkDown 语法说明 [TOC] 标题 标题1 ====== 标题2 ----- ## 大标题 ### 小标题 #### 小标题 列表 无序列表 + 列表文本前使用 [减号+空格] * 列表文本 ...

  5. Java 原始数据类型

    如何记住 Java 中的原始数据类型? 画了一个图方便记忆:

  6. CF #312 E. A Simple Task 线段树

    题目链接:http://codeforces.com/problemset/problem/558/E 给一个字符串,每次对一个区间内的子串进行升序或者降序的排列,问最后字符串什么样子. 对于字符串排 ...

  7. JAVA常用集合源码解析系列-ArrayList源码解析(基于JDK8)

    文章系作者原创,如有转载请注明出处,如有雷同,那就雷同吧~(who care!) 一.写在前面 这是源码分析计划的第一篇,博主准备把一些常用的集合源码过一遍,比如:ArrayList.HashMap及 ...

  8. rapidPHP 1.1.0 介绍

    RapidPHP介绍 RapidPHP本着免费开源.快速.高效.简单的面向对象的 轻量级PHP开发框架. 版本: 1.1.0 官网: rapidPHP.gx521.cc 作者: 954418992@q ...

  9. MySQL AutoCommit带来的问题

    现象描述 测试中发现,服务A在得到了服务B的注册用户成功response以后,开始调用查询用户信息接口,却发现无法查询出任何结果.检查binlog发现,在查询请求之前,数据库确实已经完成了commit ...

  10. Scraping_regex

    上面链接爬虫只是能将我们所需的网页下载下来,但是,我们没办法得到我们想要的数据.因此,我们只有URL管理器和URL下载器是不足以组成一个完整的网络爬虫的.我们还需要URL解析器,对数据进行提取. 数据 ...