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

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学习笔记 初学者必读

    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学习笔记 1 命令行运行 1 Java基础 1 注释 1 单行注释 1 多行注释 1 文档注释 1 标识符和关键字 2 数据类型 4 类型转换 7 变量 9 基本运算符 10 包机制 12 Javadoc 12 使用命令行生成 12 使用idea生成 12 Java...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

     《java jdk 7学习笔记》适合java的初中级读者,以及广大java应用开发人员。 作译者 林信良(网名:良葛格) 学历:台湾大学电机工程学系 经历:台湾升阳教育训练技术顾问、专业讲师,oracle授权训练中心讲师 ...

    Java/JavaEE 学习笔记

    Core Java学习笔记...........31 第一章 JAVA前言..31 第二章 标识符,关键字,类型........35 第三章 表达式与流控制....................41 第四章 数组.............50 第五章 对象和类(OO思想).........53 第...

    JavaSE基础学习笔记

    JavaSE 星辰学习笔记 简介 如何高效的学习Java 案例:创建一个博客网站typecho 基础 Java程序运行机制 数据类型 变量 变量作用域 常量final 变量的命名规范 运算符 for循环 增强for循环 break continue 练习 Java的...

    java学习笔记 - 2

    1.回顾前一天知识 2.变量的声明,初始化及使用 3.java标识符的命名规则 4.八种基本数据类型的介绍 5.类型之间的转换

    java学习笔记–java基础

    java学习笔记 这是目录java学习笔记第一部分. java基础1.1 输入输出用户交互Scanner用户交互Scanner进阶1.2 基本数据类型基本数据类型类型转换变量,常量,作用域运算符补充:包机制补充:JavaDoc1.3 顺序结构1.4 循环...

    Java学习笔记-个人整理的

    {1.10.2}数组变量的初始化}{34}{subsection.1.10.2} {1.10.3}数组对象的引用}{35}{subsection.1.10.3} {1.10.4}数组对象的复制}{35}{subsection.1.10.4} {1.10.5}扩充数组对象长度}{36}{subsection.1.10.5} {...

    整理后java开发全套达内学习笔记(含练习)

    initialize 预置 初始化 [i'niʃәlaiz] instanceof (关键字) 运算符,用于引用变量,以检查这个对象是否是某种类型。返回 boolean 值。 interface (关键字) 接口 ['intәfeis] invoke vt.调用 [in'vәuk]' ( ...

    c#学习笔记——学习心得

    向方法传递结构时,是通过传值方式传递的,结构实例化可以不用new,结构可以声明构造函数,但必须带参数,且声明的构造函数是用来对成员初始化的,必须包含每个字段。结构不能从另一个结构或类继承而来,但可以实现...

    J2EE学习笔记(J2ee初学者必备手册)

    Core Java学习笔记...........31 第一章 JAVA前言..31 第二章 标识符,关键字,类型........35 第三章 表达式与流控制....................41 第四章 数组.............50 第五章 对象和类(OO思想).........53 第...

    c#学习笔记.txt

    c#学习笔记(1) 51099在线学习网发布 文章来源:网络收集 发布时间:2006-05-25 字体: [大 中 小] 51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct ...

    PL/SQL学习笔记

    --声明嵌套表变量 嵌套表必须初始化 var1 mytype:=new mytype('a','b','c') begin var1.extend(2);--在数组后加了两个空间 var1(1):='a'; var1(6):='a';--超出空间 end; 可变数组的代码 declare --定义可变数组...

    springboot学习思维笔记.xmind

    springboot学习笔记 spring基础 Spring概述 Spring的简史 xml配置 注解配置 java配置 Spring概述 Spring的模块 核心容器CoreContainer Spring-Core Spring-Beans ...

    程序员面试刷题的书哪个好-thinkingInJava:学习《thinkinginjava》一书

    3.当一个类的成员变量是基本类型时,JVM会默认将其初始化为对应的初值,但是最好自行进行初始化。 成员变量: 基本类型的初始化值是0, 引用的初始化值是null。 局部变量:必须给一个初始化的值,不然编译会报错。 4...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...

    九九乘法表源码java-c-2nd-lang-asst-01:学习C作为第二编程语言的第一个编程任务

    九九乘法表源码java C 作为第二语言的第一个编程作业 这是一个教程式的作业,假设至少具备另一种编程语言(如 Java 或 Python)的基本知识。...合理的封装和有意义的契约(例如,谁初始化数组参数)。 比较函数的封装

    CLionProjects:学习阶段

    string :是编程语言中的字符串,字符串是一个特殊的对象,属于引用类型在的Java,C#中,字符串类对象创建后,字符串一旦初始化就不能更改,因为串类中所有字符串都是常量,数据是无法更改,由于字符串对象的不可...

Global site tag (gtag.js) - Google Analytics