反射机制:ClassLoader类加载器 和 reflect中的array使用

18 篇文章 1 订阅
7 篇文章 0 订阅

ClassLoader

加载、连接、初始化原理

加载以JVM进程为基本单位
1) 每个程序(public class方法都会开辟一个新的JVM进程;
故不同程序的内存不会共享(哪怕是静态方法));
2)加载二进制数据,来源有class文件,jar包总class文件,网络方法,java源文件动态编译 4种加载方法;

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

note:final修饰的类变量相对于“宏变量”,java编码器编译时候已经替换完毕,不会有初始化问题(加载时候已经没这个变量了)

3) boot的专业意思是开机、靴子; reboot重启;重开启;
bootstrap 开机绑定的(类),根xx; 比如java的bootstrap CL根类加载器;
这样ClassLoader类加载器,一开始就加载了类似 lib/rt.jar 运行时的核心类库(包括 String,System等);

类加载器种类


在这里插入图片描述
扩展、系统加载器都是 classLoader的子类;

根类加载器不是java实现的,但它其实也是扩展加载器的父类;

reflect总创建的array

/*通过java.lang.reflect下面的Array类,创建任意类型数组、设定、获取他们元素的值*/

import java.lang.reflect.Array;

public class P0107ReflectArray {
    public static void main(String[] args) {
        //1D string array
        Object arr = Array.newInstance(String.class, 10);
        Array.set(arr, 3, "pengfei");
        Array.set(arr, 4,"Dengh");
        Array.set(arr, 2, "zhirui");
        System.out.println(Array.get(arr, 2) +
                " " + Array.get(arr,3) +
                " " + Array.get(arr, 4));

        //3D string array
        Object arr_3d = Array.newInstance(String.class, 2,3,4);
        Object obtain_2d = Array.get(arr_3d, 1);// 3x4 array
        Array.set(obtain_2d, 2, new String[] {
                "fei", "rui","hui"
        }); // 1x4 array  [1][2][:]

        Object obtain_1d = Array.get(obtain_2d, 0); // array[4]
        Array.set(obtain_1d, 2, "We Are Family"); //[1][0][2]
        String[][][] str_3d = (String [][][]) arr_3d;
        //3loop output
        for (String[][] s2: str_3d){
            for (String[] s1: s2){
                for (String s: s1) {
                    if (s != null) {
                        System.out.println(s + " ");
                    }
                }
            }
        }

        //index output
        System.out.println(str_3d[1][0][2]);
        System.out.println(str_3d[1][2][0] +
                " " + str_3d[1][2][1] +
                " " + str_3d[1][2][2]);


    }
}

output

zhirui pengfei Dengh
We Are Family
fei
rui
hui
We Are Family
fei rui hui

Process finished with exit code 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值