Java 反射理解(一)-- Class 类的使用

概念

这里阐述几个基本概念:

  1. 在面向对象的世界里,万事万物皆对象。(在 Java 语言中,静态的成员、普通数据类型除外)

  2. 类也是对象,类是 java.lang.Class 的实例对象。

  3. 类类型是什么?

    类类型可以简单理解为类的类型。在万物皆对象的 Java 中,我们定义的每个类都是 java.lang.Class 类的一个对象,该对象就是该类的类类型,即 Class 对象。

  4. 得到 Class对象有三种方法:

    • 已知类名 (类名.class
    • 已知类对象(对象.getClass()
    • Class 类(类类型)中提供一个叫做 forName 的方法(Class.forName("类名")

演示

我们通过具体的演示来描述得到 Class 对象的三种方法:

  1. import com.demo.reflect;
  2. /** 创建一个 Foo 类 **/
  3. class Foo{
  4. void print(){
  5. System.out.println("foo");
  6. }
  7. }
  8. /** 演示类 ClassDemo1 **/
  9. public class ClassDemo1 {
  10. public static void main(String[] args) {
  11. //Foo的实例对象用 fool 表示
  12. Foo foo1 = new Foo();
  13. //Foo 这个类 也是一个实例对象
  14. //任何一个类都是Class的实例对象,这个实例对象有三种表示方式
  15. // c1, c2, c3 表示了 Foo 类的类类型(class type),一个类只可能是Class类的一个实例对象,即 c1 = c2 = c3,三次得到的Class对象都是同一个
  16. //第一种表示方式 ---> 实际在告诉我们任何一个类都有一个隐含的静态成员变量class
  17. Class c1 = Foo.class;
  18. //第二中表达方式 ---> 已经知道该类的对象通过getClass方法获取
  19. Class c2 = foo1.getClass();
  20. System.out.println(c1 == c2);
  21. //第三种表达方式
  22. Class c3 = null;
  23. try {
  24. c3 = Class.forName("com.demo.reflect.Foo");
  25. } catch (ClassNotFoundException e) {
  26. // TODO Auto-generated catch block
  27. e.printStackTrace();
  28. }
  29. System.out.println(c2==c3);
  30. //我们完全可以通过类的类类型创建该类的对象实例 ---> 通过c1 or c2 or c3 创建 Foo 的实例对象
  31. try {
  32. Foo foo = (Foo) c1.newInstance();//需要有无参数的构造方法
  33. foo.print();
  34. } catch (InstantiationException e) {
  35. // TODO Auto-generated catch block
  36. e.printStackTrace();
  37. } catch (IllegalAccessException e) {
  38. // TODO Auto-generated catch block
  39. e.printStackTrace();
  40. }
  41. }
  42. }

运行结果为:

  1. true
  2. true
  3. foo

完。

Java 反射理解(一)-- Class 类的使用的更多相关文章

  1. Java 反射理解(二)-- 动态加载类

    Java 反射理解(二)-- 动态加载类 概念 在获得类类型中,有一种方法是 Class.forName("类的全称"),有以下要点: 不仅表示了类的类类型,还代表了动态加载类 编 ...

  2. Java反射理解(五)-- 方法反射的基本操作

    Java反射理解(五)-- 方法反射的基本操作 方法的反射 1. 如何获取某个方法 方法的名称和方法的参数列表才能唯一决定某个方法 2. 方法反射的操作 method.invoke(对象,参数列表) ...

  3. Java反射理解(四)-- 获取成员变量构造函数信息

    Java反射理解(四)-- 获取成员变量构造函数信息 步骤 获取成员变量信息: obj.getClass() 获取类类型对象 成员变量也是对象,java.lang.reflect.Field 类中封装 ...

  4. Java 反射理解(三)-- Java获取方法信息

    Java 反射理解(三)-- Java获取方法信息 基本的数据类型.void关键字,都存在类类型. 举例如下: public class ClassDemo2 { public static void ...

  5. 利用Java反射机制对实体类的常用操作工具类ObjectUtil

    代码: ObjectUtil类: import java.lang.reflect.Field; import java.math.BigDecimal; import java.text.Simpl ...

  6. 浅谈Java反射机制 之 使用类的 属性、方法和构造函数

    前面两篇我们总结了Java反射机制如何获取类的字节码,如何获取构造函数,属性和方法, 这篇我们将进一步验证如何使用我们获取到的属性.方法以及构造函数 1.使用 反射 获取到的 属性 import ja ...

  7. java反射技术主要实现类有哪些,作用分别是什么

    Java反射技术主要实现类有哪些,作用分别是什么? 在JDK中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect包中 1)Class类:代表一个类 2)Field 类 ...

  8. [转]Java反射之如何判断类或变量、方法的修饰符(Modifier解析)

    Java针对类.成员变量.方法,有很多修饰符,例如public.private.static.final.synchronized.abstract等,这些修饰符用来控制访问权限或其他特性. 本文就用 ...

  9. 如何防止JAVA反射对单例类的攻击?

    在我的上篇随笔中,我们知道了创建单例类有以下几种方式: (1).饿汉式; (2).懒汉式(.加同步锁的懒汉式.加双重校验锁的懒汉式.防止指令重排优化的懒汉式); (3).登记式单例模式; (4).静态 ...

随机推荐

  1. 最小n个和(优先队列)

    给出两个包含 nn 个整数的数组 AA,BB.分别在 AA, BB 中任意出一个数并且相加,可以得到 n^2n2个和.求这些和中最小的 nn 个. 输入格式输入第一行一个整数 n(1 \le n \l ...

  2. python能用来做什么?这3大主要用途你一定要知道!(实用)

    导读:如果你想学Python,或者你刚开始学习Python,那么你可能会问:“我能用Python做什么?” 这个问题不好回答,因为Python有很多用途. 但是随着时间,我发现有Python主要有以下 ...

  3. 2个最好的JavaScript编辑器 必须要知道

    JavaScript程序员有许多很好的工具可供选择,几乎太多了.在这篇文章中,介绍2个最好用的文本编辑器,也是顶级的.并且很好地支持使用JavaScript,HTML5和CSS进行开发,并用Markd ...

  4. Content:"\2715",特殊字符和图标

    原文 项目中用到的一些特殊字符和图标 html代码 <div class="cross"></div> css代码 1 2 3 4 5 6 7 8 9 10 ...

  5. centos 下启动 rabbitmq 报错的解决

    安装 rabbitmq 后进行了一些配置,然后启动服务: service rabbitmq-server start 无法启动.通过 journalctl -xe 查看日志后,有如下日志: ... - ...

  6. leetcode312 戳气球

    动态规划 time O class Solution { public: int maxCoins(vector<int>& nums) { nums.insert(nums.be ...

  7. LC 794. Valid Tic-Tac-Toe State

    A Tic-Tac-Toe board is given as a string array board. Return True if and only if it is possible to r ...

  8. 用Servlet返回JSON文本动态创建DataGrid

    <%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC & ...

  9. selenium操作cookie

    1,登录网页,使用webdriver的get_cookies获取cookie,并保存json文件 2,读取json文件,遍历添加网站使用的每一个cookies的name,value. 使用add_co ...

  10. Java日志体系(七)日志框架切换

    通过 SLF4J 统一日志 在实际的日志转换过程中,SLF4J其实是充当了一个中介的角色.例如当我们一个项目原来是使用LOG4J进行日志记录,但是我们要换成LogBack进行日志记录. 此时我们需要先 ...