【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 ...
随机推荐
- 深入学习JS执行--单线程的JS
一.介绍 随着js不断学习,你可能会慢慢的好奇,用了这么久的js,却不知道这js在浏览器怎么被执行的,很尴尬.所以,我查阅很多资料来总结JS的执行过程,也分享出来,和大家一起学习. 本篇主要讲单线程的 ...
- short s1 = 1; s1 = s1 + 1;有错而short s1 = 1; s1 += 1正确。为何?
如果你认为表达式(x += i)只是表达式(x = x + i)的简写方式,这并不准确.这两个表达式都被称为赋值表达式.第二个表达式使用的是简单赋值操作符(=),而第一个表达式使用的是复合赋值操作符. ...
- MSSQL-并发控制-2-Isolation
如果转载,请注明博文来源: www.cnblogs.com/xinysu/ ,版权归 博客园 苏家小萝卜 所有.望各位支持! MySQL通过MVCC和锁来实现并发控制,在4 ...
- 流式处理的新贵 Kafka Stream - Kafka设计解析(七)
原创文章,转载请务必将下面这段话置于文章开头处. 本文转发自技术世界,原文链接 http://www.jasongj.com/kafka/kafka_stream/ Kafka Stream背景 Ka ...
- Activity切换动画---点击哪里从哪放大
emmmm,这次来梳理一下 Activity 切换动画的研究.首先,老规矩,看一下效果图: 效果图 这次要实现的动画效果就是类似于上图那样,点击某个 view,就从那个 view 展开下个 Activ ...
- react入门到进阶(一)
一.何为react Facebook在F8会议上首次提出这个概念,一套全新的框架就此诞生. React 不是一个完整的 MVC.MVVM 框架,其只负责 View 层 React 跟 Web Comp ...
- Akka(39): Http:File streaming-文件交换
所谓文件交换指的是Http协议中服务端和客户端之间文件的上传和下载.Akka-http作为一种系统集成工具应该具备高效率的数据交换方式包括文件交换和数据库表行的上传下载.Akka-http的数据交换模 ...
- is 和==的区别
Python中的对象包含三要素:id.type.value.其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值.is判断的是a对象是否就是b对象,是通过id来判断的.==判断的 ...
- WebApi接收复杂类型参数
当接收实体时,该实体类不能添加Serializable属性,否则传来的json数据无法映射成功?
- Taffy Web开发,Python Flask实践详解
1. 前言 最近为Taffy自动化测试框架写了个页面,主要实现了用例管理.执行,测试报告查看管理.发送邮件及配置等功能. 2. 实现细节 页面使用Python Flask +Bootstrap开发,还 ...