资讯专栏INFORMATION COLUMN

Java漫谈---Java中的初始化

Alfred / 3021人阅读

摘要:一成员变量的初始化成员变量的默认值会在调用构造方法之前对所有没有在声明时赋值的成员变量赋予默认值。四初始化顺序在类加载时唯一初始化一次次静态变量和执行静态字句。

java中所有变量在使用之前必须得到初始值,否则无法编译通过。java中的变量分为类中的成员变量和方法中的局部变量,方法中的局部变量在使用之前我们必须自己进行初始化。

一、成员变量的初始化:
1、成员变量的默认值:

Java会在调用构造方法之前对所有没有在声明时赋值的成员变量赋予默认值。

数值类型:0

字符char:"u0000"

布尔型:false

对象和数组:null

1、指定初始化值:

在声明成员变量的时候就指定初始化值。
在显示指定初始化值时若用的其他成员变量,必须保证用到的变量已经被初始化了。(成员变量的初始子上而下进行)

3、静态成员初始化:

静态成员变量的初始赋值与普通成员一样,唯一不同在于静态变量初始化只在在类加载时执行一次,而普通成员变量在每次实例化时都执行一次。

4、静态字句:
class Test {
    static int a = 1;
    static {
        System.out.println(a);
    }
    static int b = 2;
}

静态字句使用static后加大括号中,在类加载时静态字句会被执行,且之只会在类加载时执行一次。
注意:初始时,先对a进行初始,然后执行静态字句,然后对a进行初始化。如果上面输出得是b那将编译报错,因为我们不能再初始化直接使用一个变量。

5、非静态字句:
class Test {
    int a = 1;
    {
        System.out.println(a)
    }
}

非静态字句在每次实例化时被执行。

二、构造方法进行初始化:

每次创建类对象时都会调用类的构造方法,可以在构造方法中进行一些初始化操作,不过构造方法的调用发生在成员初始化之后。

1、this关键字调用其他构造方法

可以在构造方法将this作为方法调用从而调用其它构造方法,但this调用只能调用一次且必须在第一行。

public class Tree {
    private int h;
    
    public Tree() {
        this(6);
    }
    public Tree(int h) {
        this.h = h;    
    }
}

除构造方法中外,其他任何地方都禁止调用构造方法。

三、父类初始化:

类有父类时先对父类进行初始化,如果类类也有父类则对先初始化父类,以此进行下去。
并且在基类构造器第一个语句使用super调用父类的构造方法,若基类含有不带参数的构造方法那么可以不显示的调用super,编译器会自动调用。
super只能在构造方法第一行调用一次。

public class A {
    public A(int a) {
        
    }
}

public class B {
    public B(int b) {
        spuer(b);
    }
}
四、初始化顺序:

在类加载时唯一初始化一次次静态变量和执行静态字句。静态变量和静态执行子上而下顺序进行。

在每次实力化类对象时进行普通成员变量的初始化和执行费静态字句,初始化和字句按顺序自上而下执行。

有父类先进行父类的初始化

五、数组初始化
1、只声明时的默认值:
class Test {
    int[] as;
    
    public Test() {
        int[] bs;
    }
} 

Java中数组类型的变量也是对象,所以在成员变量的数组在声明后如果未初始化则有默认值null,但bs由于是方法里声明所以不会被自动初始化为null,在使用之前就需要手动显示的进行初始化。

2、new时的默认值:
class Test {
    public static void main(String[] args) {
        int[] aArr = new int[10];
        Integer[] bArrs = new Integer[10];
    }
}

对于aArr赋予new对象引用,此时aArr指向的是10个值为0的int数组。对于基本类型new的时候会为数组的每一个成员赋予默认值,如果是对象类型则赋予null:

数值类型:0

字符char:"u0000"

布尔型:false

对象:null

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71500.html

相关文章

  • 漫谈代理模式

    摘要:而在模式中角色与角色的接口是相同的透明性。而在模式中与增加新功能相比它更注重通过设置代理人的方式来减轻本人的工作负担 本文首发于泊浮目的专栏:https://segmentfault.com/blog... 前言 代理模式是在编程中非常常见的设计模式.笔者在面试的过程中也经常会问到相关的问题,但是很多同学答的并不尽人意.在这篇文章中,笔者想和大家聊聊代理模式的应用及一些实践. Wha...

    neuSnail 评论0 收藏0
  • 漫谈Exception与Result

    摘要:分析性能的影响但是需要注意时间单位,只是微秒而已,毫秒的千分之一秒的百万分之一。在这种情况下,优化毫秒的性能隐患无异于捡了芝麻丢了西瓜。 同步自:https://sulin.me/2019/T2ZXZB.... 在分布式系统开发中,我们经常需要将各种各样的状态码、错误信息传递给最外层的调用方,这个调用方通常是http/api接口,错误信息比如登录失效、参数错误等等。 最外层接口暴露的...

    张利勇 评论0 收藏0
  • 金币(积分)商城架构漫谈

    摘要:开篇金币积分商城下称商城是众多内的一个产品,随着使用的用户越来越多,商城对于用户留存的提升,扮演着重要的角色做为提高用户黏性的核心产品,在拥有很好用户体验的同时,也必须存在着一个高效稳定的系统。分析上述两点,得到结论按用户进行分库分表。 开篇 金币(积分)商城(下称商城)是众多App内的一个产品,随着App使用的用户越来越多,商城对于用户留存的提升,扮演着重要的角色;做为提高用户黏性的...

    Ethan815 评论0 收藏0
  • 漫谈开发设计中的一些“原则”及“设计哲学”

    摘要:在开发设计中有一些常用原则或者潜规则,根据笔者的经验,这里稍微总结一下最最常用的,以飨读者。是处理复杂性的一个原则。参考六大设计原则里氏替换原则奥卡姆剃刀如有问题可以通过邮件微信联系我。 在开发设计中有一些常用原则或者潜规则,根据笔者的经验,这里稍微总结一下最最常用的,以飨读者。 DRY 这里的DRY是Do Not Repeat Yourself的缩写。具体解释参见 ,严谨的定义是 E...

    william 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<