文档章节

Java反射机制

IT-Mamba
 IT-Mamba
发布于 2017/12/07 15:59
字数 382
阅读 6
收藏 0

静态编译:在编译时确定类型,绑定对象。

动态编译:运行时确定类型,绑定对象。

Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法就是java的反射机制。

 

反射机制可以实现动态的创建和编译,使程序更灵活。

常见的获取Class类三种方法:

Class class1 = Demo.class;
ReflectDemo demo2= new Demo();
Class c2 = demo2.getClass();
Class c = Class.forName("person");
public class person {

    private String name;
    private int age;
    private String msg = "hello wrold!";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public person() {
    }

    private person(String name) {
        this.name = name;
        System.out.println(name);
    }

    public void fun() {
        System.out.println("funny");
    }

    public void fun(String name, int age) {
        System.out.println("NAME:" + name + ",AGE:" + age);
    }
}
Object o = per.newInstance();
Method method = per.getMethod("fun", String.class, int.class);//获取方法
method.invoke(o, "kobe", 24);

Method[] methods = per.getDeclaredMethods(); // 得到该类所有的方法,不包括父类的
Method[] methods1 = per.getMethods();// 得到该类所有的public方法,包括父类的

for (Method m : methods){
    System.out.println(m.getName());
}
Class c = Class.forName("person");
//获取成员变量
Field field = c.getDeclaredField("msg"); //因为msg变量是private的,所以不能用getField方法
//Field[] fields = c.getDeclaredFields();
//for (Field field : fields)
Object o = c.newInstance();
field.setAccessible(true);//设置是否允许访问,因为该变量是private的,所以要手动设置允许访问,如果msg是public的就不需要这行了。
Object msg = field.get(o);

 

 

 

© 著作权归作者所有

IT-Mamba
粉丝 10
博文 132
码字总数 55322
作品 0
惠州
程序员
私信 提问
Android 4.4(KK)中利用APP打开关闭数据流量

在Android 4.4中,在app中打开或关闭数据流量 如果有这方面需求可以参考。 思路 利用JAVA的反射机制(Reflection),来调用CONNECTIVITY_SERVICE完成相关操作。 关于JAVA的反射机制,可以参考...

W_X
2014/12/17
762
4
最最最常见的Java面试题总结——第二周

String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的? String和StringBuffer、StringBuilder的区别 可变性   String类中使用字符数组:保存字符串,所以String对象是...

Amsour丶
2018/08/13
0
0
【免费】全网独家:详解Java反射机制

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/silencezwm/article/details/85115991 【免费】全网独家:这是一份非常值得珍藏的Android知识体系!!! 本文...

silencezwm
2018/12/20
0
0
黑马程序员--JDK1.5新特性(二)

----------------------android培训、java培训、期待与您交流!---------------------- Java反射机制定义: Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性、方法...

长平狐
2013/07/01
62
0
云妹总结了一些最最最常见的Java面试题供大家参考

云妹导读:String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的? String和StringBuffer、StringBuilder的区别 可变性 String类中使用字符数组:private final cha...

阿里云科技快讯
2018/08/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
22分钟前
4
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
4
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
13
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
13
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部