Java反射之Class类
接下来的几章,我们谈一谈java的反射机制。
反射就是从一个java类中映射出一个java类或是一个实例。通常在很多框架中都用到反射,比如常用的ssm框架,在配置文件中总是会写到类的全名,框架通过读取配置的类的全名利用反射,在程序运行过程中创建对象。下面我们来谈一谈什么是反射:
[一]Class类
在知道什么是反射之前一定要了解Class这个类,在java中创建类是用class关键词声明的,而这里的class和Class类是不一样的,
Class类代表着一个java类被编译后产生的二进制的字节码文件,一个二进制字节码文件可以创建多个不同的对象.
例子:就像所有的人都可以用Person这个类来表示,那么所有的java类(类的字节码文件)也可以用一个Class类来表示.

那怎样获取Class类的对象呢?
[二]获得某个类的字节码对象
通常情况下,我们获得自己创建的类的对象时只需要new 类名() 就可以创建该类的对象了,可是查看jdk文档后,会发现Class这个类并没有给出构造方法,或者说他的构造方法时私有的.所以没有通过new这种方式创建字节码对象的.
以下有三种得到Class对象的方式:
//通过类命.class获得该类的Class对象
Class cls1 = String.class;
//通过对象名.getClass();获得该类的Class对象
String str = new String();
Class cls2 = str.getClass();
//通过Class的静态方法forName()获得方法参数指定的Class对象
Class cls3 = Class.forName("java.lang.String");
以上三种方式中,第三种是最常用的,一般在Spring的配置文件中bean都要给定的类全名,然后spring通过读取xml文件,获取类全名,将类全名传给Class.forName(className);通过反射创建bean.
另外 第三种方式获得Class对象具有两种方式:
1.当缓存中有对应类的字节码对象,就从缓存中获得
2.当缓存中没有对应类的字节码对象,就创建一个并缓存
由此可以看出,反射是比较消耗资源的.
[三]小栗子展示
1.判断下面三个class对象是否是一样的
String str = new String("abc");
Class cls1 = str.getClass();
Class cls2 = String.class;
Class cls3 = Class.forName("java.lang.String");
System.out.println(cls1 == cls2);
System.out.println(cls2 == cls3);
结果:
true
true
因为这三中方式都是获得String类的字节码对象,而String类的Class对象在内存中只存在一个.
2.八大基础数据类型都拥有字节的Class对象甚至是void.class也存在
Class类中的方法isPrimitive()判断一个字节码对象是否是基本数据类型,包装类属于应用数据类型,也封装了基本数据类型的Class对象,获得的方式是:Integer.TYPE,还可以通过Class.isArray()判断是否是数组类型.
总之,只要在源程序中出现的类型,都有各自的Class实例对象.
下章我们说Java反射之构造方法.
Java反射之Class类的更多相关文章
- JAVA反射之Class类的练习
package zhang; /** * JAVA反射之CLass类的练习 * * 在面向对象的语言里,万事万物皆对象,那么类是谁的对象呢? * 类的类型是CLass * * */ class Tes ...
- Java反射 - 1(得到类对象的几种方法,调用方法,得到包下的所有类)
通过反射获得对象的方法 准备工作: 有一个User类如下 package o1; /** * Created by yesiming on 16-11-19. */ public class User ...
- java反射 顺序输出类中的方法
java反射可以获取一个类中的所有方法,但是这些方法的输出顺序,并非代码的编写顺序. 我们可以通过自定义一个注解来实现顺序输出类中的方法. 首先,先写一个类,定义增删改查4个方法 public cla ...
- 【java】java反射初探 ——“当类也照起镜子”
反射的作用 开门见山地说说反射的作用 1.为我们提供了全面的分析类信息的能力 2.动态加载类 我理解的“反射”的意义 (仅个人理解) 我理解的java反射机制就是: 提供一套完善而强大的API ...
- 【java】java反射初探 ——“当类也学会照镜子”
反射的作用 开门见山地说说反射的作用 1.为我们提供了全面的分析类信息的能力 2.动态加载类 我理解的“反射”的意义 (仅个人理解哈) 我理解的java反射机制就是: 提供一套完善而强 ...
- Java反射初探 ——“当类也学会照镜子”
反射的作用 开门见山地说说反射的作用 1.为我们提供了全面的分析类信息的能力 2.动态加载类 我理解的“反射”的意义 (仅个人理解哈) 我理解的java反射机制就是: 提供一套完善而强大的 ...
- java反射之获取类的基本信息(一)
一.反射原理. Java 反射机制.通俗来讲呢,就是在运行状态中,我们可以根据“类的部分已经的信息”来还原“类的全部的信息”.这里“类的部分已经的信息”,可以是“类名”或“类的对象”等信息.“类的全部 ...
- java反射对实体类取值和赋值,可以写成通过实体类获取其他元素的数据,很方便哦~~~
项目中需要过滤前面表单页面中传过来的实体类的中的String类型变量的前后空格过滤,由于前几天看过一个其他技术博客的的java反射讲解,非常受益.于是,哈哈哈 public static <T& ...
- java反射对实体类取值和赋值
public static void checkDesignerEdit(Object dtos) throws Exception { Class dtosClass = dtos.getClass ...
随机推荐
- 基于ci框架 修改出来了一个带农历的万年历。
1这里没有写model:代码一看就懂,没什么负杂地方,就是麻烦一点. 直接control模块的代码: <?php if ( ! defined('BASEPATH')) exit('No dir ...
- Hadoop伪分布式HDFS环境搭建和使用
1.环境要求 Java版本不低于Hadoop要求,并配置环境变量 2.安装 1)在网站hadoop.apache.org下载稳定版本的Hadoop包 2)解压压缩包 检查Hadoop是否可用 hado ...
- 体验vSphere 6之1-安装VMware ESXi 6 RC版(转载)
体验vSphere 6之1-安装VMware ESXi 6 RC版 在2015年,各个公司都会发布一系列新的产品,例如Microsoft会发布Windows 10,VMware会发布vSphere 6 ...
- revit安装未完成,某些产品无法安装的解决方法
revit提示安装未完成,某些产品无法安装该怎样解决呢?,一些朋友在win7或者win10系统下安装revit失败提示revit安装未完成,某些产品无法安装,也有时候想重新安装revit的时候会出现本 ...
- 用Hutton32玩转数字电路(一):逻辑门
最近看到有人用Minecraft里面的红石电路制作出了计算器,还有一篇神文:<基于Minecraft实现的计算机工程>,视频在此,好像还能算浮点数.三角函数.我对红石不是太了解,那能不能用 ...
- unittest(22)- p2p项目实战(8)-test_class_auto_incre
# 8.test_class_auto_incre # 使用ddt import requests import unittest from p2p_project_7.tools.http_requ ...
- POJ 2112 Optimal Milking 最短路 二分构图 网络流
题意:有C头奶牛,K个挤奶站,每个挤奶器最多服务M头奶牛,奶牛和奶牛.奶牛和挤奶站.挤奶站和挤奶站之间都存在一定的距离.现在问满足所有的奶牛都能够被挤奶器服务到的情况下,行走距离的最远的奶牛的至少要走 ...
- figure图像
import matplotlib.pyplot as plt import numpy as np x=np.linspace(-3,3,50) y1=x*2+1 y2=x**2 plt.plot( ...
- 关于PHPExcel的一些资料
下面是总结的几个使用方法 include 'PHPExcel.php'; include 'PHPExcel/Writer/Excel2007.php'; //或者include 'PHPExcel/ ...
- Sublime Text3 旧版本下载以及破解激活方式
前言 当前Sublime Text3 出到了32**版本,以前直接输入激活码的方法已经不能使用. 而官网又不提供旧版本的下载链接,因此在此分享旧版本下载方式以及激活方式. 下载方法 通过下面这个链接下 ...