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】反射简单示例的更多相关文章

  1. Java反射常用示例

    package xmq.study.reflection; import java.lang.annotation.Annotation; import java.lang.reflect.Const ...

  2. Java反射-简单应用

    为了程序更好的维护和扩展,在面向对象思维的世界里,首先是面向接口编程,然后我们应该把做什么和怎么做进行分离. 以下我将用一个开晚会的样例来演示一下,终于达到的效果是:工厂+反射+配置文件实现程序的灵活 ...

  3. Java反射+简单工厂模式总结

    除了 new 之外的创建对象的方法 通过 new 创建对象,会使得程序面向实现编程,先举个例子,某个果园里现在有两种水果,一种是苹果,一种是香蕉,有客户想采摘园子里的水果,要求用get()方法表示即可 ...

  4. Java反射 - 简单的给Bean赋值和取值

    由于项目的实际需要,所以利用java反射原理写了一个简单给bean赋值和取值通用的类,在此记录下方便自己日后用到,也为需要的兄弟提供个参考例子. 工具类BeanRefUtil:   package c ...

  5. Java反射简单使用--第一次细致阅读底层代码

    1:所写的东西都经过验证,保证正确,环境jdk8,eclipse2:在例子中,尽量以生产环境中实际代码为例,那种固定值什么的没什么意义 问题: 1:想获取调用方法所需要的参数 2:参数是以json形式 ...

  6. Java 反射(简单捋一下)

    有Student类,Person类,还有一个叫Class的类,这是反射的源头. 正常方式:通过完整的类名 > 通过new实例化 > 取得实例化对象 反射方式:实例化对象 > getC ...

  7. java反射简单实例

    这篇博友的总结的反射知识点是比较全面的 http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html 下面介绍我用反射做的两个功能 ...

  8. JAVA反射机制示例,读取excel数据映射到JAVA对象中

    import java.beans.PropertyDescriptor; import java.io.File; import java.io.FileInputStream; import ja ...

  9. Java反射机制示例

    链接: http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html package com.stono.reftest; imp ...

随机推荐

  1. STM32基础问题分析——PWM配置

    STM32基础问题分析--PWM配置 在使用STM32F103产生固定频率.固定占空比的PWM波时,虽然有官方以及众多开发板提供的例程,但是关于有点问题并没有说的很清晰,并且<STM32F10X ...

  2. SpringBoot之文件读取

    SpringBoot 寻找启动配置文件规则如下: 当前目录下的 config 目录 当前目录 classpath 下的 config 目录 classpath 下的 root 目录(根路径) 上面的优 ...

  3. SimpleMarkdown - 一款简单的Markdown编辑器

    源码地址: https://github.com/zhuangZhou/SimpleMarkdown 预览地址: http://hawkzz.com:8000 作者网站:http://hawkzz.c ...

  4. 通用Adapter设计,SparseArray+泛型+回调的使用

    看到题目,我相信聪明的各位已经有一定想法了. 一个Adapter,最简单的优化就是使用泛型,他可以省去非常多的代码,不过在此之上,我们还可以继续优化,优化他的好基友是:ViewHolder. 在过去, ...

  5. Django框架中的视图和模板

    视图views django中的视图就是用来定义函数来处理一些逻辑的核心地方. django中通过urls来建立路径跟views中的视图函数的映射关系. urls中的映射关系 ''' urlpatte ...

  6. HDU4046--Panda(树状数组)

    Panda Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  7. c语言的发展历程

    C语言的发展颇为有趣.它的原型ALGOL 60语言. 1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言. 1967年,剑桥大学 ...

  8. 前端测试框架Jest系列教程 -- Global Functions(全局函数)

    写在前面: Jest中定义了很多全局性的Function供我们使用,我们不必再去引用别的包来去实现类似的功能,下面将列举Jest中实现的全局函数. Jest Global Functions afte ...

  9. Cs Round#56 D Find Path Union

    题意:有一棵如下的完全二叉树,求所有给定结点到根节点的路径的并有多少条边. 一开始联想到线段树,发现结点的排布很像线段树的标号.于是模仿线段树敲了一下,交上去发现3个点MLE了... 无心优化,跑去看 ...

  10. dubbo源码—dubbo自定义spring xml标签

    dubbo为了和spring更好的集成,提供了一些xml配置标签,也就是自定义标签 spring自定义标签 spring自定义标签的方式如下: 设计配置属性和JavaBean 编写xsd文件,校验xm ...