Android(java)学习笔记106-2:反射机制
1. 反射机制:
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.
获取任何相应.class文件对应的Class类型的对象,然后利用这个对象去调用该.class文件中任意成员变量和方法。
但是获得.class文件的Class类对象是重点,怎么获取呢?
(1)Class类:
成员变量: 类Field,通过这个表示成员变量的类的对象,去调成员变量
构造方法: 类Constructor,通过这个表示构造方法的类的对象,去调构造方法
成员方法: 类Method,通过这个表示成员方法的类的对象,去调成员方法
Class类的成员变量、构造方法和成员方法都是类。
(2)获取.class文件的Class类对象的三种方式:
方式1:Object类的getClass()方法
Person p = new Person();
Class c = p.getClass();
注意:倘若:
Person p = new Person();
Class c = p.getClass();
Person p2 = new Person();
Class c2 = p.getClass();
System.out.println(c == c2);// true Class类是抽象总结,自然也表示一个类
Class类是其他类的抽象总结,它里面的成员变量,构造方法,成员方法都是一样,是对应的抽象的总结,自然也表示一个类。
方式2:数据类型(基本类型和引用类型)的静态属性class
Class c3= Person.class;
System.out.println(c == c3);// true 虽然获取Class对象的方式不一样,但是Class类是抽象总结,自然也表示一个类
类似有Class c1 = int.class;
Class c2 = String.class;
方式3:Class类中的静态方法
public static Class forName(String className)
使用:
Class c4 = Class.forName("cn.himi.Person");
System.out.println(c == c3);// true 虽然获取Class对象的方式不一样,但是Class类是抽象总结,自然也表示一个类
特别注意的是:forName方法的参数为全路径,就是 "包名+类名",就比如这里的cn.himi.Person
(3)开发时候使用方式3:
为什么呢? 因为第三种是一个字符串,而不是一个具体的类名。这样我们就可以把这样的字符串配置到配置文件中
package cn.itcast_01; /*
* 反射:就是通过class文件对象,去使用该文件中的成员变量,构造方法,成员方法。
*
* Person p = new Person();
* p.使用
*
* 要想这样使用,首先你必须得到class文件对象,其实也就是得到Class类的对象。所有的Class文件都是Class类的对象
* Class类:
* 成员变量 类Field,通过这个表示成员变量的类的对象,去调成员变量
* 构造方法 类Constructor,通过这个表示构造方法的类的对象,去调构造方法
* 成员方法 类Method,通过这个表示成员方法的类的对象,去调成员方法
* 也就是Class类是其他类的抽象总结,它里面的成员变量,构造方法,成员方法都是一样,是对应的抽象的总结,自然也表示一个类。类中成员也是类
* 获取class文件对象的方式:
* A:Object类的getClass()方法
* B:数据类型的静态属性class
* C:Class类中的静态方法
* public static Class forName(String className)
*
* 一般我们到底使用谁呢?
* A:自己玩 任选一种,第二种比较方便
* B:开发 第三种
* 为什么呢?因为第三种是一个字符串,而不是一个具体的类名。这样我们就可以把这样的字符串配置到配置文件中。
*/
public class ReflectDemo {
public static void main(String[] args) throws ClassNotFoundException {
// 方式1
Person p = new Person();
Class c = p.getClass(); Person p2 = new Person();
Class c2 = p2.getClass(); System.out.println(p == p2);// false
System.out.println(c == c2);// true // 方式2
Class c3 = Person.class;
// int.class;
// String.class;
System.out.println(c == c3); // 方式3
// ClassNotFoundException,必须带包名的全路径,比如如果是Class c4 = Class.forName(“Person”);这样是不行的
Class c4 = Class.forName("cn.itcast_01.Person");
System.out.println(c == c4);
}
}
Android(java)学习笔记106-2:反射机制的更多相关文章
- Android:日常学习笔记(9)———探究广播机制
Android:日常学习笔记(9)———探究广播机制 引入广播机制 Andorid广播机制 广播是任何应用均可接收的消息.系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播.通过将 In ...
- Android(java)学习笔记46:反射机制
1. 反射机制: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称 ...
- Java学习笔记之使用反射+泛型构建通用DAO
PS:最近简单的学了学后台Servlet+JSP.也就只能学到这里了.没那么多精力去学SSH了,毕竟Android还有很多东西都没学完.. 学习内容: 1.如何使用反射+泛型构建通用DAO. 1.使用 ...
- Java学习笔记54(反射详解)
反射概念: java反射机制是在运行状态中,对于任意一个类,都能知道所有属性和方法 对于任意一个对象都能调用它的任意一个方法和属性,这种动态获取和调用的功能称为java的反射机制 实际作用: 已经完成 ...
- Java学习笔记--注解和反射
注解和反射 1. 注解 注解作用: 对程序做出解释 被其他程序读取 注解格式: @注释名,还可以添加一些参数值,例如@SuppressWarnings(value="unchecked&qu ...
- Java学习笔记八(反射)
1.介绍 反射为Java程序在执行时提供了动态的能力.利用反射能够在执行时对程序进行动态的控制.本篇博客着重解说一下Java中的反射. 2.Class类的使用 在Java执行过程中,每一个类被载入后都 ...
- 0032 Java学习笔记-类加载机制-初步
JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...
- java学习笔记09--反射机制
java学习笔记09--反射机制 什么是反射: 反射是java语言的一个特性,它允许程序在运行时来进行自我检查并且对内部的成员进行操作.例如它允许一个java的类获取他所有的成员变量和方法并且显示出来 ...
- java学习笔记13--反射机制与动态代理
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...
随机推荐
- 《Java数据结构与算法》笔记-CH2有序数组
/** * 上个例子是无序数组,并且没有考虑重复元素的情况. * 下面来设计一个有序数组,我们设定不允许重复,这样提高查找的速度,但是降低了插入操作的速度. * 1.线性查找 * 2.二分查找 * 有 ...
- DAG的生成
DAG的生成 原始的RDD(s)通过一系列转换就形成了DAG.RDD之间的依赖关系,包含了RDD由哪些Parent RDD(s)转换而来和它依赖parent RDD(s)的哪些Partitions,是 ...
- nyoj 203 三国志(最短路加01背包)
三国志 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 <三国志>是一款很经典的经营策略类游戏.我们的小白同学是这款游戏的忠实玩家.现在他把游戏简化一下, ...
- [iOS基础控件 - 6.12.4] NavigationController vs TabBarController
A.属性 1. Item NavigationController: navigationItem (不需要创建) title rightBarButtonItems/ rightBarButtonI ...
- dns解析对SEO产生的影响
DNS 是域名系统 (Domain Name System) 的缩写,它是由解析器和域名服务器组成的.域名服务器是指保存有该网络中所有主机的域名和对应的IP地址,并具有将域名转换为IP地址功能的服务器 ...
- HDU 2063 过山车(二分匹配入门)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 二分匹配最大匹配数简单题,匈牙利算法.学习二分匹配传送门:http://blog.csdn.ne ...
- sql的存储过程调用
USE [ChangHong_612]GO/****** Object: StoredProcedure [dbo].[st_MES_GetCodeRule] Script Date: 09/10/2 ...
- get_template_part() 函数详解备忘(转)
最近研究官方主题 Twenty Eleven ,有一些东西网上现成的中文资料不好找,在博客里记载下来,算是分享,也算是备忘,wordpress 3.0 以后就开始便有了get_template_par ...
- 多线程和Boost::Asio
线程安全 一般的,高并发使用不同的对象是安全的,在高并发中使用单一的对象是不安全的,io_service类型提供了单对象高并发的强安全保证. 线程池 多线程可能调用io_service::run()来 ...
- 一个序列是否可能是push序列的pop序列
输入:两个序列A.B,A作栈的push序列,判断B是否可能是A的pop序列. #include<iostream> #include<stack> using namespac ...