Java编程思想读书笔记——初始化与清理(二)
来源:互联网 发布:淘宝卖家怎么催快递 编辑:程序博客网 时间:2024/06/14 18:06
5.6 成员初始化
1)类的每一个基本数据类型成员,如果不显式赋予初值,都会有一个初始值;
2)对于引用类型成员,如果不显式赋予初值,则其初始值为null。
3)也可以直接在类中,对成员变量直接赋予初值。
5.7 构造器初始化
构造器也可以用于初始化。
5.7.1 初始化顺序
类内部的初始化,要先于构造器中初始化。
5.7.2 静态数据的初始化
静态成员变量的初始化值与非静态成员变量的初始化情形相同。在初始化顺序上,要先于非静态成员变量而初始化,并且一旦被初始化后,其不会再被初始化,即无论利用该类创建多少对象,静态数据都只能有一次初始化。
5.7.3 显式的静态初始化
静态代码块中也可以对静态成员变量进行初始化,且其初始化优先于直接在类中初始化的静态成员变量。
public class Spoon { static int i; static { i = 47; }}
静态代码块只执行一次,只有当首次生成该类的第一个对象或者首次访问该类的静态数据时,静态代码块才会被执行。
5.7.4 非静态实例初始化
初始化代码块,可以对非静态成员变量进行初始化,在初始化顺序上要优先于构造器初始化。
public class Spoon2{ int i; { i = 47; }}
5.8 数组初始化
数组是相同类型的、用一个标识符名称封装到一起的一个对象序列或基本类型数据序列。
定义(本质是定义一个指向数组的引用)
int[] a; //与 int a[]效果相同
初始化
int[] a = {1, 2, 3, 4, 5};
指定长度
int[] a = new int[5];
所有的数组都有一个固定的成员,即length,表示数组的长度。
可变参数列表
可以定义接收任意个参数(包括零)的方法,这任意个参数将作为数组才传入。
f(Object... args){ //等效于 f(Object[] args)}
可变参数可以与自动包装机制共存。
可变参数列表可以使得方法重载变得更为复杂。
1) 编译器会使用自动包装机制来匹配重载的方法;
public class OverloadingVarargs { static void f(Character... args){ for(Character c : args){ System.out.print(" " + c); } System.out.println(); } static void f(Integer... args){ for(Integer i : args){ System.out.print(" " + i); } System.out.println(); } static void f(Long... args){ for(Long l : args){ System.out.print(" " + l); } System.out.println(); } public static void main(String[] args){ f('a', 'b', 'c'); f(1); f(2, 1); f(0); f(0L); //f(); //无法判断是运行哪一个f方法 }}
2) 如果在某个方法中增加一个非可变参数的话
public class OverloadingVarargs2 { static void f(float i, Character... args){ System.out.println("first"); } static void f(Character... args){ System.out.println("second"); } public static void main(String[] args){ f(1, 'a'); f('a', 'b'); //无法通过编译,对f的引用不明确 }}
3) 只能两个方法都加入一个非可变参数
public class OverloadingVarargs3 { static void f(float i, Character... args){ System.out.println("first"); } static void f(char c, Character... args){ System.out.println("second"); } public static void main(String[] args){ f(1, 'a'); f('a', 'b'); }}
总之,最好只在重载方法的一个版本上使用可变参数列表,或者不在任何一个重载方法上使用。
5.9 枚举类型
enum关键字,是在JDK 5之后加入的特性,主要用于处理常量集。
需要注意的是,在枚举类型中指定多少个常量,内存中就只会存在相应个数的枚举类型实例,每个实例对应于一个常量。
编译器还会自动创建ordinal()方法和values()方法,这两个方法都是静态方法。前者表示枚举类型声明的顺序(可在遍历时,便是按照该顺序遍历),后者生成由这些常量组成的数组。
枚举类型可以用于switch语句中。
- Java编程思想读书笔记——初始化与清理(二)
- Java编程思想读书笔记——初始化与清理(一)
- Java编程思想(二) —— 初始化与清理
- Java编程思想第四版读书笔记——第五章 初始化与清理
- 《Java编程思想》——初始化与清理(一)读书笔记
- JAVA编程思想读书笔记5:初始化与清理
- java编程思想读书笔记 第五章 初始化与清理
- java编程思想读书笔记----第五章 初始化与清理
- java编程思想读书笔记五:初始化与清理
- 《Java编程思想》读书笔记01-初始化与清理
- Java编程思想 ——第五章 初始化与清理
- java编程思想学习日志——初始化与清理
- Java编程思想——第五章 清理与初始化
- Java编程思想——初始化与清理
- 【笔记】Java编程思想—一初始化与清理
- 初始化与清理【java编程思想杂记】
- <Java编程思想> 初始化与清理
- 《JAVA编程思想》笔记-初始化与清理
- bzoj3451/Tyvj1953:Normal(点分治+FFT)
- Python 嵌套列表的排序(匿名函数lambda)
- bzoj 3993: [SDOI2015]星际战争
- solr进阶七:与jQuery结合的自动补全功能
- 中缀 前缀 后缀表达式 相互转换
- Java编程思想读书笔记——初始化与清理(二)
- Ajax总结
- KMP算法求模式串在原串中出现的次数
- linux下ssh服务器安装与登录
- 新的工作,新的开始
- 进程和线程区别
- a different object with the same identifier value was already associated with the session。
- nvm在window下的配置
- jquery实现网页换肤