`

java中变量初始化详解

    博客分类:
  • Java
 
阅读更多

类变量(类静态成员):类被加载时产生;它的生存期是类的生存期;自动初始化(类被加载)
成员变量(类成员): 在使用new创建该类实例时产生;它的生存期与该类实例对象的生存期相同;

方法中的变量,不会被自动初始化。比如main方法中的变量index,定义如int index; 它不会被自动初始化。

 

java编译器确保域(成员变量或块)在被使用之前必需初始化,即使你没直接初始化,它也会默认给你一个值。 

1.  如果不涉及继承跟static,用new创建对象时,会调用那个类的构造函数,而在调用构造函数之前必需先初始化域(因为在构造函数里,可能会用到这些成员变量) 
等域初始化完后再调用构造函数。强调一点:只要是成员变量,那么不管它放在类的哪个部位(但在方法或块内部不算,因为那算是局部变量),它都在构造函数调用之前调用,这是编译器确保的。 

2.  如果涉及继承,当用new创建子类对象时,调用顺序是这样的: 
   1.先初始化父类的域(成员变量或块) 
   2.调用父类的构造函数(没有明确定义的话,调用默认那个,即编译器为你创建的) 
   3.再到子类,初始化子类的域 
   4.这时才轮到调用子类的构造函数 
原则是:要确保域在被调用之前要被初始化. 
上面是涉及两层,如果是涉及多层继承的,那么一致递推上去,即先初始化父类的域,然后调用父类构造函数,再初始化子类的域然后再调用子类的构造函数,再初始化子子类的域(用这个名字好像有点怪,哈哈,就是孙子类的意思)然后再调用子子类的构造函数,一致类推下去 

3.涉及static的话,static域是在编译的时候加载的,原则是: 
   1.static域是在非static(上面说的都是非static)之前调用的 
   2.static域只初始化一次(即只调用一次),打个比方A a = new A(); A 里有static域,只有当你第一次使用new创建对象的时候它会在非static之前调用,而如果你还想再用new创建对象时,static域这段代码 是不会被调用的(因为static的东西是属于类,所以对象共享的,一次就够了)

分享到:
评论

相关推荐

    Java变量初始化

    Java 变量初始化详解 Java 变量初始化是 Java 语言的基础知识点之一,但也往往被学习者所忽略。 Java 变量初始化的时机是指在 Java 语言中变量的初始化过程,包括变量的声明、初始化和赋值的步骤。 Java 变量声明 ...

    java数组初始化详解

    Java 数组初始化详解 Java 数组初始化是 Java 编程语言中的一种基本概念,它允许开发者创建和初始化数组,以便于存储和操作数据。在本文中,我们将对 Java 数组初始化进行详细的介绍,包括一维数组和二维数组的声明...

    Java类加载器:静态变量初始化.docx

    Java 类加载器静态变量初始化机制详解 Java 类加载器是 Java 语言的核心组件之一,负责将 Java 字节码文件加载到内存中,以便 JVM 可以执行它们。在 Java 中,类加载器是通过委派机制来实现的,即一个类加载器可以...

    学习java静态数据初始化.doc

    Java 静态数据初始化详解 在 Java 中,静态数据初始化是指在类加载过程中对静态变量的初始化。静态变量是在类加载时被初始化的,而不是在实例创建时。静态变量的初始化顺序是按照它们在类中的定义顺序进行的。 在 ...

    java中类的初始化顺序

    ### Java中类的初始化顺序详解 #### 一、概述 在Java编程语言中,类的初始化是一个非常重要的概念。类的初始化涉及到多个方面,包括静态成员变量、实例成员变量、静态初始化块、实例初始化块以及构造函数等。本文...

    java数组初始化详解修正版.doc

    ### Java 数组初始化详解 #### 一、概述 在 Java 中,数组是一种基本的数据结构,用于存储固定数量的同类型元素。数组初始化是指为数组分配内存,并为其中的元素设置初始值的过程。根据不同的初始化方式,Java ...

    java final变量详解

    在 Java 中,变量的初始化顺序也很重要。变量的初始化次序优于任何方法,甚至在构造方法的前面。如果变量是原始类型,那么它得到一个标准的原始类型的初始值,如果是一个对象的引用,除非你创建了一个新的对象给这个...

    java中对象创建、初始化、引用

    ### Java中对象创建、初始化与引用详解 #### 一、Java对象、引用及创建过程 在Java中,对象是程序的基本单位,它包含了属性(成员变量)和行为(方法)。对象是由类创建出来的实例,而类则是一组具有相同属性和...

    Java中初始化块详解及实例代码

    "Java初始化块详解及实例代码" Java中初始化块是Java语言中的一种特殊的代码块,它可以在类加载或对象创建时执行某些操作。本文将详细介绍Java中初始化块的概念、种类、特点和应用场景。 什么是初始化块 初始化块...

    Java初始化顺序1

    在 Java 中,实例变量的初始化顺序是按照定义的顺序进行的,而静态变量的初始化顺序则是按照定义的顺序,并且只在第一次访问时初始化。 在上面的示例代码中,我们可以看到,类变量和实例变量的初始化顺序是按照定义...

    java中变量和常量详解

    Java中的变量和常量详解 Java中的变量和常量是两个基本概念,分别代表程序中的状态和不变的值。变量是程序中可以改变的值,用于代表程序的状态,而常量则是程序中不能改变的值,用于代表常数或增强程序的可读性。 ...

    java对象初始化代码详解

    5. 实例变量初始化:一共有三种方式对实例变量进行初始化:①定义实例变量时指定初始值②非静态初始化块中对实例变量进行初始化③构造器中对实例变量进行初始化。 二、实例变量初始化方式 实例变量初始化方式有三...

    Java成员变量默认值原理详解

    在 Java 中,我们也可以使用构造函数来初始化变量的默认值。例如,public class Text {private int i;public Text() {i = 10;}}这里i的默认值是10。 Java成员变量默认值原理详解是非常重要的,它可以帮助我们更好地...

    浅谈Java变量的初始化顺序详解

    总结一下Java变量初始化顺序的要点: 1. **静态变量与静态初始化块**:首先按照在类中定义的顺序初始化所有静态变量和执行静态初始化块。这是在类被加载到内存时发生的,与对象创建无关。 2. **非静态变量与初始化...

    java类中元素初始化顺序详解

    首先,Java 解释器会执行类中的静态变量初始化和静态初始化块。这些静态元素的初始化只会在类加载时执行一次,并且按照它们在源代码中的顺序进行。在给定的例子中,我们看到 `parent` 类和 `child` 类都有静态变量...

    关于Java变量的声明、内存分配及初始化详解

    本文将深入探讨Java变量的声明、内存分配以及初始化。 首先,变量的声明是指在程序中定义一个变量,指定其类型和名称。例如,`String name;` 和 `int age;` 在`Person`类中声明了两个变量,`name`是一个字符串类型...

    类初始化顺序示例讲解

    8. **父类非静态成员变量初始化**:接下来,`basecode` 被设置为 `"父类非静态变量初始化"`。 9. **父类非静态初始化块**:执行输出 `"我输出的是父类非静态块内容→" + this.basecode`。此时 `basecode` 已经被...

    JAVA定义变量与输出详解

    JAVA定义变量与输出详解 JAVA语言中定义变量和输出是非常重要的基础知识,理解这些知识点对于JAVA初学者和开发者来说都是非常必要的。本文将详细介绍JAVA定义变量和输出的相关知识点。 一、变量的定义和命名 在...

    基于java变量和作用域以及成员变量的默认初始化(详解)

    基于java变量和作用域以及成员变量的默认初始化 Java 变量和作用域是 Java 编程语言的基础概念,了解变量和作用域的概念对编写高效、可靠的 Java 程序非常重要。本文将详细介绍 Java 变量和作用域,以及成员变量的...

Global site tag (gtag.js) - Google Analytics