前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据必学Java基础(八十九):反射的深入了解

大数据必学Java基础(八十九):反射的深入了解

原创
作者头像
Lansonli
发布2022-12-13 10:56:41
3150
发布2022-12-13 10:56:41
举报
文章被收录于专栏:Lansonli技术博客

​反射的深入了解

一、提供丰富的类

代码语言:javascript
复制
package com.lanson.test02;
//作为一个父类
public class Person {
    //属性
    private int age;
    public String name;

    //方法
    private void eat(){
        System.out.println("Person---eat");
    }
    public void sleep(){
        System.out.println("Person---sleep");
    }
}


package com.lanson.test02;
//Student作为子类
public class Student extends Person {
    //属性:
    private int sno;//学号
    double height;//身高
    protected double weight;//体重
    public double score;//成绩

    //方法:
    public String showInfo(){
        return "我是一名三好学生";
    }
    private void work(){
        System.out.println("我以后会找工作--》成为码农  程序员 程序猿  程序媛");
    }

    //构造器
    public Student(){
        System.out.println("空参构造器");
    }
    private Student(int sno){
        this.sno = sno;
    }
    Student(int sno,double weight){
        this.sno = sno;
        this.weight = weight;
    }
}

二、获取字节码信息的四种形式

代码语言:javascript
复制
package com.lanson.test02;

public class Test {
    public static void main(String[] args) throws ClassNotFoundException {
        //案例:以Person的字节码信息为案例
        //方式1:通过getClass()方法获取
        Person p = new Person();
        Class c1 = p.getClass();
        System.out.println(c1);

        //方式2:通过内置class属性:
        Class c2 = Person.class;
        System.out.println(c2);

        System.out.println(c1==c2);

        //注意:方式1和方式2  不常用

        //方式3:--》用的最多:调用Class类提供的静态方法forName
        Class c3 = Class.forName("com.lanson.test02.Person");
        //方式4:利用类的加载器(了解技能点)
        ClassLoader loader = Test.class.getClassLoader();
        Class c4 = loader.loadClass("com.lanson.test02.Person");
    }
}

三、可以作为Class类的实例的种类

Class类的具体的实例:

(1)类:外部类,内部类

(2)接口

(3)注解

(4)数组

(5)基本数据类型

(6)void

验证:

代码语言:javascript
复制
package com.lanson.test02;

public class Demo {
    public static void main(String[] args) {
        /*
        Class类的具体的实例:
        (1)类:外部类,内部类
        (2)接口
        (3)注解
        (4)数组
        (5)基本数据类型
        (6)void
         */
        Class c1 = Person.class;
        Class c2 = Comparable.class;
        Class c3 = Override.class;

        int[] arr1 = {1,2,3};
        Class c4 = arr1.getClass();
        int[] arr2 = {5,6,7};
        Class c5 = arr2.getClass();
        System.out.println(c4==c5);//结果:true .同一个维度,同一个元素类型,得到的字节码就是同一个
        
        Class c6 = int.class;
        Class c7 = void.class;
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ​反射的深入了解
    • 一、提供丰富的类
      • 二、获取字节码信息的四种形式
        • 三、可以作为Class类的实例的种类
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档