反射技术基本知识总结

//JAVA反射的精妙总结:反射就是将JAVA类中的各个成分映射成相应的JAVA类

package Three11;

import java.beans.BeanInfo;

import java.beans.Introspector;

import java.beans.PropertyDescriptor;

import java.io.*;

import java.lang.reflect.Constructor;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.net.*;

import java.util.*;

class banana{

private
int
x;

private
int
y;

public
void
banana(int x,int y)

{

this.x=x;

this.y=y;

}

}

class apple {

/**

* @param args

*/

public
static void
main(String[] args)throws Exception{

// TODO Auto-generatedmethod stub

String str="123456";

/*知识点一:获取Class对象方法*/

Class a1=String.class;//通过所有数据类型都有静态属性.class来获取

Class a2=str.getClass();//通过对象getClass()方法获取

// Class.forName(包名.类名);

Class a3=Class.forName("java.lang.String");//通过Class类的静态方法forName()和获得Class对象的类名来获取

System.out.println((a1==a2));

System.out.println((a1==a3));

System.out.println((a2==a3));

/*

* JAVA中九个预定义的实例对象

* 基本数据类型(byte、boolean、short、int、long、double、float、char)字节码对象以及void.class

* 另外:具有相同的数据类型和维度的数组在java中映射成同一个Class对象

*判断是否为数组类型,用Class.isArray()方法

* */

/*知识点二:Constructor类。。。。。构造方法的反射、Constructor的实例对象代表类的一个构造方法

* 用constructor类创建实例对象(反射创建)

* 注意:1.创建newInstance方法中的参数列表必须与Constructor类中的getConstructor()方法中的参数列表一致;

*       2.每调用一次newInstance方法,即构造一个对象

*       3.可以指定构造函数

* */

//获取一个类中所有的构造方法

//Constructor[]b1=Class.forName("java.lang.String").getConstructors();

//获取一个类中的某一个构造方法

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

Constructor b22=b2.getConstructor(StringBuffer.class);

//String s1="456";//一般实例化对象

//Stringb3=(String)constructor.newInstance(new StringBuffer("456"));//通过反射实例化对象

/*

* Field类。。。。。。(成员变量的反射)

* 常用的方法:

*            1.Field getField(String s);//只能获取该类公有和父类中公有

*            2.Field getDeclaredField(String s);//获取该类中任意成员变量,包括私有

*            3.setAcessible(true);如果是私有字段,要先将私有字段进行取消权限检查的能力。也称暴力访问

*            4.set(Object
obj,Object value)将指定对象变量上此Field对象表示的字段设置为指定的新值

*            5.Object get(Object
obj);返回指定对象上Field表示的字段的值

* */

/*

* 知识点三:Method类。。。。。。(成员方法的反射):代表某个类中的一个成员方法

* 常用方法:

*1.Method[]getMethods();只获取公共和父类中的所有方法

*2.Method[]getDeclaredMethods();获取本类中方法包含私有方法

* 3.Medthod[]getMethod("方法名",参数.class(空参可以写null));

* 4.Object invoke(Object
obj,参数);调用方法:如果方法是静态的,invoke中的参数可写为null

*

* 通过反射来调用main函数,invoke()方法传递一个字符串数组参数的方法

* 1.me.invoke(null,newobject[](new String[]{“11”,“22”,“33”}));

* 2.me.invoke(null,(Object)newString[]{“11”,“22”,“33”});

* */

String str1="abcd";//实例化str1对象

//通过反射获取方法

Method mchar=Class.forName("java.lang.String").getMethod("charAt",int.class);

//通过invoke方法获取执行charAt里面的功能,当invoke第一个参数为null时,代表调用main函数

System.out.println(mchar.invoke(str1, 1));

//不清楚类名调用方法,体现了反射功能的强大

//Methodme=Class.forName("fansge.Test12").getMethod("main",String[].class);

//me.invoke(null, (Object)new String[]{"aa","bb","cc"});

/*

* 知识点四:

*         1.具有相同类型和维数的数组属于同一类型,即有相同的Class实例对象

*         2.数组的字节码文件名是:数组类型的第一个大写字母;例:int为I

*         3.数组对象的Class的实例对象的getSuperclass()返回的是父类Object类的Class对象

*         4.基本类型的一维数组可以当做Object类型使用,不能当做Object[]类型使用;非基本类型

*           的一维数组,既可以当做Object类型使用,又可以当做Object[]类型使用。

*         5.Arrays.asList()方法处理int[]和String[]时的差异:1.4和1.5新特性差别。1.4无法处理int数组,

*           返回给1,5处理,1.5将int数组作为一个参数处理

*         6.数组的反射:Array工具类用于完成数组反射的操作。

Array.getLength(Object
obj);//获取数组长度

Array.get(Object
obj,intx);// 获取数组中的元素

7.获得某个数组中的某个元素的类型

例:

Object[] obj=new Object[]{"ABC",1}

* */

Object[] obj=new Object[]{"123",1};

System.out.println("obj=:"+obj);

}

}

