`

java反射一些笔记

 
阅读更多

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对
于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用
对象的方法的功能称为java语言的反射机制。
       我们刚刚接触反射的时候,可能就在想,这个在我们编写程序的时候,很少用到,到底有什
么用呢?没错,对于普通编程根本就用不到反射,但是有时候我们在网络上传给我一个类,
这个类我们事先是不知道的,这个需要动态的加载,这时候就需要了,在比如我们都知道
spring struts
       hibernate ibatis这些框架,他们存在的基础就是:反射。
       我也用过反射,最近在学Java的时候,学到了,就写个笔记记录下来。
首先说Class类,这里的C是大写的,这个是一个类名叫Class的class,这个类也是从Object
        class继承来的。这个类的实例表示的是Java中的一份字节码文件。这里有一点需要注意,这里
的一份说的是如果这个类有字节码那么只有一份。既然Class是一个类,那么我们就可以实例化,
我们很自然的就想到了new Class(),但是这个在Java中是没有的。但是在Java的每个类中都提供了一个getClass方法,
这个方法的返回值就是一个Class实例。我们还可以使用“类名.class”得到这个对象的字节码。
这里还有一点注意,在Java中八个基本数据类型也对应的有字节码,我们也可以使用int.class
类似的方法,得到基本数据类型的字节码。还有一个有意思的事就是,我们经常使用的void也
有一份字节码。
      既然八个基本数据类型都有对应的字节码,我们知道在Java中对于基本数据类型都提供了对应
的封装类,那么这两个的字节码是同一个吗?答案是不是,一个基本数据类型,一个是对象。
这里说句题外话,Java号称是完全面向对象的,但是还是提供了基本数据类型,它们不是对象,
但是在Java1.4以后,我可以把它当成对应的封装类对象,因为Java提供了对于基本数据类型的
自动拆箱和装箱。但是在Ruby中所有的都是对象包括基本数据类型。
下面我们举一个例子,验证上面说的:

 

  1. import  java.lang.reflect.Constructor;  
  2.   
  3. public   class  ReflectTest  
  4. {  
  5.      public   static   void  main(String[] args)  throws  Exception  
  6.     {  
  7.          //在内存中只有一份字节码,我们可以使用同一份字节码创建不同的对象   
  8.         String str =  "abc" ;  
  9.         Class cla1 = str.getClass();  
  10.         Class cla2 = String. class ;  
  11.         Class cla3 = Class.forName( "java.lang.String" );  
  12.         System.out.println(cla1 == cla2);  
  13.         System.out.println(cla2 == cla3);  
  14.           
  15.         System.out.println(cla1.isPrimitive()); //判断是否是基本数据类型   
  16.         System.out.println( int . class .isPrimitive());  
  17.         System.out.println( int . class  == Integer. class );  
  18.         System.out.println( int . class  == Integer.TYPE); //TYPE代表对应的基本类型的字节码   
  19.         System.out.println( int []. class .isPrimitive()); //数组不是原始类型   
  20.         System.out.println( int []. class .isArray()); //检测一份字节码是否是数组   
  21.     }  
  22.   
  23. }  
  1. true   
  2. true   
  3. false   
  4. true   
  5. false   
  6. true   
  7. false   
  8. true  
分享到:
评论

相关推荐

    Java反射机制笔记(简单易懂)

    Java反射机制笔记 Java反射机制是Java语言中一个强大的功能,它允许程序在运行时检查和修改其自身的结构和行为。通过Java反射机制,我们可以在运行时获取类的信息,包括类的成员变量、方法、构造方法等,并可以动态...

    java反射笔记

    总结起来,“java反射笔记”涵盖了Java反射的基本概念、使用方式以及在Eclipse环境下的一些注意事项。通过对`Class`、`Method`和`Field`对象的操作,我们可以实现动态编程,增强代码的灵活性,但同时也需要注意性能...

    java注解和反射的个人学习笔记

    java注解和反射的个人学习笔记

    早期自学java反射知识笔记

    Java 反射机制是指通过 Java 语言提供的一些 API 来访问和操作 Java 对象的结构和行为的机制。它允许程序在运行时检查和修改自身的结构和行为,而不需要在编译时知道这些信息。 ### Java 反射机制的应用场景 Java ...

    JAVA 私塾笔记整理——反射机制(Reflection)

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理对象、类、接口以及它们之间的关系...

    Java基础 学习笔记 Markdownr版

    本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...

    java学习笔记(java 反射机制 流 内存管理)

    本笔记主要涵盖了四个核心知识点:Java反射机制、流(I/O流)、内存管理和Java学习的基础。以下是对这些主题的详细阐述: 一、Java反射机制 Java反射机制是Java语言的一个强大特性,允许程序在运行时检查类、接口、...

    java学习笔记java反射机制

    java学习笔记java反射机制

    java学习——java中的反射学习笔记.rar_java 反射

    本篇笔记将深入探讨Java反射的概念、重要性以及如何使用。 一、反射基础 1. 类加载:当Java虚拟机(JVM)加载一个类时,它会创建该类的Class对象。这个对象包含了关于类的所有信息,包括方法、字段、构造器等。...

    java反射与动态代理笔记

    Java反射和动态代理是Java编程中的重要特性,它们在实现高度灵活和动态的代码执行方面发挥着关键作用。本文将深入探讨这两个概念及其在实际开发中的应用。 **Java反射** Java反射API允许程序在运行时检查类、接口...

    Java反射笔记源代码

    Java反射是Java编程语言中的一个强大特性,它允许程序在运行时检查类、接口、字段和方法的信息,并能动态地创建对象和调用方法。在深入理解Java反射之前,我们首先要明白,它属于元编程的一部分,即在编写程序时能够...

    Java-反射笔记.pdf

    本笔记将深入探讨Java反射的原理、用途以及如何使用。 一、反射的概念与作用 反射是Java提供的一种能力,它允许程序在运行时动态地获取类的信息(如类名、方法名、参数类型等)并调用这些方法。这种动态性使得Java...

    JAVA反射笔记 md格式

    Java反射是Java编程语言中的一个强大特性,它允许运行时的程序访问并操作类、接口、字段和方法等对象,即使这些对象在编译时并未知。这为开发者提供了动态性,可以处理未知类型的对象,或者在运行时发现和调用类的...

    java学习笔记markdown

    8. **反射机制**:探讨Java反射API的使用,包括动态获取类信息、创建对象、调用方法等功能,这对于理解和调试程序有很大的帮助。 9. **JVM内部机制**:简述Java虚拟机的工作原理,包括类加载、内存管理、垃圾回收...

    Java入门学习笔记

    最后,笔记可能会介绍Java标准库的一些重要部分,如JDBC(Java数据库连接)用于数据库操作,或者Swing和JavaFX用于构建图形用户界面。 每道练习的源代码答案和讲师留下的思考题源代码,都是实际动手编程的宝贵资源...

    狂神说JAVA的所有笔记.zip

    《狂神说JAVA的所有笔记》是一份全面且深入的JAVA学习资源,包含了JAVA语言的核心概念、进阶技术以及实际应用的方方面面。这份笔记是作者在深入研究JAVA编程过程中积累的宝贵经验,旨在帮助读者系统性地掌握JAVA这门...

    李兴华java笔记

    通过对《李兴华Java实战经典笔记》的深入学习,读者不仅可以掌握Java编程的基础知识,还能了解到实际项目中的一些最佳实践,这对于成为一名合格的Java开发者来说是非常有益的。同时,结合实际编程练习,可以更好地...

    java全套培训笔记

    这份"java全套培训笔记"来自于加拿大的知名IT培训机构——达内软件,它提供了全面深入的学习资源,涵盖了从基础到高级的Java编程知识,对于想系统学习或者提升Java技能的人来说极具价值。 首先,我们来探讨Java的...

    java反射机制学习笔记

    Java反射机制是Java编程语言的一项重要特性,它允许程序在运行时动态地获取类的信息,并且能够对类的属性和方法进行操作。反射机制的核心在于Java的`java.lang.reflect`包,其中包含了`Class`、`Constructor`、`...

Global site tag (gtag.js) - Google Analytics