1. 反射: 即加载和解剖, 用于设计框架, 读取配置档 动态创建对象。

Person类,用于反射。

package com.kevin.class_test;

public class Person {

	public String namestr="aaaa";

	public Person()
{
System.out.println("public constructor");
}
private Person(String name)
{
System.out.println("private constructor " + name);
}
public Person(String name1, String name2)
{
System.out.println("public constructor " + name1 + name2);
} public void fun()
{
System.out.println("in fun: " + namestr);
} public String fun(String name)
{
System.out.println("in fun: " + namestr + name);
return "Yes";
} public static void main(String[] args)
{
System.out.println("in main");
for(String str : args)
{
System.out.println(str);
}
}
}

反射的使用实例, 使用Junit测试

package com.kevin.class_test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; public class JunitTest { Class clazz = null; //建立Class对象 @Before
public void before() throws Exception //初始化@before
{
System.out.println("before");
clazz = Class.forName("com.kevin.class_test.Person"); //加载类,一定要用类全名
} @Test
public void test() throws Exception {
Person person = (Person) clazz.newInstance(); //反射实例化对象
person.fun();
} @Test
public void test2() throws Exception {
Constructor cons = clazz.getDeclaredConstructor(String.class); //反射获取private方法
cons.setAccessible(true); //改变private属性
Person person = (Person) cons.newInstance("kevin"); //使用获取的构造器 实例化对象
person.fun();
} @Test
public void test3() throws Exception {
Person p = new Person();
Method method = clazz.getMethod("fun", String.class); //反射获取public方法
String result = (String) method.invoke(p, "xiang");
System.out.println("result: " + result);
} @Test
public void test4() throws Exception {
Method method = clazz.getMethod("main", String[].class); //反射获取main方法
method.invoke(null, (Object)new String[]{"a","b"}); //必须将String[]掩饰为Object,不然会参数异常报错
} @Test
public void test5() throws Exception {
Person p = new Person();
Field field = clazz.getField("namestr"); //反射获取属性
Object value = field.get(p); //获取属性值
Class type = field.getType(); //获取属性值类型
if( type.equals(String.class) )
{
String str = (String)value; //类型转换
System.out.println("str: " + str);
}
field.set(p, "bbbb"); //修改属性
System.out.println("str: " + p.namestr);
} @After
public void after()
{
System.out.println("atfer");
}
}

Java -- 反射示例的更多相关文章

  1. Java反射与代理

    Java反射机制与动态代理,使得Java更加强大,Spring核心概念IoC.AOP就是通过反射机制与动态代理实现的. 1       Java反射 示例: User user = new User( ...

  2. 五、JAVA反射、线程

    第五节:Java反射.线程 线程   1.进程:进程是程序的基本执行实体,进程是线程的容器.    线程:被称为轻量进程,是程序执行流的最小单元.线程是进程中的一个实                  ...

  3. Android中Java反射技术的使用示例

    import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Metho ...

  4. Java 反射机制(包括组成、结构、示例说明等内容)

    第1部分 Java 反射机制介绍 Java 反射机制.通俗来讲呢,就是在运行状态中,我们可以根据“类的部分已经的信息”来还原“类的全部的信息”.这里“类的部分已经的信息”,可以是“类名”或“类的对象” ...

  5. [转载]Java 反射机制(包括组成、结构、示例说明等内容)

    FROM:http://www.cnblogs.com/skywang12345/p/3345205.html 第1部分 Java 反射机制介绍 Java 反射机制.通俗来讲呢,就是在运行状态中,我们 ...

  6. Java反射01 : 概念、入门示例、用途及注意事项

    1.Java反射定义 本文转载自:https://blog.csdn.net/hanchao5272/article/details/79360452 官方定义如下: Reflection enabl ...

  7. Java反射常用示例

    package xmq.study.reflection; import java.lang.annotation.Annotation; import java.lang.reflect.Const ...

  8. 第28章 java反射机制

    java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...

  9. java基础知识(十一)java反射机制(上)

    java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...

随机推荐

  1. sqlserver修改表主键自增

    alter table tname add id int  identity(1,1)

  2. 运用Arc Hydro提取河网

    Arc hydro 插件需要 spatial analyst 支持: 解决方法:Tools菜单>>Extensions...,勾选Spatial Analyst 1.设置存储路径 ApUt ...

  3. codeforces #364d As Fast As Possible

    题意:一群学生,要到离这里为l的地方去.有一辆车,车只有k个座位.人和车的速度分别v1,v2,问你所有人到达的最小时间. 思路:数学题.最小时间就是要求所有同学同时到达.每个同学最多上一次车.那么显然 ...

  4. FPGA开发流程

    需求说明:Verilog设计 内容       :FPGA开发基本流程及注意事项 来自       :时间的诗 原文来自:http://www.dzsc.com/data/2015-3-16/1080 ...

  5. nodejs eclipse

    nodejs下载地址 http://nodejs.org/1.下载并安装完nodejs后,打开cmd命令窗口,输入node -v,如果正确输出版本号,就是安装成功了,如果说node不是windows的 ...

  6. 机器学习7—AdaBoost学习笔记

    Adaboost算法原理分析和实例+代码(简明易懂)(转载) [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/709953 ...

  7. Viewer 是一款强大的 jQuery 图像浏览插件。

    Viewer 是一款强大的 jQuery 图像浏览插件. 主要功能: 支持选项 支持方法 支持事件 支持触摸 支持移动 支持缩放 支持旋转 支持键盘 跨浏览器支持 链接: viewer的官方演示,及g ...

  8. VSCode 运行go test显示打印日志

    在VSCode中运行go test,在代码中写的 fmt.Printf("TestB \n") 这些语句均不打印,只显示最终的结果 PASS ok github.com/B .03 ...

  9. hihoCoder#1037 : 数字三角形(DP)

    [题目链接]:click here~~ 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 问题描写叙述 小Hi和小Ho在经历了螃蟹先生的任务之后被奖励了一次出国旅游的机会,于是他 ...

  10. centos7.0 增加/usr分区的容量减少home分区的大小

    把/home内容备份,然后将/home文件系统所在的逻辑卷删除,扩大/root文件系统,新建/home:tar cvf /tmp/home.tar /home #备份/homeumount /home ...