【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 ...
随机推荐
- AI 新技术革命将如何重塑就业和全球化格局?深度解读 UN 报告(上篇)
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 张钦坤 腾讯研究院秘书长蔡雄山 腾讯研究院法律研究中心副主任祝林华 腾讯研究院法律研究中心助理研究员曹建峰 腾讯研究院法律研究中心高级研究员 ...
- CocoaPods 安装及使用
1.开启 terminal 2.移除现有 Ruby 默认源 $ gem sources --remove https://rubygems.org/ 3.使用新的源 $ gem sources -a ...
- enote笔记法(2)——why的使用
章节:why的使用 用法: why 概念|词汇(比概念更一般的形式的keyword)|短语|句子 用法1: why 概念|why keyword([比概念更一般的形式的keyword]) “why 概 ...
- Adobe阅读器漏洞(adobe_cooltype_sing)学习研究
实验环境:Kali 2.0+Windows XP sp3+Adobe Reader 9.0.0 类别:缓冲区溢出 描述:这个漏洞针对Adobe阅读器9.3.4之前的版本,一个名为SING表对象中一个名 ...
- Python 函数返回值
本章详细介绍 返回值: 0x 00 返回值简介 0x 01 指定返回值与隐含返回值 0x 02 return 语句位置与多条 return 语句 0x 03 返回值类型 0x 04 函数嵌套 0x 0 ...
- 拼写纠错的利器,BK树算法
BK树或者称为Burkhard-Keller树,是一种基于树的数据结构,被设计于快速查找近似字符串匹配,比方说拼写纠错,或模糊查找,当搜索”aeek”时能返回”seek”和”peek”. 本文首先剖析 ...
- 《java.util.concurrent 包源码阅读》24 Fork/Join框架之Work-Stealing
仔细看了Doug Lea的那篇文章:A Java Fork/Join Framework 中关于Work-Stealing的部分,下面列出该算法的要点(基本是原文的翻译): 1. 每个Worker线程 ...
- Android - "cause failed to find target android-14" 问题
在导入别人的工程项目时经常会遇到各种问题,本文中的就是其中SDK不对导致的 在导入项目时已经修改了 两个build.gradle文件 错误的原因是后面中这两项没修改. compileSdkVers ...
- ML笔记:Where does the error come from?
error来自哪? 来自于偏差Bias和方差Variance. 就如打靶时瞄准一个点f平均,打出的点f星分布在该点周围. 该点与实际靶心f帽的距离就是偏差Bias, 打出的点与该点的分布距离就是方差V ...
- IntelliJ IDEA(三) :常用快捷键
说IDEA对新手来说难,可能其中一个原因就是快捷键组合多而且复杂但是它也很全,基本所有功能都可以通过快捷键来完成,可以这么说,如果你掌握了所有IDEA的快捷键使用,那么你完全可以丢掉鼠标,而且不影响开 ...