10:38创建草稿箱

目录

JAVA反射机制状态类,够知属性方法;象,够调方法属性;态获取信息态调象方法java语言反射机制。

JAVA反射(放射)机制:“程序运,允许改变程序结构或变量类型,语言称态语言”。观点,Perl,Python,Ruby态语言,C++,Java,C#态语言。JAVA非常突态相关机制:Reflection,Java身加载、探知、使编译期间完全未知classes。换句话,Java程序加载知名称class,获悉其完整构造(包括methods定义),并象实体、或其fields设值、或唤其methodsJava反射机制主提供判断任类;构造任象;判断任员变量方法;方法;态代理。

语言具很强态性,区分静态技术与法。朗朗态绑定(dynamic binding)、态链接(dynamic linking)、态加载(dynamic loading)等。态”词其实普遍适严格定义,候甚至像初被导入编程领域号,各吹各调。

言,者社群态语言,致认定义:“程序运,允许改变程序结构或变量类型,语言称态语言”。观点,Perl,Python,Ruby态语言,C++,Java,C#态语言。

尽管定义与分类Java态语言,它却非常突态相关机制:Reflection。“反射、映象、倒影”,Java身加载、探知、使编译期间完全未知classes。换句话,Java程序加载知名称class,获悉其完整构造(包括methods定义),并象实体、或其fields设值、或唤其methods。透class”力(the ability of the program to examine itself)被称introspection(内省、内观、反省)。Reflectionintrospection常被并提术语。

Java够做态特性呢?深远话题,本文简单介绍概念。整篇幅介绍Reflection APIs,让读者知何探索class结构、“运才获知名称class”份实体、其fields设值、调其methods。本文将谈java.lang.Class,及java.lang.reflectMethod、Field、Constructor等等classes众周知JavaObject 类,Java 类继承根源,其内声明应该Java 类被改写方法:hashCode()、equals()、clone()、toString()、getClass()等。其getClass()返回Class 象。

Class 类十分特殊。它般类继承Object,其实体表达Java程序运classesinterfaces,表达enum、array、primitive Java types(boolean, byte, char, short, int, long, float, double)及关键词void。class被加载,或加载器(class loader)defineClass()被JVM调,JVM 便Class 象。果您借由“修改Java标准库源码”观察Class 实际机(例Classconstructor内添加println()),!因Class并public constructor。

ClassReflection故源。针任何您探勘类,唯它产Class 象,接经由者唤数十Reflection APIs。APIs将探险活亮相。Java允许classClass object。图2份整理。

Class object 诞

示例:

1)运getClass()

注:每class 此函数

String str = "abc";

Class c1 = str.getClass();

2)运Class.getSuperclass()

Button b = new Button();

Class c1 = b.getClass();

Class c2 = c1.getSuperclass();

3)运static method------Class.forName()(常被使

Class c1 = Class.forName ("java.lang.String");

Class c2 = Class.forName ("java.awt.Button");

Class c3 = Class.forName ("java.util.LinkedList$Entry");

【推荐,野果阅读追书真试试吧。】

Class c4 = Class.forName ("I");

Class c5 = Class.forName (".class");

4)运primitive wrapper classesTYPE 语法

Class c1 = Boolean.TYPE;

Class c2 = Byte.TYPE;

Class c3 = Character.TYPE;

Class c4 = Short.TYPE;

Class c5 = Integer.TYPE;

Class c6 = Long.TYPE;

Class c7 = Float.TYPE;

Class c8 = Double.TYPE;

Class c9 = Void.TYPE;

图2:Java 允许Class object。

Java classes 组分析

首先容图3java.util.LinkedList例,将Java class定义卸八块,每块分别应图4Reflection API。图5则“获class各区块信息”程序示例及执结果,它本文示例程序应片段。

packagejava.util; //(1)

import java.lang.*; //(2)

public class LinkedList<E> //(3)(4)(5)

extendsAbstractSequentialList<E> //(6)

implements List<E>, Queue<E>,

Cloneable, .Serializable //(7)

{

private static class Entry<E> { … }//(8)

public LinkedList() { … } //(9)

public LinkedList(Collection<? extends E> c) { … }

public E getFirst() { … } //(10)

public E getLast() { … }

private transient Entry<E> header = …; //(11)

private transient int size = 0;

}

图3:将Java class 卸八块,每块相应组Reflection APIs(图4)。

API

编辑

图3Java class份,分别图4Reflection API,其Package、Method、Constructor、Field等等classes,定义java.lang.reflect。

Java class 内部模块(参见图3)

Java class 内部模块

相应Reflection API,Class methods。

返回值类型(return type)

(1) package

class隶属哪package

getPackage()

Package

(2) import

class导入哪classes

直接API。

解决办法见图5-2。

(3) modifier

class(或methods, fields)属性

int getModifiers()

Modifier.toString(int)

Modifier.isInterface(int)

int

String

bool

(4) class name or interface name

class/interface

名称getName()

String

(5) type parameters

参数化类型名称

getTypeParameters()(未完待续)

加入书签
目录
推荐阅读
李二:收吧!唐已经忍界签已经拾取变强书院书十二已经已经已经满级已经满级妈已经三老夫已经修炼已经
相关阅读
传奇已经已经钱守护阿拉德已经已经功引已经抛弃神经通殡仪馆,已经已经敌!抱歉!本妃已经滚远连城明月几