黑马程序员_高新技术之反射
来源:互联网 发布:逆战最新源码 编辑:程序博客网 时间:2024/04/30 04:28
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
一、Class类
Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class。
Class类代表Java类,它的实例对象对应各个类在内存中的字节码。例如:示例对象Person对应Person类的字节码.
得到各个字节码对应的实例对象三种方法( Class类型)
1、类名.class例如:System.class;
2、对象.getClass()例如:new Date().getClass();
3、Class.forName("类名")例如:Class.forName("java.util.Date");
二、反射
反射就是把Java类中的各个成分映射成相关的Java类。例如,一个Java类中用一个Class类的对象来表示类中的组成部分:成员变量、成员方法、构造方法、包等等信息也用一个个的Java类来表示。就像一个汽车是一个类,汽车中的发动机、变速箱等等也是一个个独立的类。表示Java类的Class类显然要提供一些方法,来获得其中的变量、方法、构造方法、修饰符、包等等信息,这些信息就是用对应的实例对象来表示,他们是Field、Method、Contructor、Package等。
三、Contructor类
Contructor类代表某个类中的一个构造方法
得到某一个类的所有构造方法:
Constructor [] constructors = Class.forName(“java.lang.String”).getConstructor();//得到String类的所有构造方法
得到某一个类中的某个构造方法:
Constructor constructor = Class.forName(“java.lang.String”).getConstructor(StringBuffer.class);//得到String类的StringBuffer构造方法
创建实例对象方式:
通常:String str = new String(new StringBuffer("abc"));
反射:String str = (String)constructor.newInstance(new StringBuffer("abc"));
通常一个类中有多个构造方法,一般根据参数类型和个数来区分到底得到其中那个方法。
四、Field类
Field类代表某一个类中的一个成员变量。
Field[] getFields()
Field[] getDeclaredFields()
getFields()返回的是一个包含Field对象的数组,这个 对象记录了包含这个类或者超类共有的字段。
getDeclaredFields()也将返回包含Field对象的数组,这些对象记录了这个类的全部字段(包括私有的)。如果类中没有字段,或者Class对象描述的是基本类型或者数组类型,这些方法将返回一个长度为0的数组。
五、Method类
Method[] getMethods()
Method[] getDeclaredMethods()
getMethods()将返回所有的共有方法,包括从超类继承的共有方法。getDeclaredmethod()返回这个类或者接口的全部方法,但不包括由超类继承了的方法。
例如:
获取String类中的charAt()方法
Method charAt = Class.forName("java.lang.String").getMethod("charAt", int.class);
调用方法:
普通调用方式:System.out.println(str.charAt(1));
反射方法;System.out.println(charAt.invoke(str,1));
注意传入的参数都是用Class对象来表示。
六、数组的反射
具有相同维数和元素类型的数组属于同一种类型,即具有相同的Class实例对象。
代表数组的Class实例对象的getSuperClass()方法返回的父类为Object类对应的Class。
基本类型的一维数组可以被当做Object类型使用,不能当做Object[]类型使用;非基本类型的一维数组,既可以当做Object类型使用,又可以当做Object[]类型使用
七、反射的作用是实现框架功能
1、框架与框架要解决的核心问题
框架就好比造汽车,需要先有汽车的大概样式,生产处汽车的整体外壳,然后由汽车生产商在外壳上面装上发动机,座椅等等东西,这个外盒就是框架,生产商可以根据使用将发动机,座椅等等装入外壳内。
框架是调用用户提供的类。工具类是被用户的类调用。
2、框架要解决的核心问题
框架要解决的问题就好比,现在有一个汽车外壳,但是发动机,座椅等等还没有制造出来,因此需要等到具体的发动机、座椅等等制造出来才能够调用框架。
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
详细请查看:www.itheima.com
- 黑马程序员_高新技术之反射
- 黑马程序员_高新技术之反射
- 黑马程序员_高新技术之反射
- 黑马程序员_高新技术------反射
- 黑马程序员_高新技术-反射
- 黑马程序员_高新技术_反射
- 黑马程序员_高新技术_反射
- 黑马程序员_学习记录21:高新技术之反射小结
- 黑马程序员_高新技术之反射和泛型
- 黑马程序员--高新技术之反射
- 黑马程序员---高新技术之反射
- 黑马程序员---------------高新技术之反射
- 黑马程序员---高新技术之反射
- 黑马程序员_Java高新技术二_反射
- 黑马程序员_Java高新技术_反射
- 黑马程序员_高新技术Java反射机制
- 黑马程序员_Java高新技术_反射
- 黑马程序员_高新技术:4) 注解、反射
- 给定一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有“1”的个数
- IE文本框 文字居中
- Git 使用心得
- obj-c编程15[Cocoa实例02]:KVC和KVO的实际运用
- JBPM6学习笔记(三)创建并运行Human Task
- 黑马程序员_高新技术之反射
- 风水大师陶建国教你:看风水,懂风水,知风水
- 时光越老,人心越淡
- css2中direction用法
- 【线段树】 codeforces 444C DZY Loves Colors
- Java 查看运行程序线程数
- actionBar.setDisplayHomeAsUpEnabled(true);
- thinkphp 先create() 然后save() 但是数据库执行报错问题
- Android ActionBar完全解析,使用官方推荐的最佳导航栏(下)