`

java反射详解(一)_Class类

    博客分类:
  • java
 
阅读更多

Class类

Java类用于描述一类事物的共性,该类事物有什么属性,没有什么属性,至于这个属性的值是什么,则是由这个类的实例对象来确定的,不同的实例对象有不同的属性值。Java程序中的各个Java类,它们是否属于同一类事物,是不是可以用一个类来描述这类事物呢?这个类的名字就是Class,要注意与小写class关键字的区别哦。Class类描述了哪些方面的信息呢?类的名字,类的访问属性,类所属于的包名,字段名称的列表、方法名称的列表,等等。学习反射,首先就要明白Class这个类。

Person类代表人,它的实例对象就是张三,李四这样一个个具体的人, Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class

àPerson

JavaàClass

 

Class类代表Java类,它的各个实例对象又分别对应什么呢?

对应各个类在内存中的字节码,例如,Person类的字节码,ArrayList类的字节码,等等。

一个类被类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,不同的类的字节码是不同的,所以它们在内存中的内容是不同的,这一个个的空间可分别用一个个的对象来表示,这些对象显然具有相同的类型,这个类型是什么呢?

 

如何得到各个字节码对应的实例对象(Class类型)

1.        类名.class,例如,System.class

2.        对象.getClass(),例如,new Date().getClass()

3.        Class.forName("类名"),例如,Class.forName("java.util.Date");

 

九个预定义Class实例对象:

基本的 Java 类型(booleanbytecharshortintlongfloat 和 double)和关键字 void 也表示为Class 对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Test
public void test() throws Exception {
    String str = "abc";
    Class cls1 = str.getClass();
    Class cls2 = String.class;
    Class cls3 = Class.forName("java.lang.String");
    System.out.println(cls1==cls2);
    System.out.println(cls1==cls3);
      
    System.out.println(cls1.isPrimitive());
    System.out.println(int.class.isPrimitive());
    System.out.println(int.class==Integer.class);
    System.out.println(int.class==Integer.TYPE);
    System.out.println(int[].class.isPrimitive());
    System.out.println(int[].class.isArray());
}
true
true
false
true
false
true
false
true

总之,只要是在源程序中出现的类型,都有各自的Class实例对象,例如,int[],void…

 

本文链接:java反射详解(一)_Class类,由huangyineng原创,转载请注明出处

分享到:
评论

相关推荐

    Java开发详解.zip

    031502_【第15章:Java反射机制】_Class类的使用笔记.pdf 031503_【第15章:Java反射机制】_反射应用——取得类的结构笔记.pdf 031504_【第15章:Java反射机制】_Java反射机制的深入研究笔记.pdf 031505_【第15章:...

    JAVA反射机制详解视频

    (类的加载概述和加载时机) (类加载器的概述和分类) (获取class文件对象的三种方式) ...(通过反射写一个通用的设置某个对象的某个属性为指定的值) (通过用户的增删改查和学生的登录注册引出中介) (动态代理的概述和实现)

    java反射详解

    class hello{ public static void main(String[] args) { Class<?> demo=null; try{ demo=Class.forName("Reflect.Person"); }catch (Exception e) { e.printStackTrace(); } Person per=null; try { per=...

    java反射原理详解

    JAVA反射机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。但是JAVA有着一个非常突出的动态相关机制:...

    java反射机制原理详解.docx

    我们创建一个类,通过编译,生成对应的.calss文件,之后使用java.exe加载(jvm的类加载器)此.class文件,此.class文件加载到内存以后,就是一个运行时类,存在缓存区,那么这个运行时类的本身就是一个class的实例 ...

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    Java中的Class类和Object类 Java异常 解读Java中的回调 反射 泛型 枚举类 Java注解和最佳实践 JavaIO流 多线程 深入理解内部类 javac和javap Java8新特性终极指南 序列化和反序列化 继承、封装、多态的实现原理 容器...

    JAVA反射的详解以及使用方法

    介绍了反射的作用、如何进行反射,Class对象反射构造器、反射方法、反射属性以及实例应用。浓缩精简版、适合初学反射或者复习相关知识。

    Java工程师面试复习指南

    Java中的Class类和Object类 Java异常 解读Java中的回调 反射 泛型 枚举类 Java注解和最佳实践 JavaIO流 多线程 深入理解内部类 javac和javap Java8新特性终极指南 序列化和反序列化 继承封装多态的实现原理 集合类 ...

    Java反射、动态代理详解.pdf

    加载过程主要完成三件事情: (1)通过类的全限定名来获取定义此类的二进制字节流 (2)将这个类字节流代表的静态存储结构...(3)在堆中生成一个代表此类的java.lang.Class对象,作为访问方法区这些数据结构的入口。

    java反射总结实例详解

    主要结合实例形式分析了介绍了java基于反射得到对象属性值的方法,Class类,基本数据类型,类的反射等,需要的朋友可以参考下

    详解Java高级特性之反射

    主要介绍了Java高级特性之反射的相关知识,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下

    内部类与反射机制详解

    Reflection 是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public, static 等等)、superclass...

    Java反射知识详解(或许对你有帮助)

    内容主要包括反射的概念、Class类对象的加载方式、获取Method、Field、Constructor以及在最后我们利用反射来手撸一个小“框架”。 1.什么是反射? 反射(reflection)是Java特征之一,它允许执行中的Java程序自行...

    java基础案例与开发详解案例源码全

    15.2 使用Java反射机制414 15.2.1 获取类型信息414 15.2.2 创建对象417 15.2.3 调用方法419 15.2.4 访问成员变量的值421 15.2.5 操作数组422 15.3 反射与动态代理424 15.3.1 静态代理424 15.3.2 动态代理426 15.4 本...

    Java 基础核心总结 +经典算法大全.rar

    Class 类Field 类Method 类ClassLoader 类 枚举 枚举特性 枚举和普通类-样枚举神秘之处 枚举类 I/O File 类 基础 IO 类和相关方法InputStream OutputStream Reader 类Writer 类 InputStream 及其子类 ...

    Java动态代理方法详解.docx

    使用jdk的反射机制,创建对象的能力, 创建的是代理类的对象。 而不用你创建类文件。不用写java文件。 动态:在程序执行时,调用jdk提供的方法才能创建代理类的对象。 jdk动态代理,必须有接口,目标类必须实现接口...

    详解提高使用Java反射的效率方法

    在我们平时的工作或者面试中,都会经常遇到“反射”这个知识点,通过“反射”我们可以动态的获取到对象的信息以及灵活的调用对象方法等,但是在使用的同时又伴随着另一种声音的出现,那就是“反射”很慢,要少用。...

    疯狂JAVA讲义

    学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在子类中再定义一个内部类来重写其父类中的内部类? 211 6.7.4 局部内部类 211 6.7.5 匿名内部类 212 6.7.6 闭包(Closure)和回调 215 6.8 ...

    C++ 反射机制详解及实例代码

    换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。然而C++是不支持反射机制,虽然C++有RTTI(运行时类型识别...

Global site tag (gtag.js) - Google Analytics