透彻分析反射的基础_Class类
一、反射的基石--->Class类
| 1. Java类用于描述一类事物的特性,该类事物有什么属性,没有什么属性,值域这个属性的值是什么,则是由这个类的实例对象来确定的,不同的实例对象有不同的属性值。Java程序中的各个Java类,他们是否属于同一类事物,是不是可以用一个类来描述这类事物呢?这个类的名字就是Class,要注意与小写class关键字的区别哦。Class类描述了哪些方面的信息呢?类的名字,类的访问属性,类所属的包名,字段名称的列表,方法名称的列表,等等。学习反射,首先就要明白Class这个类。 |
- Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class。
- public class Class
- 对比提问:众多的人用一个什么类表示?众多的Java类用一个什么表示?
- 人—>Person
- Java类—>Class
- 对比提问:Person类代表人,它的实例对象就是张三,李四这样一个个具体的人,Class类代表Java类,它的各个实例对象分别对应什么呢?
- 对应各个类在内存中的字节码,例如,Person类的字节码,ArrayList类的字节码,等等。
- 一个类被类加载器加载到内存中,占用一片存储空间,这个空间里的内容就是字节码,不同的类的字节码是不同的,所以它们在内存中的内容是不同的,这一个个的空间分别用一个个的对象来表示,这些对象显然具有同样的类型,这个类型是什么呢?
- 如何得到各个字节码对应的实例对象(Class类型)
- 类名.class,例如 System.class//通过类名得到字节码实例
- 对象.getClass(),例如 new Date().getClass();//通过实例得到字节码实例
- Class.forName("类名"); Class.forName("java.util.Date");//适合于类字节码尚未加载到内存的情况下
- java.util.Date是一个字符串,如果事先不知道将加载哪个类,就传一个String,动态的加载字符串指定的类字节码。
- 八个基本类型和void也对应表现为自己的Class字节码对象。
- Class cls1=int.class;
- Class cls2=void.class;
- 数组类型 的Class实例对象
- Class.isArray()
package com.itcast.day1; public class ReflectTest {
public static void main(String[] args)throws Exception { //分别用三种方式得到 String类在内存中的字节码
Class cls1=String.class;//01. 类名.class String str="123";
Class cls2=str.getClass();//02. 实例.getClass() String classUrl="java.lang.String";
Class cls3=Class.forName(classUrl);//03. Class.forName(类名) //三种方法是得到了同一份字节码。
System.out.println(cls1 == cls2);//true
System.out.println(cls1 == cls3);//true System.out.println(cls1.isPrimitive());//false,不是基本类型的字节码
System.out.println(int.class.isPrimitive());//true 基本类型的字节码
System.out.println(int.class == Integer.class);//false 基本类型和包装类型不是一份字节码
System.out.println(int.class == Integer.TYPE);//true Integer.TYPE就代表包装对应的基本类型的字节码 System.out.println(int[].class.isPrimitive());//false 数组也是一种类型,但不是基本类型
System.out.println(int[].class.isArray());//true 是否是数组 }
}
透彻分析反射的基础_Class类的更多相关文章
- Java基础---基础加强---增强for循环、自动拆装箱及享元、枚举的作用、实现带有构造方法、透彻分析反射的基础_Class类、成员变量的反射、数组参数的成员方法进行反射、数组的反射应用
在perference 加content Assist 可以设置快捷键 透视图与视图 透视图:Debug和java主窗口 视图:每一个小窗口就是视图 高版本的java可运行低版本的java版本 常见的 ...
- JAVA基础加强(张孝祥)_类加载器、分析代理类的作用与原理及AOP概念、分析JVM动态生成的类、实现类似Spring的可配置的AOP框架
1.类加载器 ·简要介绍什么是类加载器,和类加载器的作用 ·Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader ...
- Android面试基础(一)IOC(DI)框架(ViewUtils)讲解_反射和自定义注解类
1. Android中的IOC(DI)框架 1.1 ViewUtils简介(xUtils中的四大部分之一) IOC: Inverse of Controller 控制反转. DI: Dependenc ...
- JVM Java 内存区域透彻分析(转)
出处: Java 内存区域透彻分析 Java8内存模型—永久代(PermGen)和元空间(Metaspace) 这篇文章主要介绍Java内存区域,也是作为Java虚拟机的一些最基本的知识,理解了这 ...
- java反射的基础学习代码
java反射的学习,好多东西不太理解,主要分析了constructor,method,field,数组和调用main函数等反射的多个方面小例子. 主要的练习类 package javaAdvanced ...
- 反射 介绍System.Type类
本节先介绍system.Type类,通过这个类可以访问关于任何数据类型的信息. 1. system.Type类以前把Type看作一个类,但它实际上是一个抽象的基类.只要实例化了一个Type对象,实际上 ...
- Live555 分析(一):类介绍
从程序的结构来看,live项目包括了四个基本库.程序入口类(在mediaServer中)和一些测试代码(在testProgs中). 四个基本静态库是UsageEnvironment.BasicUsag ...
- 二十六. Python基础(26)--类的内置特殊属性和方法
二十六. Python基础(26)--类的内置特殊属性和方法 ● 知识框架 ● 类的内置方法/魔法方法案例1: 单例设计模式 # 类的魔法方法 # 案例1: 单例设计模式 class Teacher: ...
- oc中的oop基础及类的基本介绍
面向对象的(OOP)的基础知识 类(class):表示一组对象数据的结构体,对象通类来得到自身.类名首字母大写. 对象(objcet):是一种包含值和指向其类的隐藏指针的结构体.运行中的程序中通常会有 ...
随机推荐
- 受限玻尔兹曼机(RBM)学习笔记(六)对比散度算法
去年 6 月份写的博文<Yusuke Sugomori 的 C 语言 Deep Learning 程序解读>是囫囵吞枣地读完一个关于 DBN 算法的开源代码后的笔记,当时对其中涉及的算 ...
- Sequence.js - 适合电子商务网站的图片滑块
Sequence.js 是一个非常现代的图片滑动效果,特别适合电子商务网站或者企业产品展示功能.带有图片缩率图,能够呈现全屏图片浏览效果.结合 CSS3 Transition 实现响应式的滑块效果. ...
- ecshop中那些有意思的代码
1:返回数量为0的array,而不是null /** * 获得推荐商品 * * @access public * @param string $type 推荐类型,可以是 best, new, hot ...
- XPATH使用总结
最近公司里需要写一些爬虫项目,所以去接触学习了xpath的内容.在w3c上给出了xpath的语法,但是我感觉不全,而且讲得也不详细,我又去网上找了一些文章,总结一下. 这几个都是比较常用的,能解决基本 ...
- 【推荐】iOS集合视图的可重新排序的layout
在实际项目中你或许会遇到在一个集合视图中移动一项到另外一个位置,那么此时我们需要对视图中的元素进行重新排序,今天推荐一个很好用的第三方类LXReorderableCollectionViewFlowL ...
- JavaScrip的DOM操作
1.DOM的基本概念 DOM是文档对象模型,这种模型为树模型,文档是指标签文档:对象是指文档中每个元素:模型是指抽象化的东西 2.Windows对象操作 一.属性和方法 二.Window.open(& ...
- Cocos2dx 3.x包含ext库报错解决
之前使用cocos2dx 3.6版本中用到了ext库中的一些东西,使用visual studio 2013,编译的时候报错: 无法打开包括文件:“extensions/ExtensionMacros. ...
- C#怎样处理xml文件的大于号和小于号等常用符号(xml符号引发的程序错误)
在程序中由xml配置而成的sql语句要转换为C#支持的sql语句 <settings> <select> a.*</select> <from> (se ...
- js用正则表达式验证用户和密码的安全性,生成随机验证码
制作了一个表单,表单验证用户.密码.随机验证码 html页面
- 控制台(Console)报错:java.io.IOException: Broken pipe
控制台(Console)输出: java.io.IOException: Broken pipe at sun.nio.ch.FileDispatcherImpl.write0(Native Meth ...