首页 > 代码库 > java反射 一些理解
java反射 一些理解
-
JAVA反射机制
什么是反射:
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
条件:
JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。但是JAVA有着一个非常突出的动态相关机制:Reflection,
用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、
或唤起其methods。(百度百科)
尽管java不是动态语言 但是java提供了一个非常重要的API用于完成反射的需求。Reflection
学习:
要学习反射,先来介绍下需要学习或者理解的类(直接抄的API的解释词语) 其实能熟练读懂api比看一些教程有用的多
1、java.lang.Class<T>//
Class
类的实例表示正在运行的 Java 应用程序中的类和接口。 2、java.lang.reflect(包)
java.lang.reflect.Constructor<T> //提供关于类的单个构造方法的信息以及对它的访问权限。
java.lang.reflect.Field //
Field
提供有关类或接口的单个字段的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)字段或实例字段。 java.lang.reflect.Method //
Method
提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。所反映的方法可能是类方法或实例方法(包括抽象方法)。 java.lang.reflect.Modifier //Modifier 类提供了
static
方法和常量,对类和成员访问修饰符进行解码。 例子:
获取包名,类名.......
public static void main(String[] args) { String strObj= new String();//创建对象,这种方式创建,比较容易理解创建了一个String对象 Class classObj = strObj.getClass();//获取了一个运行中的实例模型 有兴趣的可以去读一下源码,就不往外贴了 System.out.println(classObj.getName());//完整类名
System.out.println(classObj.getPackage().getName());//包名
//Result java.lang.String java.lang
}
实例化Class对象的方式:通常理解实例化一个类的Class模型,比如我使用的String这个类,就是实例化了一个String的Class的模型对象
public static void main(String[] args) throws Exception { Class<?> classObj = null; classObj = Class.forName("java.lang.String");//返回与带有给定字符串名的类或接口相关联的 Class 对象。(API) System.out.println(classObj.getName()); classObj=new String().getClass(); System.out.println(classObj.getName()); classObj=String.class; System.out.println(classObj.getName()); //Result java.lang.String java.lang.String java.lang.String }
未完待续。。。。。。。。。。
java反射 一些理解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。