20200314——java反射

动态语言与静态语言
动态语言:运行时代码可以根据某些条件改变自身的结构
静态语言:不能改变

java不算是纯静态语言,可以根据反射机制获得类似动态语言的效果

java reflection
反射是java被视为动态语言的关键,反射机制允许程序在执行期间借助于Reflection API获取任何类的内部信息,并且直接操作任意对象的内部属性及方法

加载完类之后,在堆的内存中方法区中就会产生一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息,我们可以通过对这个对象看到类的结构,这个对象就像一个镜子,透过这个镜子看到类的结构,所以我们称之为反射

在这里插入图片描述
在这里插入图片描述

package reflection;

/**
 * @Classname ReflectionTest1
 * @Description TODO
 * @Date 2020/3/14 20:06
 * @Created by mmz
 */
public class ReflectionTest1 {
    public static void main(String[] args) throws Exception {
        //通过反射获得
       Class  cls=  Class.forName("reflection.User");
        System.out.println(cls);
    }
}

class User{
    private Integer id;
    private Integer age;
    private String name;

    public User() {
    }

    public User(Integer id, Integer age, String name) {
        this.id = id;
        this.age = age;
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}


不管创建多少个类的对象,始终只有一个实例。
一个类在内存中,只有一个class对象
一个类被加载后,整个结构都会被封装在class对象中
在这里插入图片描述
在这里插入图片描述

三种方式创建类的实例
在这里插入图片描述

具有class对象的类
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
java内存分析
在这里插入图片描述
类的加载过程
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

什么时候类会初始化
在这里插入图片描述

类加载器的作用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

我们直接创建的类的加载器,就是appclass加载器 系统类加载器
而object加载器就是根加载器 引导类加载器
还剩下一个拓展类加载器

双亲委派模式
双亲委派模式

主要为了安全

获取运行时类的完整结构
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值