反射的基石——Class类
2019独角兽企业重金招聘Python工程师标准>>>
一、概述
1、Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class。
2、对比提问:众多的人用一个什么类表示?众多的Java类用一个什么类表示?
人 ——> Person
Java类 ——> Class
3、对比提问: Person类代表人,它的实例对象就是张三,李四这样一个个具体的人,Class类代表Java类,它的各个实例对象又分别对应什么呢?
① 对应各个类在内存中的字节码,例如,Person类的字节码,ArrayList类的字节码,等等。
② 一个类被类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,不同的类的字节码是不同的,所以它们在内存中的内容是不同的,这一个个的空间可分别用一个个的对象来表示,这些对象显然具有相同的类型,这个类型是什么呢?
4、如何得到各个字节码对应的实例对象( Class类型)
① 类名.class,例如,System.class
② 对象.getClass(),例如,new Date().getClass()
③ Class.forName("类名"),例如,Class.forName("java.util.Date");
注:此方式的两种含义——
> 如果该类已经被类加载器加载至jvm虚拟机中,那么直接返回该字节码实例对象
> 否则类加载器先将该类加载至jvm虚拟机并缓存,然后返回该字节码实例对象
5、九个预定义Class实例对象
boolean byte char short int long float double void
Boolean.TYPE, Character.TYPE, Byte.TYPE, Short.TYPE, Integer.TYPE, Long.TYPE, Float.TYPE, Double.TYPE, Void.TYPE
① 参看Class.isPrimitive方法的帮助
② Int.class == Integer.TYPE
package staticimport;public class ReflectTest {public static void main(String[] args) throws Exception {String str = "abc";Class clazz = str.getClass();Class clazz2 = String.class;Class clazz3 = Class.forName("java.lang.String");//三种方式获取String类的Class的实例对象均是同一个!System.out.println(clazz == clazz2);System.out.println(clazz == clazz3);//String是否是原始类型(false)System.out.println(String.class.isPrimitive());//int是否是原始类型(true)System.out.println(int.class.isPrimitive());//int与Integer的Class类型是否一样(false)System.out.println(int.class == Integer.class);//Integer.TYPE其实就是int.class(true)System.out.println(int.class == Integer.TYPE);//int[]的Class类型是否是原始类型(false)System.out.println(int[].class.isPrimitive());//int[]的Class类型是否是数组类型(true)System.out.println(int[].class.isArray());}}
6、数组类型的Class实例对象
Class.isArray()
7、总之,只要是在源程序中出现的类型,都有各自的Class实例对象,例如,int[],void…
转载于:https://my.oschina.net/Howard2016/blog/1613738
反射的基石——Class类相关推荐
- 包里替换class文件_Java 反射之根基 Class 类
Java 反射之根基 Class 类 Java中反射机制很重要,Java的动态语言就是靠反射机制实现的,反射技术也是程序员走的更远必不可少的一个技能.一般情况下我们都是通过类来创建对象,如果要求通过一 ...
- javabean反射改字段内容_java反射机制给实体类相同字段自动赋值实例
一.封装一个工具类 1.简易版 package net.aexit.construct.acceptance.websky.utils; import java.lang.reflect.Field; ...
- 如何通过反射将字符串转换为类
package org.entity; /*** 本案例演示如何通过反射将字符串转换为类* */ public class Test {public static void main(String[] ...
- 利用反射机制创建新类的两种方式及比较
[0]README 0.1) 本文描述+源代码均 转自 http://blog.csdn.net/fenglibing/article/details/4531033 , 旨在深入理解 如何利用反射机 ...
- java 反射类成员_java 反射(二)类成员
在Java反射的包中定义一个接口java.lang.reflect.Member,它有三个实现类java.lang.reflect.Field, java.lang.reflect.Method, a ...
- java 类.class_Java 反射之根基 Class 类
Java 反射之根基 Class 类 Java中反射机制很重要,Java的动态语言就是靠反射机制实现的,反射技术也是程序员走的更远必不可少的一个技能.一般情况下我们都是通过类来创建对象,如果要求通过一 ...
- JAVA反射机制、Class类及动态加载、成员变量构造方法其他方法的反射与调用、代理模式AOP
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调用对象的方法的功能称为java语言 ...
- 反射:获取Class类的三种方法
反射:获取Class类的三种方法 // 1.Class类中的一个静态方法:forName(全限名:包名 + 类名) Class c = Class.forName(路径); System.out.pr ...
- Java利用反射动态加载类实战
package com.web.common.utility.reflector; import java.io.Serializable; import java.lang.reflect.Cons ...
最新文章
- ssh远程操作服务器
- sql查询between and_SQL(二)——SQL简单查询
- django邮箱验证模块
- hdu 1317 XYZZY【Bellheman_ford 判断正环小应用】
- (待定系数法)A/B
- fun(1),fun(2),fun(3)
- DataGrid实现简单的行分组
- CCNP-17 OSPF试验13(BSCI)
- 技术人员如何成长?(资料整理)
- 计算机组成原理尾数的求法,计算机组成原理第八讲(运算办法).ppt
- 自动化CodeReview - ASP.NET Core请求参数验证
- coco数据集大小分类_COCO数据集的简单介绍
- 京东基础架构部招聘GO/JAVA架构师两名(T7+)
- 远程访问 Sql Server Express
- 注册Google的步骤
- 三极管工作原理_PNP型三极管基础知识解析
- Java笔记17:JAVA常用函数
- Google是如何教会机器玩Atari游戏的
- python入门和使用
- LA 4986 hdu3756 Dome of Circus 三分答案