一篇文章彻底搞懂Java的大Class到底是什么

参考:一篇文章彻底搞懂Java的大Class到底是什么

笔记:

  • 说到Java反射,必须先把 Java 的字节码搞明白了,也就是 Class , 大 Class 在之前的文章中,我们知道了Java的大Class就是类的字节码,就是一个普通的类,里面保存的是类的信息,还不太明白Java的大Class的,可以先看一下之前的文章 一篇文章彻底搞懂Java的大Class到底是什么
  • 标题:大Class,自然就有小class,小class是大Class的对象。Java中,

    除了int等基本类型外,Java的其他类型全部都是小class(包括interface)。例如:

    • String
    • Object
    • Runnable
    • Exception
    • 。。。
  • 大Class是什么?所有的类都有一些公共特性,那么我们就定义一个类,来描述这些公共特性,这个Class就是大Class
  • 大Class有什么用?Class类中保存的是所有类的公共特性,那么我们通过Class知道某个类中有多少方法,有多少字段,每个字段叫什么名字,每个字段的类型是什么,每个方法的方法名是什么,某个方法有几个参数,等等。
  • Class如何使用?如何获取一个Class的对象? 答案:有以下3种方法,直接上代码

       public static void main(String[] args){
            //第一种
            Class c1 = String.class;
    
            //第二种
            String s = "hello,world";
            Class c2 = s.getClass();
    
            //第三种,以上面的Book类为例,其实就是动态加载类,注意捕获异常,因为类有可能不存在 
            try {
                Class c3 = Class.forName("com.test.Book");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
  • 有了 Class的对象我们怎么用?我们直接通过一个demo来演示更加的直接,如下

    package com.example.demo;
    
    public class Student {
        private String name;
        private int age;
    
        public static void main(String[] args){
            //一般我们把Class的对象叫字节码
            Class c = Student.class;
    
            // 外部普通类
            System.out.println("Student类名是:" + c.getName());
            System.out.println("Student类的简单类名是:" + c.getSimpleName());
            System.out.println("Student类有" + c.getDeclaredFields().length + "个字段");
    
            /**
             * ....
             * 我们可以通过 c (也就是Student这个类的对象,或者你也可以叫做Student类的字节码)
             * 拿到Student类中所有的方法名,方法数,字段名,字段数量,甚至你还可以通过Method来调用方法
             * 只要查查API,熟悉了API,就能做到
             * 暂时我们只打印简单
             */
        }
    }
  •  
  •  
posted @ 2021-11-15 12:55  旷野之息  阅读(138)  评论(0编辑  收藏  举报