zoukankan      html  css  js  c++  java
  • Java学习笔记二:初始化(三)

    3.数组初始化

    1.数组是一个固定长度的集合,在初始化大小后就不能改变其长度。

    数组分配在堆中,并在栈中存有指向该数组的一个引用。

    class Arr
    {
        public static void main(String[] args)
        {
            int[] a = {1, 2, 3, 4};
            int[] b = a;
            
            for (int i = 0; i < b.length; i++)
            {
                b[i]++;
            }
            
            for (int i = 0; i < a.length; i++)
            {
                System.out.print(a[i]);
            }
        }
    }

    输出结果:2345

    对其他引用来说,当其他对于使用另一个对象引用时,他们指向的都是堆中同一个区域。

    2.使用Arrays.toString()打印数组

    使用这样的方式可以减少对数组遍历,但是只对一维数组起作用

    Arrays.toString(a);

    3.可变参数列表

    顾名思义,就是输入参数个数是可变的。如:

    private static void printArray(String... strs)
    {
        System.out.println(Arrays.toString(strs));
    }

    这里指定了传入进来的参数只能是String类型,但是在实际应用用,用到较多的是Object,

    这样会带来一个好处:使用一个方法就能提供给不同输入参数的方法调用,省掉重载的工作。

    // 输入
    printArray(1, "1", 1.11, new InvokeStaticBlock(), 'a');
    
    private static void printArray(Object... strs)
    {
        for (Object object : strs)
        {
            System.out.print(object + " ");
        }
    }

    输出:

    1 1 1.11 Charp_05.InvokeStaticBlock@811c88 a

    4.继承初始化

    每个类的编译代码都存在于它自己的独立文件中。该文件只有在需要使用程序代码时才会被加载。一般来说,累的代码在初次使用时才加载。

    class ParentClass
    {
        protected static String b = "b";
        
        static
        {
            System.out.println("ParentClass.Static.Block");
        }
        
        protected static void output(String s)
        {
            System.out.println("ParentClass.output(): " + s);
        }
    }
    
    class SonClass extends ParentClass
    {
        private String c = "c";
        
        static
        {
            System.out.println("SonClass.Static.Block");
        }
        
        public static void main(String[] args)
        {
            System.out.println("SonClass.main()");
            SonClass son = new SonClass();
            son.output(ParentClass.b);
        }
    }

    输出结果:

    ParentClass.Static.Block
    SonClass.Static.Block
    SonClass.main()
    ParentClass.output(): b

    初始化顺序为:

    (1)先找到 main 方法,获取对应 class 文件,这样Java虚拟机才知道要加载哪些程序;

    (2)初始化父类,如果还有父类,继续初始化父类的父类;

    (3)首先初始化父类 static 数据,然后在初始化其他成员变量,最有执行构造函数;

    (4)子类也是同样的数序,最后在执行 main 函数的内容。

  • 相关阅读:
    linux磁盘挂载
    3个方法解决百度网盘限速 (2018-07-20)
    mysql状态分析之show global status
    Cgroups子系统介绍
    Go语言 关键字:defer
    Go语言 map的实现
    Go语言 基本类型
    MySQL 监控指标
    sshpass的使用方法
    C++11 std::ref使用场景
  • 原文地址:https://www.cnblogs.com/winlrou/p/4001218.html
Copyright © 2011-2022 走看看