基本成员默认值
若一个类的某个成员是基本数据类型,即使没有进行初始化,Java也会确保它获得一个默认值。但局部变量(非成员变量)则是默认随机取值。
基本类型 | 默认值 |
---|---|
boolean | false |
char | ‘\uoooo’(null) |
byte | (byte) 0 |
short | (short) 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
Static关键字
使用场景:
只想为某特定域分配单一的存储空间,而不去考虑创建多少个对象
Static 字段:不论创建多少个对象,这些对象都共有一个Static字段都共用一份存储空间
Static字段可以通过类名引用,也可通过对象名引用
希望某个方法不与包含它的类的任何对象关联在一起。
- static方法:再不创建任何对象的情况下就可以调用它,通过类名引用。(也能用对象名调用)该方法访问的方法和域也必须是static的。
注释和嵌入式文档
我们在编写代码的时候同时需要编写代码文档,来记录所写代码的用途等,当后续对代码重构或修改时会方便很多。Java使用Javadoc专门来提取注释,管理注释文档。它能自动查找程序中的特殊注释标签,同时将其毗邻的类名或方法名抽取出来。它的输出是一个HTML文件。通过编写维护单一的源文件,我们就能自动生成较高质量的程序文档。
注释文档
共有三种类型的注释文档,分别对应于注释位置后的三种元素:类、域、方法。即类注释正好位于类定义之前,域注释正好位于域定义之前,而方法注释也正好位于方法定义之前。如下所示
//: test/Documentation.java
/** A class comment */
public class Documentation{
/** A field comment */
public int hello;
/** A method comment */
public void world(){}
}
Javadoc只能为public和protected成员进行文档注释,其他访问域的方法注释会被忽略。通过IDE的提供的javadoc工具对上述代码自动生成HTML文档,如下图
独立文档标签
独立文档标签是一些以@字符开头的命令,且必须出现在注释行最前面。这里的注释格式必须是以/ * * 开始,以 * /结束,其他形式无效。下面给出常用标签示例
文档标签 | 作用 |
---|---|
@author author-information | 作者有关信息,姓名,电子邮件等 |
@see classname @see classname#method-name | 引用其他类的文档,生成参见条目(See Also) |
@version version-information | 适合包含在版本说明中的重要信息 |
@Param param-name decription | 方法适用,说明对应名字的参数的用途等信息 |
@return description | 用来说明返回值的含义 |
@Deprecated | 该标签指出旧版特性已经由改版的新特性取代 |
具体应用示例如下:
/**
* Display how javadoc generate code doc
* @author King
* @version 1.0.0
* @see test.Documentation
*/
public class Documentation2 {
/**
* @param i input of function
* @return return value of function
*/
public int helloworld(float i){
return 0;
}
}
使用javadoc工具生成文档页如下:
测试对象等价性
一般使用==和!=来判定基本数据类型的等价关系 ,当判定两个对象的等价性的时候,==关系操作符比较的是两个对象的引用,如下所示:
Integer n1 = new Integer(22);
Integer n2 = new Integer(22);
System.out.println(n1 == n2);
这里的输出结果是false,虽然两个Integer的内容是一样的,但是它们是两个完全不同的对象,当比较其引用时,自然不同。当需要比较两个对象的实际内容是否相同时,需要使用所有对象都适用的方法equals():
Integer n1 = new Integer(22);
Integer n2 = new Integer(22);
System.out.println(n1.equals(n2));
这里的输出结果是true。大部分java类库都实现了equals()方法。当我们自己创建对象时,需要手动覆盖equals()方法,否则它默认比较的是两个对象的引用。
final关键字
通常final关键字的意思是“不可改变的”,又分为三种情况:数据、方法、类
final数据
使用场景:
- 一个永不改变的编译时常量
- 一个在运行时被初始化的值,不希望被改变
通常对基本数据类型使用。对某方法传入final参数则指定该参数为只读,不可被修改
final方法
使用场景:
- 将方法锁定,以防任何继承类修改它的含义
- 确保在继承中使方法行为保持不变,而且不会被覆盖
类中所有的private 方法都是默认为final类型的。
final类
使用场景
- 出于安全考虑,不允许任何人继承该类
- 该类的设计永不需要任何变动
final类中所有方法默认为final类型,而域则可以根据个人意愿选择。