`
kingquake21
  • 浏览: 261710 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

实例变量初始化与不初始化的区别

阅读更多

在做Swing的时候,为了把通用的界面框架抽象出来,经常采用模板方法,但是由于界面组件的初始化及布局都在构造函数中实现,于是就出现了下面的调用顺序

1.子构造函数->2.父构造函数->3.子模板方法->4.子类的实例变量初始化,在子类模板方法中初始化子类中的实例变量(子类的界面组件)之后,子类开始初始化自己的实例变量,结果把在模板方法中已经初始化的实例变量又初始化了一遍。如果子类不对其实例变量做初始化,那么第4步也不会进行,也就避免了这个问题

这就引出了一个问题,初始化实例变量为null和不初始化实例变量有了区别,下面是对这个问题写的测试代码,注意子类Child中的ch实例变量

当Child的ch变量不初始化时的代码:

此时输出“Parent”

当Child的ch变量初始化为null时的代码:

此时输出“null"

结论:当变量没有初始化时,会在分配对象内存时将所有变量置为初始值,但是不会在构造时自动为其再初始化一遍;

当初始化变量时,首先在分配内存时将所有变量都置为初始值,并在构造时再执行其初始化语句;

如果是在构造函数中使用模板方法模式,那么就要注意:如果在模板方法里为子类的变量做了赋值操作,那么在定义该变量时千万不要初始化,即使是初始化为null也会导致该变量被重新赋值

分享到:
评论

相关推荐

    (单片机C语言)变量的初始化

    通过实例说明初始化对程序的影响。 有许多书上说,变量最好要赋初值。但是为什么要初值呢?不赋初值可能会出现什么样的意外呢?以下就我在以51单片机为MCU,Keil为编译器看到的实现现象作分析。

    Objective-C 2.0 with Cocoa Foundation--- 7,对象的初始化以及实例变量的作用域

    NULL 博文链接:https://justcoding.iteye.com/blog/1352346

    父类、子类、静态初始化块、初始化块

    NULL 博文链接:https://happywaterlife.iteye.com/blog/1567461

    tensorflow 初始化未初始化的变量实例

    今天小编就为大家分享一篇tensorflow 初始化未初始化的变量实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    【Java高频面试题】–类的初始化过程以及实例的初始化过程

    要创建一个类的实例,必须加载和初始化该类。 main()方法所在的类,会被优先加载并初始化 子类初始化前,会先加载并初始化它的父类 初始化一个类,其实质上就是执行了()方法 ()方法包含了,静态变量显式赋值代码以及...

    C++中类成员变量初始化总结

    1、普通的变量:  一般不考虑啥效率的情况下 可以在构造函数中进行赋值。...  static变量属于类所有,而不属于类的对象,因此不管类被实例化了多少个对象,该变量都只有一个。在这种性质上理解,有点类似于全局

    关于C++中构造函数初始化成员列表的总结

     static const为全局静态常量,全局的意思是该变量属于整个类而非某个类实例,所以不能再初始化列表中进行初始化。 以上就是小编为大家带来的关于C++中构造函数初始化成员列表的总结全部内容了,希望

    java 静态非静态 字段方法 子类父类构造_初始化顺序!

    java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...

    类实例化顺序讲解 附阿里巴巴一道笔试题

    对象创建和初始化过程3.1 new对象底层字节码指令分析3.2 对象初始化过程详解【重点】3.2.2 实例变量初始化顺序分析3.2.3 继承中实例变量初始化顺序四 类实例化顺序总结4.1 类初始化阶段4.2 对象的创建和初始化阶段...

    Java并发--final关键字.docx

    而实例变量可以在声明变量的时候给实例变量赋初始值,在非静态初始化块中以及构造器中赋初始值。 类变量有两个时机赋初始值,而实例变量可以有三个时机赋初始值。当final变量未初始化时系统不会进行隐式初始化,会...

    python 变量初始化空列表的例子

    #初始化方法一 new_loss = [] old_loss = [] #初始化方法二 new_loss = old_loss =[] with open(fn, encoding='utf8') as f: for line in f: parts = line.split('=') if parts[0] == 'new_loss':

    java笔记介绍

    3、实例变量在没有符初值时系统会自动帮我们做初始化: 整型数据初始化为 0,布尔型数据初始化为 false,对象类型初始化为 null。 实例变量的作用域在本类中完全有效,当被其他的类调用的时候也可能有效。 局部...

    Effective C# 使用成员初始化器而不是赋值语句

    无论是类成员(静态变量)合适实例变量,我们都应该充分利用初始化器的语法。 C#编程在,一般在声明一个变量的同时我们会对其进行初始化: 代码如下:1 class Employee 2 { 3 private List<Employee> empList = new ...

    使用即时文件初始化提高SQL Server性能

    对于你的SQL Server实例,如果你启用了即时文件初始化,在特定情况下,你会获得巨大的性能提升。即时文件初始化定义了当在数据文件里分配新的空间时,SQL Server引擎如何和Windows操作系统打交道。  问题缘由  ...

    C++ 静态成员的类内初始化详解及实例代码

    C++ 静态成员的类内初始化详解及实例代码 一般来说,关于C++类静态成员的初始化,并不会让人感到难以理解,但是提到C++ 静态成员的”类内初始化”那就容易迷糊了。 我们来看如下代码: //example.h #include #...

    Jmockdta是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架

    Jmockdta是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架。单元测试的利器。

    Ruby中类变量和实例变量的比较

    而实例变量如果没有初始化,则使用时返回nil; 3、类变量是私有的,在类外无法直接访问,可以通过类方法和实例方法访问; 代码如下: class B  @@number = 11  @@num = 22    def my_method #定义实例方法  puts @@...

    java基础非常典型的面试题目.wps

    实例变量可以在定义处或者在构造方法中被显式初始化。如果在这两处都没有初始化,那么保留自动初始化时的默认值。final型的变量必须被显式初始化。 静态变量可以在定义处或者在静态代码块中被显式初始化。如果在这两...

    Modelsim工程建立与testbench写法

    1、测试文件的功能是产生设计文件所需要的激励和...3、测试文件的内容包括变量定义、变量初始化、变量赋值、实例化。 3、变量定义都写在模块的开头,初始化只在上电后执行一次,初始化、变量赋值和实例化是并行执行的。

Global site tag (gtag.js) - Google Analytics