时间: 2024-10-06 21:48:10

反射技术基本知识总结的相关文章

Java中类加载机制和反射技术

我们知道一个对象在运行时有两种类型,一个是编译类型,一个是运行时类型.在程序运行时,往往是需要发现类和对象的真实的信息的.那么如何获的这种信息呢? 其一,如果我们在编译和运行时都知道类型的具体信息,这时是可以手动将一个对象转换为运行时的类型. 其二,如果我们在编译时无法预知对象和类到底是属于哪些类,那么程序只有依靠运行时的信息来发现对象和类的真实的信息了,这时就必须要用到反射技术. 在谈具体的发射技术之前,我想先回顾下,有关类的加载的一些基本的性质和原理,以方便我们更好地理解,反射的作用和特点.

7. 反射技术:其实就是动态加载一个指定的类

反射技术:其实就是动态加载一个指定的类,并获取该类中的所有的内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员.简单说:反射技术可以对一个类进行解剖. 反射的好处:大大的增强了程序的扩展性. 反射的基本步骤: 1.获得Class对象,就是获取到指定的名称的字节码文件对象. 2.实例化对象,获得类的属性.方法或构造函数. 3.访问属性.调用方法.调用构造函数创建对象. 获取这个Class对象,有三种方式: 1:通过每个对象都具备的方法getClass来获取.

C#反射技术概念作用和要点

反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的名称.限定符和参数等.有了反射,即可对每一个类型了如指掌.如果获得了构造函数的信息,即可直接创建对象,即使这个对象的类型在编译时还不知道. 1..NET可执行应用程序结构 程序代码在编译后生成可执行的应用,我们首先要了解这种可执行应用程序的结构. 应用程序结构分为应用程序域—程序集—模块—类型—成员

Java反射技术学习总结

-------<a href="http://www.itheima.com/"">android培训</a>.<a href="http://www.itheima.com/" ">java培训</a>期待与您交流!---------- Java反射技术就是将java中的类的各个组成部分反射出来变为java中相应的数据类型获得. Java同样将类中的各个组成部分进行封装,变为一个个Java类. C

反射技术

反射技术:其实就是动态加载一个指定的类,并获取该类中的所有的内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员.简单说:反射技术可以对一个类进行解剖. 反射的好处:大大的增强了程序的扩展性. 反射的基本步骤: 1.获得Class对象,就是获取到指定的名称的字节码文件对象. 2.实例化对象,获得类的属性.方法或构造函数. 3.访问属性.调用方法.调用构造函数创建对象. 获取这个Class对象,有三种方式: 1:通过每个对象都具备的方法getClass来获取.

Android中Java反射技术的使用示例

import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import android.os.Bundle; import android.app.Activity; /** * Demo描述: * Android中Java反射技术的使用示例 * 在Java中描述字节码文件(xxx.class)的类叫Class * 反射的过程可视为剖析Class的过

c#中反射技术在Unity中的运用

反射技术给类赋值的好处就是可以简化代码,封装的好处就显而易见了.最直接的用途就是用在在显示配置文件的时候,个人习惯性做法是做一个VO来存储需要的数据,其代码如下: internal class BaseItemVO { public string name; public string lockA; } 运用反射来获取类中的字段: public static void setValue(Object tar, String name, Object value) { FieldInfo fInf

C# 反射技术应用

反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的名称.限定符和参数等.有了反射,即可对每一个类型了如指掌.如果获得了构造函数的信息,即可直接创建对象,即使这个对象的类型在编译时还不知道. 反射是一种机制,通过这种机制我们可以知道一个未知类型的类型信息.比如,有一个对象a,这个对象不是我们定义的,也许是通过网络捕捉到的,也许是使用泛型定义的,但我们

3月9日高项作业(信息系统集成专业技术专业知识)

系统集成项目管理工程师教程 第三章 信息系统集成专业技术专业知识 3月9日作业 1.信息系统集成有哪些特点. 信息系统集成有以下几个显著特点. (1)信息系统集成要以满足用户需求为根本出发点. (2)不只是设备选择和供应,更重要,它是具有高技术含 量的工程过程,要面向用需求提供全面解决方案,其核心是软件. (3)系统集成的最终交付物是一个完整的系统而不是一个分立的产品. (4)系统集成包括技术.管理和商务等各项工作,是一项综合性的系统工程.技术是系统集成工作的核心,管理和商务是系统集成项目成功实