Java反射机制
相关类型:
java.lang.Class
java.lang.reflect.Constructor
java.lang.reflect.Field
java.lang.reflect.Method
java.lang.reflect.Modifier
作用:
1、反编译 .class –> .java
2、通过反射机制访问java对象的属性、方法、构造方法等。这个在android中经常用到。
获取Class类型对象的三种方式:
1、Class.forName(className)
它就是将className加载到JVM的过程,得到堆中加载的class字节码的引用,类中的静态块会被执行,className必须为全名:包名+类名
2、类名.class
java每个类型都有class属性,类中的静态块不会被执行
3、实例对象.getClass()
得到实例对象的运行时类,类中的静态块会被执行
下面来对上面的说法进行验证:下面来对上面的说法进行验证:
public class CustomClass {
static {
System.out.println("executed static block");
}
public CustomClass() {
System.out.println("executed CustomClass constructor");
}
}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
public class ReflectTest {
public static void main(String[] args) throws Exception{
//第一种方式:Class.forName
System.out.println("Class.forName===========");
//Class c1 = Class.forName("CustomClass");
}
}- 1
- 2
- 3
- 4
- 5
- 6
- 7
输出结果:
Class.forName===========
executed static block- 1
- 2
可以看到CustomClass的静态块被执行,说明在执行Class.forName会触发CustomClass类的加载。
public class ReflectTest {
public static void main(String[] args) throws Exception{
//第二种方式:类名.class
System.out.println("类名.class==============");
Class c2 = CustomClass.class;
}
}- 1
- 2
- 3
- 4
- 5
- 6
- 7
输出结果:
类名.class==============- 1
可以看到CustomClass的静态块没有执行,说明CustomClass.class没有触发CustomClass类的加载。
public class ReflectTest {
public static void main(String[] args) throws Exception{
//第三种方式:实例对象.getClass()
System.out.println("实例对象.getClass()=========");
CustomClass customClass = new CustomClass();
Class c3 = customClass.getClass();
}
}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
输出结果:
实例对象.getClass()=========
executed static block
executed CustomClass constructor- 1
- 2
- 3
这个比较好理解,在创建对象的时候就会触发CustomClass类的加载,然后创建对象,执行构造函数。
得到这个Class之后,我们就可以进行一些列的操作了。
智能推荐
Java反射机制
平常在进行Java编程的时候,有时我们的代码中需要去获取某个类的一些信息,比如它的构造方法,它的属性等等,那我们该怎么去获取呢?(除了直接看源代码。。。有些源代码是不给看的)第一种方法,通过类对象来获取,比如:Client client=new Client;我们可以通过client来调用Client的属性方法等信息。但是这里会有一个问题,那就是私有属性和方法(private)我们是获取不到的。J...
java的反射机制
java的反射是底层的技术了。很多框架都有用它,但是我们在做一般的编写是建议别使用它,有了它,好像java的三大特性都被破坏了,而且一般人驾驭不了。但是我们也应该了解甚至会用反射,这样在使用java的框架是才不是完全懵逼的。反射即是动态获取类的字节码文件对象,并对其成员进行抽象 反射的原理 在Java中,无论某个类的创建多少个实例对象,这些对象都会对应于同一个Class对象,这个Class...
Java反射机制
一、Java反射机制概述 Java放射机制是指在==运行状态==中,对于任意一个类,都能知道这个类的所有属性和方法;对于任意一个对象,都能调用它的任意一个方法和属性;这种动态获取信息及动态调用方法的功能成为Java的反射机制。 二、反射的作用 利用Java机制,在Java程序中可以动态的去调用一些protected甚至是private的方法或类,这样就可以在很大程度上满足一些特殊需求。 在Andr...
java反射机制(上)
Java反射机制 在这之前首先得有一定java基础 IDEA通过类名就能点出方法、成员变量,那么IDEA是如何知道类里面有什么方法、成员变量的? 什么是反射? 反射是一种机制,可以通过该机制在程序运行过程中对类进行解剖,解剖之后就可以操作类的所有成员。 反射是一种变态的机制,在反射面前所谓的私有都是浮云,看下文。 反射的使用场景 *开发IDE(集成开发环境,英文名:Integrated Devel...
java反射机制
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 JVM虚拟机加载Person.class文件时会在内存中创建一个class对象空间,用来存储Person.class文件的信息(变量和方法)。 java程序通常new创建对象时会先创建一个对象空间,...
猜你喜欢
java反射机制
1.1 反射的概述: 反射引入:IDEA是如何知道类或对象有哪些属性,哪些方法? 通过反射技术在程序运行过程中对类进行了解剖获得了类型的所有成员。 什么是反射: 反射是一种机制,利用该机制可以在程序运行过程中对类进行解剖并操作类中的成员。 构造方法:通过反射操作构造方法创建类的对象。 成员方法:通过反射操作成员方法来调用方法。 成员变量:通过反射操作成员变量就是给该成员变量赋值和取值。 反射在实际...
Java反射机制
一、反射简介: Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性和方法。 反射库(feflection library)提供了一个非常丰富且精心设计的工具集。以便编写能够动态操纵Java代码的程序。这项功能被大量应用于JavaBean中。 1.1反射机制提供的功能: 1、在运行时分析类...
Java反射机制
一,Java反射机制的意义 Java反射机制是就Java语言的一个重要特性,它在服务器程序和中间件程序之间得到了广泛应用。在服务器端,可以根据客户请求,动态的调用某个对象的特定方法。此外,在ORM中间件的实现中,运用Java反射机制来读取任意一个JavaBean的所有属性,或者给这些属性赋值。 ---------------------------------------------...
Java反射机制
原文carson_ho 简介 Java编译分为静态编译和动态编译,动态编译灵活性高,但是速度慢,反射属于动态编译,即只有到运行时才动态创建 &获取对象实例。 编译方式说明: 1. 静态编译:在编译时确定类型 & 绑定对象。如常见的使用new关键字创建对象 2. 动态编译:运行时确定类型 & 绑定对象。动态编译体现了Java的灵活性、多态特性 & 降低类之间的藕合性 ...
Linux内核之进程调度3:进程调度
1. 吞吐率和响应 吞吐:单位时间内做的有用功; 响应:低延迟。 吞吐追求的整个系统CPU做有用功,响应追求的是某个特定任务的延迟低; 1GHZ的CPU切换线程保存恢复现场约几个微妙级别,看似消耗不了太多时间,但是由于系统的局部性原理,会保存当前线程数据的缓存,切换线程会打乱局部性引起cache miss,而CPU访问cache速度远大于内存访问,这样综合看来上下文切换花销还是很大的。无用功占用较...
