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. 从头认识Spring-1.15 对SpEl的值的操作(1)-数值运算

    这一章节我们来讨论一下对SpEl的值的运算. 1.domain 烤炉类:(不变) package com.raylee.my_new_spring.my_new_spring.ch01.topic_1 ...

  2. Matlab中使用jython扩展功能

    Matlab中面向对象能力并不强,通过使用jython引擎能够对其功能扩展. 1 编辑classpath.txt增加jython.jar 在matlab中输入 which classpath.txt ...

  3. O(n)求素数,求欧拉函数,求莫比乌斯函数,求对mod的逆元,各种求

    筛素数 void shai() { no[1]=true;no[0]=true; for(int i=2;i<=r;i++) { if(!no[i]) p[++p[0]]=i; int j=1, ...

  4. WAF绕过方法

    1.大小写绕过 这个大家都很熟悉,对于一些太垃圾的WAF效果显著,比如拦截了union,那就使用Union UnIoN等等绕过. 2.简单编码绕过 比如WAF检测关键字,那么我们让他检测不到就可以了. ...

  5. Tkinter 控件详细介绍

    Tkinter 控件详细介绍 1.Button 按钮.类似标签,但提供额外的功能,例如鼠标掠过.按下.释放以及键盘操作/事件 2.Canvas 画布.提供绘图功能(直线.椭圆.多边形.矩形) ;可以包 ...

  6. 使用Swoole加速Laravel(正式环境中)

    1 Laravel的速度瓶颈在哪? 1.1 已有的一些优化方法 1.1.1 laravel官方提供了一些优化laravel的优化方法 php artisan optimize php artisan ...

  7. LNMP环境搭建(二:MySQL)

    1.获取MySQL官方的rpm包,根据操作系统与需要安装的MySQL版本进行选择,官方地址:https://www.mysql.com/downloads/ # cd /usr/local/src # ...

  8. 白昼夢 / Daydream(模拟)

    C - 白昼夢 / Daydream Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem Statement You ...

  9. 在普通网页中如何调用html5+的plus对象

    <script> //用法: HTML5+的plus对象,必须由click事件触发后,才能在普通网页中使用.所以在没有click的情况下,调用本文件可以解决问题! //在代码中使用: pl ...

  10. 【译】StackOverflow——Java 中的 finally 代码块是否总会被执行?

    问题 有一个 try/catch 代码块,其中包含一个打印语句.finally代码块总会被调用么? 示例: try { something(); return success; } catch (Ex ...