Java基础之-反射1

简单而言就是 一个类运行期间,对于任意一个类,都能够获取这个类当中的所有属性以及方法

其中的属性和方法也可以进行访问和调用。

二、Class类


程序运行期间,Java运行时系统始终认为所有对象维护一个运行时类型的标识。虚拟机通过这些运行时类型信息可以选择要执行正确的方法。

使用一个特殊的Java类访问这些信息。保存这些信息的类名为Class,可能这会让我们会有点难受 xxx.class(字节码文件) 和我们获取的Class类有什么样的联系,后续再加以说明,先来看一个实例:

获取Class类对象的方式:

  1. 通过对象获取Class类对象

  2. 通过静态方法forName()

  3. 通过类的字节码

一、通过对象获取Class类对象


package com.reflection;



public class Student {

    private String name; //学生姓名

    private int age; //学生年龄

    private String address; //学生所在地



    public Student() {

    }



    public Student(String name, int age, String address) {

        this.name = name;

        this.age = age;

        this.address = address;

    }



    public String getName() {

        return name;

    }



    public void setName(String name) {

        this.name = name;

    }



    public int getAge() {

        return age;

    }



    public void setAge(int age) {

        this.age = age;

    }



    public String getAddress() {

        return address;

    }



    public void setAddress(String address) {

        this.address = address;

    }

}




package com.reflection;



public class ClassTest {

    public static void main(String[] args) {

        //1.创建对象

        Student s = new Student();

        s.set

[video(video-8PGqMbZO-1716354551447)(type-bilibili)(url-https://player.bilibili.com/player.html?aid=1804892953)(image-https://img-blog.csdnimg.cn/img_convert/d03a705143646f4f3f6ea879d59b2788.png)(title-必看视频!获取2024年最新Java开发全套学习资料 备注Java)]

Name("张三");

        //2.通过对象.getClass 获取所对应的Class类

        Class<?> c = s.getClass();

        System.out.println(c); //class com.reflection.Student 类的全限定名



        System.out.println(c.getName() + "-->" + s.getName()); //获取Class类对应的类的全限定名

        System.out.println(s.getClass().getName()); //与上述输出语句效果一致

    }

}



二、通过forName()获取Class类对象


package com.reflection;



public class ClassTest2 {

    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {

        //1.通过静态方法forName() 来获取类名对应的Class对象

        Class<?> c = Class.forName("com.reflection.Student");



        System.out.println(c.getName()); //获取类的全限定名

        System.out.println(c.getConstructor()); //获取类的无参构造器



    }

}



三、通过类的字节码,也是最快截的方式


package com.reflection;



import java.util.Random;



public class ClassTest3 {

    public static void main(String[] args) {

        Class<?> c = Student.class;

        Class<?> c2 = int.class;

        Class<?> c3 = Random.class;



        /*

            在这里我们就可以感受到反射的强大之处了

         */

        System.out.println(c.getName());

        System.out.println(c2.getName());

        System.out.println(c3.getName());

    }

}



注意:一个Class对象实际上表示的是一个类型,可能是类,也可能不是一个类。例如:int不是类 但int.class是一个Class类型的对象

类是可以实例化的 int是一种基本数据类型 如果有学过scala语言的小伙伴就知道Java是一种不彻底的面向对象语言,其中很显示的条件就是Java当中的基本数据类型不是对象。包装类才是对象!!

最后

作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料


化的 int是一种基本数据类型 如果有学过scala语言的小伙伴就知道Java是一种不彻底的面向对象语言,其中很显示的条件就是Java当中的基本数据类型不是对象。包装类才是对象!!

最后

作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料

[外链图片转存中…(img-5qMEZp7P-1716456685448)]
[外链图片转存中…(img-mhdL5mbU-1716456685449)]

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值