【B/S】java(4)

编译类型与运行类型:

Java中的许多对象(一般都是具有父子类关系的父类对象)在运行时都会出现两种类型:编译时类型和运行时类型,例如:Person person = new Student();这行代码将会生成一个person变量,该变量的编译时类型是Person,运行时类型是Student

import java.util.Date;

public class ReflectTest {
    public static void main(String[] args){
        //编译类型为Object
        Object object = null;
        
        //运行类型为Date,理解:程序运行时,变量真实对应的类型
        object = new Date();
        
        //object.getDay();此时处于编译期,无法使用。
        //反射是运行期的一种特性,可以操作“运行类型”的对象。
    }
}

JAVA反射(放射)机制:

   “程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,PerlPythonRubyJavaScript是动态语言,C++JavaC#不是动态语言。

比如(javascript):var username;

          username="xxx";

          username=250;

但是JAVA有着一个非常突出的动态相关机制:Reflection(反射),用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的class。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造方法(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods

反射(reflection)定义:

在运行时期,动态地去获取类中的信息(类的信息,方法信息,构造器信息,字段等信息);

比如类的信息:public、private等

JVM加载类字节文件时,会创建一个对象(Class类型),反射就是去获取这个对象,从而就知道类中的信息。

Java中的许多对象(一般都是具有父子类关系的父类对象)在运行时都会出现两种类型:编译时类型和运行时类型,例如:Person person = new Student();这行代码将会生成一个person变量,该变量的编译时类型是Person,运行时类型是Student

原文地址:https://www.cnblogs.com/maplely/p/6528445.html