JVM(四),什么是反射

四、什么是反射

1.反射理论

2.反射实践

(1)创建Robot类

public class Robot {
    private String name;
    public void sayHi(String helloSentence){
        System.out.println(helloSentence + " " + name);
    }
    private String throwHello(String tag){
        return "Hello " + tag;
    }
    static {
        System.out.println("Hello Robot");
    }
}

(2)各种操作

public class ReflectSample {
    public static void main(String[] args) throws Exception{
        Class rc = Class.forName("com.interview.javabasic.reflect.Robot");
        Robot r = (Robot) rc.newInstance();
        System.out.println("Class name is " + rc.getName());

        //调用私有方法rc.getDeclaredMethod
        Method getHello = rc.getDeclaredMethod("throwHello", String.class);
        getHello.setAccessible(true);
        Object str = getHello.invoke(r, "Bob");
        System.out.println("getHello result is " + str);

        //调用PUBLIC方法rc.getMethod
        Method sayHi = rc.getMethod("sayHi", String.class);
        sayHi.invoke(r, "Welcome");

        //设置私有属性
        Field name = rc.getDeclaredField("name");
        name.setAccessible(true);
        name.set(r, "Alice");
        sayHi.invoke(r, "Welcome");

    }
}

原文地址:https://www.cnblogs.com/xzmxddx/p/10366867.html

时间: 2024-10-05 02:57:05

JVM(四),什么是反射的相关文章

《深入理解Java虚拟机》- JVM是如何实现反射的

Java反射学问很深,这里就浅谈吧.如果涉及到方法内联,逃逸分析的话,我们就说说是什么就好了.有兴趣的可以去另外看看,我后面可能也会写一下.(因为我也不会呀~) 一.Java反射是什么? 反射的核心是JVM在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁. 反射是由类开始的,从class对象中,我们可以获得有关该类的全部成员的完整列表:可以找出该类的所有类型.类自身信息. 二.反射的一些应用 1.java集成开发环境,每当我们敲入点号时,IDE便会根

JVM(四):深入分析Java字节码-下

JVM(四):深入分析Java字节码-下 在上文中,我们讲解了 Class 文件中的文件标识,常量池等内容.在本文中,我们就详细说一下剩下的指令集内容,阐述其分别代表了什么含义,以及 JVM 团队这样设计的意义. 简介 JVM 指令设计为仅有一个字节长度,由操作码和紧随其后的零至多个操作数来构成. 这里说到 JVM 的指令仅有一个字节,这意味着 JVM 在操作超过一个字节长度的数据时,需要在运行时重建出多字节数据类型的具体数据结构,例如 Long 等.这会导致这个操作不是原子操作,在高并发的情况

第二十四部分_Java反射详解

Java语言的反射机制 在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?答案是肯定的.这种动态获取类的信息以及动态调用对象的方法的功能来自于Java语言的反射(Reflection)机制. Java反射机制主要提供了以下功能 在运行时判断任意一个对象所属的类. 在运行时构造任意一个类的对象. 在运行时判断任意一个类所具有的成员变量和方法. 在运行时调用任意一个对象的方法. Reflection是Java被视为动态(或准动态)语言

我的学习之路_第十四章_反射

类的反射 [获取class文件对象的三种方式]: ● 使用Object类中的方法 getClass() Class<?> getClass() 返回此Object的运行时类. ● 使用类名.class属性 每一个数据类型,基本数据类型和引用数据类型,Java都会为其设置一个class属性 例如: Class class = int.class Class class = String.class Class class = Person.class● 使用Class类中的静态方法forName

PBR Step by Step(四)光照反射模型

光照可分为局部光照和全局光照. 局部光照:直接照射到物体表面的光照 全局光照:物体表面受周围环境影响的光照 左图中点x接收到周围环境的光线照射,来自周围表面的反射光照称为全局光照:右图中点x接收来自太阳光的直接照射,来自太阳发射的直接光照称为局部光照. 在现实环境中,全局光照的情况更为复杂,例如: 半透明表面(Semi-transparent surfaces):光线可以穿过表面进行复杂的交互,如玻璃棱镜,可以改变光的波长: 次表面散射(Sub-Surface Scattering):光线可以穿

一步步优化JVM四:决定Java堆的大小以及内存占用

原文:http://blog.csdn.net/zhoutao198712/article/details/7783070 到目前为止,还没有做明确的优化工作.只是做了初始化选择工作,比如说:JVM部署模型.JVM运行环境.收集哪些垃圾回收器的信息以及需要遵守垃圾回收原则.这一步将介绍如何评估应用需要的内存大小以及Java堆大小.首先需要判断出应用存活的数据的大小,存活数据的大小是决定配置应用需要的Java堆大小的重要条件,也能够决定是否需要重新审视一下应用的内存需求或者修改应用程序以满足内存需

07 JVM 是如何实现反射的

Java 中的反射 反射是 Java 语言的一个相当重要的特性,它允许正在运行的 Java 程序观测,甚至是修改程序的动态行为. 我们可以通过 Class 对象枚举该类中的所有方法,还可以通过 Method.SetAccessible 让过 Java 语言的访问权限,在私有方法所在类之外的地方调用该方法. 反射在 Java 中的引用十分广泛.日常我们用的 Java 继承开发工具 IDE 便运用了这一功能.比如,敲下点号时,IDE便会根据点号之前的内容动态的展示可以访问的字段或者方法.Java 调

JVM(四) 垃圾回收

1. 堆内存结构 Java堆从GC的角度可以细分为:新生代(Eden区.From Survivor区和To Survivor区)和老年代. 1.1 新生代 新生代是用来存放新生的对象.一般占据堆的1/3空间.由于频繁创建对象,所以新生代会频繁触发MinorGC进行垃圾回收.新生代又分为Eden区.ServivorFrom.ServivorTo三个区. 1.1.1.Eden区Java新对象的出生地(如果新创建的对象占用内存很大,则直接分配到老年代).当Eden区内存不够的时候就会触发MinorGC

java核心学习(四十) 使用反射生成JDK动态代理

java.lang.reflect包下提供了一个Proxy类和InvocationHandler接口,用于生成动态代理类和动态代理对象. 一.使用Proxy.InvocationHandler创建动态代理 这里要注意,在java.net包下也有一个Proxy类,不过这个类是用于设置代理服务器的,莫混淆.. Proxy提供了如下两个方法创建动态代理类和动态代理实例: 实际上即使采用第一种方法创建动态代理类,如果程序需要通过该代理类来创建对象,依然需要传入一个InvocationHandler对象,

使用反射的四种方法

反射是.net提供的用来访问类或者类里面的内容的一项技术,它允许你在编译时对一个类基本上一无所知的情况下对一个类进行访问,支持利用一个字符串对类进行发现.访问.调用等,以下利用实例介绍四种使用反射的方法 首先祭出一个类,用于模拟被调用的类 public class TestClass { private string testType; public string TestType { get { return testType; } set { testType = value; } } pr