【java】反射简单示例
package 反射;
public class Test反射 {
public static void main(String[] args) {
System.out.println(Runtime.getRuntime().getClass());//class java.lang.Runtime
Test反射 t=new Test反射();
System.out.println(t.getClass());//class 反射.Test反射
}
}
getClass
package 反射;
public class Test反射 {
public static void main(String[] args) {
Test反射 t=new Test反射();
//Class类是反射操作的源头,所有的反射都要从此类开始进行。
Class<?> cls=t.getClass();//第1种Class类实例化方法,用的很少
System.out.println(cls);//class 反射.Test反射
Class<?> cls2=Test反射.class;//第2种Class类实例化方法,用的多,使用领域:Hibernate、Mybatis、Spring
System.out.println(cls2);//class 反射.Test反射
Class<?> cls3=null;
try {
cls3=Class.forName("反射.Test反射");//第3种Class类实例化方法,用的多。此处要写全名,即加上包名,否则报错。
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println(cls3);//class 反射.Test反射
}
}
Class类3种实例化方式
package 反射;
class A{
public A(){
System.out.println("调用无参构造实例化对象。");
}
@Override
public String toString() {
return "调用toString()方法。";
}
}
public class Test反射 {
public static void main(String[] args) {
Class<?> cls=null;
try {
cls=Class.forName("反射.A");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Object o=null;
try {
o=cls.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
System.out.println(o);
/**
* 运行结果:
* 调用无参构造实例化对象。
* 调用toString()方法。
*/
}
}
利用反射进行实例化对象
package 反射; import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException; class A{
private String name;
private int age;
public A(String name,int age){
System.out.println("调用有参构造实例化对象。");
this.name=name;
this.age=age;
}
@Override
public String toString() {
return "调用toString()方法:name="+name+",age="+age;
}
}
public class Test反射 {
public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
Class<?> cls=null;
try {
cls=Class.forName("反射.A");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Object o=null;
try {
Constructor<?> con=cls.getConstructor(String.class,int.class);
o=con.newInstance("张三",18);//从此处可以看出以后定义类的构造方法时最好保留一个无参构造。
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
System.out.println(o);
/**
* 运行结果:
* 调用有参构造实例化对象。
* 调用toString()方法:name=张三,age=18
*/
}
}
利用反射实例化对象,调用有参构造。
package 反射; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; class Person{
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public class Test反射 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
Class<?> cls=Class.forName("反射.Person");
Object obj=cls.newInstance();
Method methodSetName=cls.getMethod("setName", String.class);
Method methodGetName=cls.getMethod("getName");
methodSetName.invoke(obj, "张三");
System.out.println(methodGetName.invoke(obj));//张三
}
}
利用反射调用普通方法
package 反射;
import java.lang.reflect.Field;
class Person{
@SuppressWarnings("unused")
private String name;
}
public class Test反射 {
public static void main(String[] args) throws Exception {
Class<?> cls=Class.forName("反射.Person");
Object obj=cls.newInstance();
Field fieldName=cls.getDeclaredField("name");
fieldName.setAccessible(true);//私有属性的存取不建议用引方式,最好还是用setter和getter方法
fieldName.set(obj, "张三");
System.out.println(fieldName.get(obj));//张三
}
}
利用反射存取属性
【java】反射简单示例的更多相关文章
- Java反射常用示例
package xmq.study.reflection; import java.lang.annotation.Annotation; import java.lang.reflect.Const ...
- Java反射-简单应用
为了程序更好的维护和扩展,在面向对象思维的世界里,首先是面向接口编程,然后我们应该把做什么和怎么做进行分离. 以下我将用一个开晚会的样例来演示一下,终于达到的效果是:工厂+反射+配置文件实现程序的灵活 ...
- Java反射+简单工厂模式总结
除了 new 之外的创建对象的方法 通过 new 创建对象,会使得程序面向实现编程,先举个例子,某个果园里现在有两种水果,一种是苹果,一种是香蕉,有客户想采摘园子里的水果,要求用get()方法表示即可 ...
- Java反射 - 简单的给Bean赋值和取值
由于项目的实际需要,所以利用java反射原理写了一个简单给bean赋值和取值通用的类,在此记录下方便自己日后用到,也为需要的兄弟提供个参考例子. 工具类BeanRefUtil: package c ...
- Java反射简单使用--第一次细致阅读底层代码
1:所写的东西都经过验证,保证正确,环境jdk8,eclipse2:在例子中,尽量以生产环境中实际代码为例,那种固定值什么的没什么意义 问题: 1:想获取调用方法所需要的参数 2:参数是以json形式 ...
- Java 反射(简单捋一下)
有Student类,Person类,还有一个叫Class的类,这是反射的源头. 正常方式:通过完整的类名 > 通过new实例化 > 取得实例化对象 反射方式:实例化对象 > getC ...
- java反射简单实例
这篇博友的总结的反射知识点是比较全面的 http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html 下面介绍我用反射做的两个功能 ...
- JAVA反射机制示例,读取excel数据映射到JAVA对象中
import java.beans.PropertyDescriptor; import java.io.File; import java.io.FileInputStream; import ja ...
- Java反射机制示例
链接: http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html package com.stono.reftest; imp ...
随机推荐
- 使用webpack配置vue项目代理 (超简单)
我们都知道,前端开发跨域是一个很常见的问题,当然跨域的方法也有很多,现在我就给大家分享一个在vue项目中如何使用webpack做代理,步骤简单,操作方便,本人亲测,巨好使
- install plugin group_replication ERROR 1126 (HY000)
在给MySQL安装插件的时候,你可能会遇到如题所示的报错. 更详细的错误输出如下: mysql> INSTALL PLUGIN group_replication SONAME 'group_r ...
- SQL Server 的常见约束
1.主键约束------我是最常见的哦(PRIMARY KEY) 限制:不能为空,数据唯一,一个表中只有一个 方法: 建表时直接在列类型后面添加 如: CREATE TABLE stuDB ( S ...
- Less 原理
Less 原理 Less 包含一套自定义的语法及一个解析器,用户根据这些语法定义自己的样式规则,这些规则最终会通过解析器,编译生成对应的 CSS 文件. Less 并没有裁剪 CSS 原有的特性,更不 ...
- vue+echarts 动态绘制图表以及异步加载数据
前言 背景:vue写的后台管理,需要将表格数据绘制成图表(折线图,柱状图),图表数据都是通过接口请求回来的. 安装 cnpm install echarts --s (我这里用了淘宝镜像,不知道同学自 ...
- 【原创】1、简单理解微信小程序
先看下网站的运行方式: 而小程序是这样: what?就这样?是的,就这样.那小程序官方提供的Wafer,还有Wafer2...想太多了,抛弃它们吧.不应当为了解决一个简单的旧问题而去整一个复杂的新问题 ...
- javascript算法题判断输入年份是否是闰年
用户输入一个年份,判断这个年是否是闰年.判断闰年条件:① 非整百年数除以4,无余为闰,有余不闰:② 整百年数除以400,无余为闰,有余不闰.比如:2000年,整百数年,就要用②公式,除以400,无余数 ...
- HTTP协议之URL
1.什么是URL URL的全称是Uniform Resoure Locator,统一资源定位器.URL是浏览器寻找信息时所需的资源位置.当一个人将浏览器指向一个URL,浏览器就会在幕后发送适当的协议报 ...
- 浏览器Agent大全 (含IE 11, Edge)
Edge mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/51.0.27 ...
- 【tyvj P4868】天天和不可描述
http://www.tyvj.cn/p/4868 超级水的题,用递归来模拟,用链表保存这层的内容,每遇到一个左括号就递归一层并合并返回的链表,遇到右括号后返回. 递归进入下一层时传递个参数标记读取新 ...