接下来的几章,我们谈一谈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类的更多相关文章

  1. JAVA反射之Class类的练习

    package zhang; /** * JAVA反射之CLass类的练习 * * 在面向对象的语言里,万事万物皆对象,那么类是谁的对象呢? * 类的类型是CLass * * */ class Tes ...

  2. Java反射 - 1(得到类对象的几种方法,调用方法,得到包下的所有类)

    通过反射获得对象的方法 准备工作: 有一个User类如下 package o1; /** * Created by yesiming on 16-11-19. */ public class User ...

  3. java反射 顺序输出类中的方法

    java反射可以获取一个类中的所有方法,但是这些方法的输出顺序,并非代码的编写顺序. 我们可以通过自定义一个注解来实现顺序输出类中的方法. 首先,先写一个类,定义增删改查4个方法 public cla ...

  4. 【java】java反射初探 ——“当类也照起镜子”

    反射的作用   开门见山地说说反射的作用 1.为我们提供了全面的分析类信息的能力 2.动态加载类   我理解的“反射”的意义 (仅个人理解) 我理解的java反射机制就是: 提供一套完善而强大的API ...

  5. 【java】java反射初探 ——“当类也学会照镜子”

    反射的作用   开门见山地说说反射的作用   1.为我们提供了全面的分析类信息的能力 2.动态加载类   我理解的“反射”的意义 (仅个人理解哈)   我理解的java反射机制就是: 提供一套完善而强 ...

  6. Java反射初探 ——“当类也学会照镜子”

    反射的作用 开门见山地说说反射的作用   1.为我们提供了全面的分析类信息的能力 2.动态加载类   我理解的“反射”的意义 (仅个人理解哈)   我理解的java反射机制就是: 提供一套完善而强大的 ...

  7. java反射之获取类的基本信息(一)

    一.反射原理. Java 反射机制.通俗来讲呢,就是在运行状态中,我们可以根据“类的部分已经的信息”来还原“类的全部的信息”.这里“类的部分已经的信息”,可以是“类名”或“类的对象”等信息.“类的全部 ...

  8. java反射对实体类取值和赋值,可以写成通过实体类获取其他元素的数据,很方便哦~~~

    项目中需要过滤前面表单页面中传过来的实体类的中的String类型变量的前后空格过滤,由于前几天看过一个其他技术博客的的java反射讲解,非常受益.于是,哈哈哈 public static <T& ...

  9. java反射对实体类取值和赋值

    public static void checkDesignerEdit(Object dtos) throws Exception { Class dtosClass = dtos.getClass ...

随机推荐

  1. Linux把内存挂载成硬盘提高读写速度

    tmpfs是一种虚拟内存文件系统正如这个定义它最大的特点就是它的存储空间在VM里面,这里提一下VM(virtual memory),VM是由linux内核里面的vm子系统管理,现在大多数操作系统都采用 ...

  2. windows下redis的配置和jedis api的最基本的使用

    redis的安装直接跳过 1.注册redis服务 在DOM窗口下,进入redis的安装目录(可以先进入安装目录,然后shift+右键,选择在此处打开powershell窗口), 输入命令: redis ...

  3. Offer垂青于有准备的人——微软亚洲研究院实习生们的就业分享

    编者按:一年一度的"求职大战"又拉开了序幕,如何在求职中掌握主动,更好地展现自己,最后抓住Offer?且听微软亚洲研究院三位实习生慢慢道来,Offer总会垂青于有准备的人. 廖振, ...

  4. [LC] 231. Power of Two

    Given an integer, write a function to determine if it is a power of two. Example 1: Input: 1 Output: ...

  5. marry|psych up|make it|Fireworks|be to blame for|

    同位语从句 ADJ 结婚的;已婚的If you are married, you have a husband or wife. We have been married for 14 years.. ...

  6. 用JSON报的一个错误java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeExcep

    以前在做项目的时候就曾接触过JSON的技术,但那个时候是项目经理把所有该配制的都配了,工具类也提供了,如何使用也跟我们说了,那个时候只是觉得很好用,倒没有研究过. 今天自己写了一个JSON的例子,可以 ...

  7. iOS应用程序开发——解决iOS7之前版本与之后版本下app启动图片跳动问题

    之前开发的app都是针对iOS6(兼容iOS5),所以在开发之初也出现了启动图片向下跳动的现象,通过网上的解决方法,代码中做了处理(“-20”): _imageView.frame = CGRectM ...

  8. OpenCV 腐蚀膨胀操作

    利用腐蚀膨胀操作实现对椭圆周围线条的消除,椭圆的大小不变 代码如下: #include "cv.h" #include "highgui.h" int main ...

  9. POJ 2226 Muddy Fields 二分图(难点在于建图)

    题意:给定一个矩阵和它的N行M列,其中有一些地方有水,现在有一些长度任意,宽为1的木板,要求在板不跨越草,用一些木板盖住这些有水的地方,问至少需要几块板子? 思路:首先想到如果没有不准跨越草的条件则跟 ...

  10. 向MyEclipse的项目中导入js文件时,出现小红叉

    这个问题困扰我很久.刚开始时,也没有解决,因此也在网上寻找解决方法,还是没能解决.最近做项目时再一次出现了这样的问题,于是决定还是再找找办法.在此,分享一下自己的解决方法,给正处于痛苦中的童鞋们带来解 ...