`
javawebsoa
  • 浏览: 424256 次
社区版块
存档分类
最新评论

Java学习笔记(成员变量的初始化)

 
阅读更多

类的初始化包括实例成员的初始化和静态成员的初始化:
1、静态成员变量的初始化
静态变量的初始化方法:
A)直接赋值 public staticStringvariableA="hello",//当然也可以调用方法或者其它变量来赋值,但必须满足前向引用的原则.
B)在静态从句中写赋值语句:static{//初始化语句块}
其中直接赋值触发在第一次引用该变量时执行;而静态从句得触发有两个时刻,一是静态变量被引用时,二是在类第一次被实例化时.
如果同时包含A,B情况,其执行初始化顺序是A->B.这种初始化是一种规定,记住就好,当然,这种规则业必须满足合理性,这就是类第一次
实例化前,静态变量必须被初始化的原因:实例初始化可能会访问静态变量,所以必须准备好.C#的静态变量初始化策略跟Java很类似,静态
初始化从句的作用根C#的静态构造函数类似,静态变量的初始化都不是在类加载时,而是在类实例化时.类实例化的触发是在类变量第一次(类的
静态变量)被调用时,或者对象第一次被实例化时。 
2、实例成员的初始化
实例成员初始化有三个方式:
A)直接赋值:public String variableA="hello";
B)在实例初始化从句中
public class A{
//实例初始化从句.
{
//这里写初始化语句.
}

}
C)在构造函数中.
实例成员变量初始化是在实例时执行,执行的顺序是A->B->C.

下面是测试代码:

public class ClassA {
	/*
	 * 静态成员变量
	 */
	public static String variableA="直接初始化值";
	public static String variableA1;
	/*
	 * 实例变量
	 */
	public String variableB;
	//静态初始化从句
	static{
              System.out.println("变量A:"+variableA);
	    variableA ="varibleA 在静态从句中 初始化!";
	    System.out.println("变量A:"+variableA);
	}
         //实例成员初始化从句块
	{
             System.out.println("初始化前变量B:"+variableB);
	    variableB ="varibleB 初始化!";
	    System.out.println("初始化后变量B:"+variableB);
	}
}


下面是调用测试代码:
//如下三个语句都可以导致静态初始化从句执行,但注意静态初始化从句仅执行一次
//String theA=ClassA.varibleA;
String theB=ClassA.variableA;
//ClassA theCA=new ClassA();
 //下面这条语句并不会引起静态变量初始化.也就是说Java在类加载时并不进行
//静态变量的初始化.
String theNameString=ClassA.class.getName();
  但Class theC = Class.forName("ClassA")会导致静态从句执行.

初看起来,实例初始化从句没什么必要,完全可以用构造函数来替代,但这种机制对于匿名类来说非常关键,
因为匿名类是无法写构造函数的。C#中的匿名类型比Java的匿名类要简单很多。一个可能的原因是因为C#有
委托类型,而Java需要用匿名类来比较便捷的实现类似C#委托那样的功能。
弄清成员变量的初始化的机制,可以防止一些Bug的出现.

PS:Class.forName("ClassA")执行时会导致类加载,同时静态变量初始化。其实就是类本身实例化。对于ClassA.class.getName(),
调用ClassA.class显然需要加载ClassA类,但没有触发静态从句执行,说明类本身没有被实例化。请清楚整个机制的童鞋赐教。

分享到:
评论

相关推荐

    Java学习笔记(必看经典).pdf

    本知识点的标题为“Java学习笔记(必看经典)”,意味着所整理的内容是针对Java初学者的一系列核心概念和原理的总结。 首先,面向对象编程是Java语言的核心,它与传统的面向过程编程有显著的不同。面向对象编程强调的...

    java学习笔记.doc

    Java 学习笔记 本资源摘要信息涵盖了 Java 编程语言的基础知识,着重于面向对象编程(OOP)的概念和实现。下面是该资源的详细知识点: 1. 面向对象编程(OOP)的基本概念: * 对象: everything is an object...

    java学习笔记.pdf

    ### Java学习笔记知识点总结 #### 第一章:Java语言入门 - **1.1 Java的诞生** Java由Sun Microsystems公司于1995年推出的一种可移植、面向对象的编程语言。最初的设计目标是为消费电子产品提供一种通用编程语言...

    尚硅谷JAVA基础笔记吐血整理

    构造器用于初始化新创建的对象,代码块可以是实例初始化块或静态初始化块,内部类可以是成员内部类、局部内部类、匿名内部类等。 【封装、继承和多态】 封装是将数据和操作数据的方法绑定在一起,保护数据不被随意...

    java学习笔记

    ### Java学习笔记知识点详解 #### 一、类变量与成员变量的区别 - **类变量**:也称为静态变量,使用`static`关键字声明。在整个类的生命周期中只有一个副本,无论创建多少个对象,该变量的副本都只有一份。例如,...

    JAVA学习笔记

    JAVA学习笔记涵盖了Java编程语言中多个核心概念和特性。通过讲解this关键字、继承、static关键字和代码块、final关键字、多态、方法重写、抽象类与接口、封装与隐藏、垃圾回收、类组合、包装类、对象处理、类成员、...

    Java学习笔记 必看经典 pdf

    4. **构造方法**:构造方法用于初始化对象,没有返回值,其名称与类名相同。构造方法在创建对象时自动调用,用于设置初始状态。 #### 结论 Java的面向对象编程提供了强大的工具和概念,帮助开发者构建复杂而灵活的...

    J2ME学习笔记 J2ME学习笔记 J2ME学习笔记

    - **成员变量初始化**:所有类级别的成员变量(即非局部变量)在使用前都会被自动初始化为默认值,例如数值类型为0,布尔类型为`false`,对象引用为`null`。 - **局部变量初始化**:与成员变量不同,局部变量不会被...

    Java学习笔记 经典必看

    ### Java学习笔记经典知识点解析 #### 一、面向对象编程基础 **面向对象**是一种重要的编程范式,它改变了传统的面向过程的编程思路,强调通过对象来组织代码,提高代码的复用性和维护性。 **面向对象的核心概念*...

    良葛格Java学习笔记

    【良葛格Java学习笔记】 本笔记主要涵盖了Java编程语言的核心概念和技术,旨在帮助初学者以及有一定基础的开发者深入理解并掌握Java。Java作为一种广泛应用于企业级应用开发、移动开发(尤其是Android)以及大数据...

    Java学习笔记(必看经典)

    Java是一种广泛使用的面向...总的来说,Java学习笔记应该涵盖从基础知识到高级特性的全面内容,适合初学者和有一定基础的开发者作为参考。通过不断实践和学习,可以逐步掌握Java编程的精髓,成为一名熟练的Java开发者。

    java学习笔记 初学者必读

    5.3. 初始化数组 5-10 5.4. 多维数组 5-10 5.5. 数组拷贝 5-10 6. 五•对象和类 6-11 6.1. 面向对象与面向过程 6-11 6.2. 对象的概念 6-12 6.3. 成员变量和局部变量 6-12 6.4. 成员方法 6-12 6.5. This关键字 6-13 ...

    java读书笔记笔记笔记笔记笔记笔记

    【标题】"java读书笔记笔记笔记笔记笔记笔记" 暗示了这是一份关于Java编程语言的学习笔记,可能包含了作者在阅读Java相关书籍时所做的重要记录和理解。笔记通常涵盖了语言的基础概念、核心特性、类与对象、内存管理...

    java学习笔记源代码(第6版)-林信良

    《Java学习笔记源代码(第6版)-林信良》是针对初学者精心编写的Java编程学习资源,包含了丰富的示例代码,旨在帮助新手快速掌握Java编程基础。本资源的核心在于通过实践来驱动理论学习,使学习者能够在实际操作中...

Global site tag (gtag.js) - Google Analytics