`

Java基础恶补——声明及访问控制

    博客分类:
  • Java
 
阅读更多

[SCJP Sun Certified Programmer for Java 6 Study Guide (Exam 310-065)]  chapter 1

 

一. 标识符

1. 标识符只能由字母、下划线、货币符号、数字 组成,除数字 外其余均可作为标识符的开头符号。(PS:汉字作为标识符也是合法的,虽然通常不会使用。)

2. 标识符的长度不限。

3. JavaBeans方法必须以驼峰式命名,同时根据其用途,必须以set, get, is, add, remove其一作为开头。

 

二. 声明规则

1. 1个源代码文件只能包含1个public类,且文件名必须和该public类的名称一致。

2. 1个源代码文件只能有1个package声明,可以有多个import声明。

3. package声明必须位于源代码文件的第1行(注释不算),import声明必须位于package和类声明之间,如果没有package声明,则import必须位于第1行(注释不算)。

4. package和import声明作用于1个源代码文件中的所有类。

5. 1个源代码文件可以包含多个非public类。

6. 不含public类的文件无命名限制。

 

三. 类的声明

1. 访问控制符

1) 共有3个访问控制修饰符:public, protected, private;共有4个访问级别:public, protected, default, private。

2) 类只有 public 或 default 这2个访问级别。

3) 标识为 default 的类只对同包下的其他类可见;标识为 public 的类对所有其他类可见。

4) 类的可见性决定着:

a) 是否能创建该类的实例;

b) 是否能继承该类;

c) 是否能访问该类的方法和属性。

2. 非访问控制符

1) 可修饰类的非访问控制修饰符共有3个:final, abstract, strictfp。

2) 1个类不能同时用 final 和 abstract 进行修饰。

3) 1个标识为 final 的类不能被继承;1个标识为 abstract 的类不能被实例化。

4) 1个只有1个abstract 方法的类必须是 abstract 的;1个标识为 abstract 的类可以有 abstract  方法和非 abstract  方法。

5) 1个abstract 类的首个非 abstract 子类必须实现所有 abstract 方法。

 

四. 接口及其实现

1. 接口用于约束1个类能做什么而不是怎么做。

2. 接口可以被任何类实现,不受类的继承树限制。

3. 无论是否用abstract 修饰,接口实际上就是个100%的 abstract 类。

4. 接口只能有abstract 方法。

5. 接口方法默认是 public 和 abstract 的,可以不显式的使用这2个修饰符。

6. 接口可以有常量,这些常量默认是 public, static, final 的,可以不显式的使用这3个修饰符,或用这3个修饰符的任意组合进行修饰。

7. 1个合法的非abstract实现类有以下属性:

1) 它提供接口方法的具体实现;

2) 它实现的方法必须遵守所有合法的override规则;

3) 实现方法不能声明任何新的checked exceptions,也不能声明任何比接口方法所声明的exceptions低级的checked exceptions;

4) 实现方法可以声明任何runtime exceptions而不用管接口声明;

5) It must maintain the exact signature (allowing for covariant returns)
and return type of the methods it implements (but does not have to
declare the exceptions of the interface).

8. 1个接口的实现类可以是 abstract 的;1个abstract 类不必实现接口方法。

9. 1个类只能继承1个类,但可以实现多个接口。

10. 接口可以继承1个或多个接口。

11. 接口不能继承类,也不能实现类或接口。

 

五. 类成员的声明

1. 访问控制修饰符

Visibility Public Protected Default Private
本类 Y Y Y Y
同包其他类 Y Y Y N
同包子类 Y Y Y N
非同包子类 Y Y (通过继承)
N N
非同包非子类 Y N N N

1) 类成员变量的访问有2个途径:1个类访问其他类的成员;子类访问父类的成员。

2) 如果1个类是不可被访问的,则这个类的所有成员也是不可被访问的;类的可见性先于其成员的可见性。

 

2. 非访问控制修饰符

1) abstract:

a) abstract不能和final、private、static同时使用。

b) abstract方法的声明语法为:1个签名、1个返回类型、1个可选的throws、无实现。

c) 辨别1个非abstract方法的3个要素:没有用abstract修饰、有大括号、大括号里有代码。

 

2) synchronized只能用于修饰方法或代码块,synchronized方法可以用任何访问控制修饰符进行修饰。

3) native只能用于修饰方法;native方法的声明类似abstract方法声明,无方法体。

4) strictfp只能用于修饰类或方法;strictfp表示浮点使用IEEE 754标准。

 

3. 本地变量

1) 不能用访问控制符修饰本地(method, automatic, or stack)变量;

2) 本地变量能用的修饰符只有 final;

3) 本地变量无默认值,所以必须在使用前进行初始化;

4) 和实例变量同名的本地变量是合法的。

 

4. 可变参数:

1) 从Java5开始,方法的声明可以接受0到多个参数,这种方式叫做可变参数;

2) 可变参数以...表示,...必须紧跟类型;

3) 1个方法只能有1个可变参数;

4) 可变参数必须只能处于最后1个参数的位置。

 

5. 实例变量声明

1) 实例变量可以用任何访问控制修饰符进行修饰;也可以用final、transient修饰;

2) 实例变量不能用abstract, synchronized, native, or strictfp修饰;

3) final变量有以下属性:

a) final变量的值在初始化后不可修改;

b) final引用不可修改(不能再指向另一个对象);

c) final引用必须在构造函数完成前初始化。

d) 不存在final对象,final引用并不表示该对象是不变的(immutable)。

4) transient, volatile 只能修饰实例变量。

 

6. 数组声明

1) 数组可以容纳原子类型或对象类型的元素,数组本身是个对象;

2) 声明数组时,方括号可以位于变量名左侧或右侧;

3) 声明数组时,包含size总是不合法的;

4) 数组元素必须是同个类型或存在IS-A关系的。

 

7. 静态变量和方法

1) 与类的实例无关,使用时不需要类的实例。

2) 只有1份copy,所有类的实例共享它们。

3) 静态方法不能直接访问非静态成员。

 

8. 枚举类

1) 1个枚举类列举了1个类型的一组值。

2) 1个枚举类既不是String、也不是int,而是枚举类型。

3) 枚举类可以声明在类的内部或外部,但不能在方法内声明。

4) 声明在类的外部的枚举类不能用static, final, abstract, protected, private 进行修饰。

5) 枚举类可以包含构造函数、方法、变量、constant class bodies。

6) 枚举类常量可以是带有参数的构造函数形式。

7) 枚举类构造函数可以有参数,可以被重载。

8) 枚举类构造函数不能直接通过代码调用,它在1个枚举类型初始化时被自动调用。

9) 枚举类声明最后有没有;符号都是合法的。

10) 枚举类的静态values()方法返回这个包含这个枚举类所有类型的数组。

 

9. 构造函数声明

1) 构造函数的名称必须和类名相同;

2) 构造函数无返回类型(void可以用,but badly);

3) 构造函数可以用任何访问控制修饰符来进行修饰;

4) 构造函数不能用static、final、abstract修饰;

5) 构造函数允许可变参数。

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics