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. synchronized加static区别

    在多线程中,在synchronise方法上加上static 表示的是类锁,锁住的是整个类.而synchroinized 锁住的是当前方法,当前对象.

  2. 企业级Nginx服务基础到架构优化详解

    1.隐藏nginx header版本号 2.更改源码隐藏软件名称 3.更改nginx默认用户及用户组 4.配置nginx worker进程个数 5.根据CPU核数进行nginx进程优化 6.nginx ...

  3. 【整理】Python中实际上已经得到了正确的Unicode或某种编码的字符,但是看起来或打印出来却是乱码

    转自:http://www.crifan.com/python_already_got_correct_encoding_string_but_seems_print_messy_code/ [背景] ...

  4. FP Tree算法原理总结(转载)

    FP Tree算法原理总结 在Apriori算法原理总结中,我们对Apriori算法的原理做了总结.作为一个挖掘频繁项集的算法,Apriori算法需要多次扫描数据,I/O是很大的瓶颈.为了解决这个问题 ...

  5. Borg Maze - poj 3026(BFS + Kruskal 算法)

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9821   Accepted: 3283 Description The B ...

  6. shell脚本注释方法

    [1]单行注释 利用“#”对单行进行注释. 示例应用,新建文本,命名为test_single.sh 输入内容: # 单行注释 echo '单行注释' echo '123' # echo '456' e ...

  7. volatile的含义及使用场景

    volatile保证线程间的数据是可见的(共享的),但不保证数据同步 volatile相当于synchronized的弱实现,也就是说volatile实现了类似synchronized的语义,却又没有 ...

  8. 写shader注意的一些报错

    1.Shader warning in 'Custom/1': Both vertex and fragment programs must be present in a CGPROGRAM. Ex ...

  9. 高仿微信app (含有发红包,聊天,消息等)用到 Rxjava+Retrofit+MVP+Glide技术

    https://github.com/GitLqr/LQRWeChat 技术很牛,可以看看

  10. 圆环自带动画进度条ColorfulRingProgressView

    这是项目中遇到了,我也是借鉴大神的, 下载地址:https://github.com/oooohuhu/ColorfulRingProgressView 我把它导入了github中了,里面有详细的使用 ...