Java -- 反射示例
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 -- 反射示例的更多相关文章
- Java反射与代理
Java反射机制与动态代理,使得Java更加强大,Spring核心概念IoC.AOP就是通过反射机制与动态代理实现的. 1 Java反射 示例: User user = new User( ...
- 五、JAVA反射、线程
第五节:Java反射.线程 线程 1.进程:进程是程序的基本执行实体,进程是线程的容器. 线程:被称为轻量进程,是程序执行流的最小单元.线程是进程中的一个实 ...
- Android中Java反射技术的使用示例
import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Metho ...
- Java 反射机制(包括组成、结构、示例说明等内容)
第1部分 Java 反射机制介绍 Java 反射机制.通俗来讲呢,就是在运行状态中,我们可以根据“类的部分已经的信息”来还原“类的全部的信息”.这里“类的部分已经的信息”,可以是“类名”或“类的对象” ...
- [转载]Java 反射机制(包括组成、结构、示例说明等内容)
FROM:http://www.cnblogs.com/skywang12345/p/3345205.html 第1部分 Java 反射机制介绍 Java 反射机制.通俗来讲呢,就是在运行状态中,我们 ...
- Java反射01 : 概念、入门示例、用途及注意事项
1.Java反射定义 本文转载自:https://blog.csdn.net/hanchao5272/article/details/79360452 官方定义如下: Reflection enabl ...
- Java反射常用示例
package xmq.study.reflection; import java.lang.annotation.Annotation; import java.lang.reflect.Const ...
- 第28章 java反射机制
java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...
- java基础知识(十一)java反射机制(上)
java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...
随机推荐
- synchronized加static区别
在多线程中,在synchronise方法上加上static 表示的是类锁,锁住的是整个类.而synchroinized 锁住的是当前方法,当前对象.
- 企业级Nginx服务基础到架构优化详解
1.隐藏nginx header版本号 2.更改源码隐藏软件名称 3.更改nginx默认用户及用户组 4.配置nginx worker进程个数 5.根据CPU核数进行nginx进程优化 6.nginx ...
- 【整理】Python中实际上已经得到了正确的Unicode或某种编码的字符,但是看起来或打印出来却是乱码
转自:http://www.crifan.com/python_already_got_correct_encoding_string_but_seems_print_messy_code/ [背景] ...
- FP Tree算法原理总结(转载)
FP Tree算法原理总结 在Apriori算法原理总结中,我们对Apriori算法的原理做了总结.作为一个挖掘频繁项集的算法,Apriori算法需要多次扫描数据,I/O是很大的瓶颈.为了解决这个问题 ...
- Borg Maze - poj 3026(BFS + Kruskal 算法)
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9821 Accepted: 3283 Description The B ...
- shell脚本注释方法
[1]单行注释 利用“#”对单行进行注释. 示例应用,新建文本,命名为test_single.sh 输入内容: # 单行注释 echo '单行注释' echo '123' # echo '456' e ...
- volatile的含义及使用场景
volatile保证线程间的数据是可见的(共享的),但不保证数据同步 volatile相当于synchronized的弱实现,也就是说volatile实现了类似synchronized的语义,却又没有 ...
- 写shader注意的一些报错
1.Shader warning in 'Custom/1': Both vertex and fragment programs must be present in a CGPROGRAM. Ex ...
- 高仿微信app (含有发红包,聊天,消息等)用到 Rxjava+Retrofit+MVP+Glide技术
https://github.com/GitLqr/LQRWeChat 技术很牛,可以看看
- 圆环自带动画进度条ColorfulRingProgressView
这是项目中遇到了,我也是借鉴大神的, 下载地址:https://github.com/oooohuhu/ColorfulRingProgressView 我把它导入了github中了,里面有详细的使用 ...