Java反射总结
来源:互联网 发布:阿里云 华北 华东 华南 编辑:程序博客网 时间:2024/05/21 22:39
学习了反射,为了更加深入的了解反射的知识,下面我对反射的知识点进行一次小结
一、反射的基石为class
下面我们用一个特别实际的例子来了解一下
Person类代表人,它的实例对象就是张三,李四这样一个个具体的人, Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class。对比提问:众多的人用一个什么类表示?众多的Java类用一个什么类表示?
Ø
Ø
我们在定义一个普通的Person对象的时候是这样来实现的
Person p1 = new Person();
Person p2 = new Person();
但是如果我们想定义一个class对象是不是也可以像这样扶植呢?
Class cls1 = new Class();?这里我给出答案,是不能这样写的,在java里,是不允许这样赋值的的,同样也没有这种赋值的写法
那么我们该如何来实现呢?
我们来通过字节码来实现,如下
Class cls1 = 字节码;
那么什么是字节码呢?每一个字节码都是一个class的对象
如果说这里有三个对象,分别是:Person,Math,Date
那么我们就可以用字节码来实现
Class cls1 = Date.class;//Date.class代表Date类得字节码
Class cls2 = Person.class;//Person.class代表Person类得字节码
那么又是如何得到各个字节码对应的实例对象
Ø
Ø
Ø
现在可以说是该了解的都已经了解了,那么我们来通过一个小的程序段来更好的了解反射
package cn.itcast.day1;
import java.lang.reflect.Constructor;
public class ReflectTest {
}
l
Ø
l
二、反射的概念
例如,一个Java类中用一个Class类的对象来表示,一个类中的组成部分:成员变量,方法,构造方法,包等等信息也用一个个的Java类来表示,就像汽车是一个类,汽车中的发动机,变速箱等等也是一个个的类。表示java类的Class类显然要提供一系列的方法,来获得其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应类的实例对象来表示,它们是Field、Method、Contructor、Package等等。
三、Constructor类
1、Constractor代表某个类中的一个构造方法
2、得到某个类所有的构造方法
例子:Constructor[] constructors=
Class.forName("java.lang.String").getConstructors();
3、得到某一个构造方法
例子:Constructor constructor=
Class.forName("java.lang.String").getConstructor(StringBuffer.class);//获得方法时要用到类型
4、创建实例对象
例子:
通常方式:String str = new String(new StringBuffer("abc"));
反射方式:String str =(String)constructor.newInstance(new StringBuffer("abc"));//调用获得的方法时要用到上面相同类型的实例对象
5、Class.newInstance()方法:
例子:String obj = (String)Class.forName("java.lang.String").newInstance();
该方法内部先得到默认的构造方法,然后用构造方法创造实例对象。
6、下面是我们关于一个Constructor的具体实例
package cn.itcast.day1;
import java.lang.reflect.Constructor;
public class ConstructorTest
{
}
四、Field类
1、Field代表某个类中的一个成员变量
2、下面我们先来看一个关于Field类得例子
package cn.itcast.day1;
import java.lang.reflect.Field;
public class RefectPointTest {
}
五、Method类
1、Method类代表某个类中的一个成员变量
2、得到类中的某一个方法:
例子:Method charAt=
Class.forName("java.lang.String").getMethod("charAt",int.class);
3、调用方法
通常方法:System.out.println(str.charAt(1));
反射方法:System.out.println(charAt.invoke(str,1));
如果传递给Method方法的invoke()方法的第一个参数为null,这有着什么样的意义呢?说明该Method对象对应的是一个静态方法!
4、下面是一个Method类的例子
package cn.itcast.day1;
import java.lang.reflect.Method;
public class MethodTest {
}
六、用反射方式执行类中的某个main方法
关于这个问题我们直接用一个案例来理解
package cn.itcast.day1;
import java.lang.reflect.Method;
public class MainTest {
}
class TestArguments
{
}
七、数组的反射
一、这些是应该注意的细节
1、具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class实例对象。
2、代表数组的Class实例对象的getSuperclass()方法返回的父类为Object类对应的Class。
3、基本类型的一维数组可以被当做Object类型使用,不能当做Object[]类型使用;非基本类型的一维数组,既可以当做Object类型使用,又可以当做Object[]类型使用。
好了,既然我们已经把细节了解的差不多了,那么我们就要用一个实例来把这些细节体现出来
package cn.itcast.day1;
import java.lang.reflect.Array;
import java.util.Arrays;
public class RefectArray {
}
好了,这些就是关于反射的一些知识点!!
- 【Java】Java反射总结
- java反射总结
- java 反射 总结
- java 反射 总结
- java 反射 总结
- java 反射 总结
- java 反射总结
- JAVA 反射学习总结
- java 反射知识总结
- java 反射知识总结
- Java-反射总结
- JAVA 反射总结
- java中的反射总结
- Java反射机制总结
- Java总结(16)反射
- java反射总结
- Java反射学习总结
- java反射机制总结
- dialog之多行文本的使用
- 最值得一看的几条简单的谷歌 Google 搜索技巧,瞬间提升你的网络搜索能力!
- iOS开发是否应该使用ARC?
- AOSP build 系统简介
- ORACLE 全文检索用CONTAINS关键字时CLOB字段更新后检索不到
- Java反射总结
- 标准盒子模型和IE盒子模型
- 图解linux下top命令的使用
- Eclipse Maven Tomcat的利用配置
- linux 安装jdk
- mysql除法精度
- 定制Ribbon触发工作流
- 淘宝开源网络框架tbnet 之packet
- write to and read from files (读写文件)