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程序运行时 ...
随机推荐
- Babel中的stage-0,stage-1,stage-2以及stage-3
大家知道,将ES6代码编译为ES5时,我们常用到Babel这个编译工具.大家参考一些网上的文章或者官方文档,里面常会建议大家在.babelrc中输入如下代码: { "presets" ...
- Ext如何Gird中如何显示时间类型的列?
rt,后台bean中的字段属性是Date类型,前台的model中的字段属性也设置为date类型,但是还是显示不出来,如何解决呢? 直接代码: grid中的COLUMN: Model中的定义:
- 创建自己的Spring Boot Starter
抽取通用模块作为项目的一个spring boot starter.可参照mybatis的写法. IDEA创建Empty Project并添加如下2个module,一个基本maven模块,另一个引入sp ...
- centos6搭建docker镜像私服
1.创建私服容器 docker run -d -e SETTINGS_FLAVOR=dev -e STORAGE_PATH=/tmp/registry -v /opt/data/registry:/t ...
- 地形混合shader
1.四个贴图混合 Shader "Custom/BlendTex_surface" { Properties { _RTexture("Red Channel Textu ...
- python语言特性-------python2.7教程学习【廖雪峰版】(一)
开始学习廖雪峰的py2.7教程: 2017年6月5日12:54:28 笔记: 廖雪峰python2.7教程1.用任何编程语言来开发程序,都是为了让计算机干活. 2.Python是一种相当高级的语言. ...
- 圆环自带动画进度条ColorfulRingProgressView
这是项目中遇到了,我也是借鉴大神的, 下载地址:https://github.com/oooohuhu/ColorfulRingProgressView 我把它导入了github中了,里面有详细的使用 ...
- 网络编程------socketserver模块以及socket模块的更多用法.
socketserver模块 内置模块 (其实现原理为并发) socketserver这个模块主要是为了解决: TCP协议中,服务器不能同时连接多个客户端的问题 是处于socket抽象层和应用层之间的 ...
- 【BZOJ2466】[中山市选2009]树 树形DP
[BZOJ2466][中山市选2009]树 Description 图论中的树为一个无环的无向图.给定一棵树,每个节点有一盏指示灯和一个按钮.如果节点的按扭被按了,那么该节点的灯会从熄灭变为点亮(当按 ...
- 【BZOJ3784】树上的路径 点分治序+ST表
[BZOJ3784]树上的路径 Description 给定一个N个结点的树,结点用正整数1..N编号.每条边有一个正整数权值.用d(a,b)表示从结点a到结点b路边上经过边的权值.其中要求a< ...