《java JDK7 学习笔记》之对象封装
1、构造函数实现对象初始化流程的封装。方法封装了操作对象的流程。java中还可以使用private封装对象私有数据成员。封装的目的主要就是隐藏对象细节,将对象当做黑箱子进行操作。
2、在java命名规范中,取值方法的名称形式是固定的,也就是以get开头,之后接上首字母大写的单词。
3、如果没有声明权限修饰的成员,只有在相同包的类程序代码中才可以直接存取,也就是“包范围权限”。如果想在其他包的类程序代码中存取某包的类或对象成员,则该类或对象成员必须是公开成员,在java中要使用public加以声明。
4、创建对象时,数据成员就会初始化,如果没有指定初始值,则会使用默认值初始化,基础类型默认值为0;布尔型默认为false;引用类型默认值为null。
5、如果定义类时,没有撰写任何构造函数,编译程序就会自动加入一个无参数、内容为空的构造函数,成为默认构造函数。可以定义多个构造函数,只要参数类型或个数不同,这称为重载构造函数。
6、定义方法时也可以进行重载,可为类似功能的方法提供统一名称,但根据参数类型或个数的不同调用对应的方法。
编译程序在处理重载方法时,会依照以下顺序来处理:
(1)还没有装箱动作前可符合自变量个数与类型的方法;
(2)装箱动作后可符合自变量个数与类型的方法;
(3)尝试有不定长度自变量并可符合自变量类型的方法;
(4)找不到合适的方法,编译错误。
7、除了被声明为static的地方外,this关键字可以出现在类中的任何地方,在对象建立后为“这个对象“的参考名称。this()代表了调用另一个构造函数,至于调用那个构造函数,则视调用this()时给的自变量类型与个数而定。
8、如果对象数据成员被声明为final,但没有明确使用=指定值,那表示延迟对象成员值的指定,在构造函数执行流程中,一定要有对该数据成员指定值的动作,否则编译错误。
9、被声明为static的成员,不会让个别对象拥有,而是属于类。
10、java程序设计领域,早就有许多良好命名习惯,没有遵守习惯并不是错,但会造成沟通与维护的麻烦。以类命名实例来说,首字母是大写,以static使用习惯来说,是通过类名称与“.”运算符来存取。
11、在static方法或区块中不能出现this关键字。static方法中不能用非static数据或方法成员。
12、import static 语法是为了偷懒,单别偷懒过头,要注意名称冲突问题,有些名称冲突编译程序可通过以下顺序来解析:
(1)局部变量覆盖:选用方法中的同名变量、参数、方法名称;
(2)成员覆盖:选用类中定义的同名数据成员、方法名称;
(3)重载方法比较:使用import static 的各个静态成员,若有同名冲突,尝试通过重载判断。
13、在JDK5之后支持不定长度自变量,为编译程序提供方便,展开后变为数组。使用不定长度自变量时,方法上声明的不定长度参数必须是参数列最后一个,使用两个以上不定长度自变量也是不合法的。
课后练习选择题:
1、public class Some {
private Some some;
private Some (){}
public static Some create(){
if(some == null){
some = new Some();
}
return some;
}
}
以上语句描述正确的是:编译失败。
注:在声明为static的方法或区块中不能调用非static成员或方法。
2、int[] scores1 = {88,81,74,68,78,76,77,85,95,93};
int[] scores2 = Arrays.copyOf(scores1,scores1.length);
其中Array完全吻合名称为java.util.Arrays,以下描述正确的是:copyOf()是static成员。
3、public class Some {
public int x;
public Some(int x){
this.x = x;
}
}
以下描述正确的是:创建Some时,只能使用new Some(10)形式。
4、public class Some {
public int x;
public Some(int x){
this.x = x;
}
}
使用Some s = new Some(10)后,可使用s.x取得。
5、public class Some {
private int x;
public Some(int x){
this.x = x;
}
}
描述正确的是new Some(10),对象成员x的值为10.
6、package cc.openhome.util;
public class Some {
pubilc int x;
public Some(int x){
this.x = x;
}
}
以下描述正确的是:cc.openhome.util包中其他程序代码可以new Some(10)。
7、public class Some {
private final int x;
public Some(){}
public Some(int x){
this.x = x;
}
}
以下描述正确的是:编译失败。
注:成员声明为final时,必须直接初始化或者在构造函数中赋值,调用无参构造器没有给final的成员赋值所有编译失败。
8、public class Some{
public static int sum(int… number ){
int sum = 0;
for(int i=0;i<number.length;i++){
sum += number[i];
}
return sum;
}
}
以上说法正确的是:编译失败,因为不定长度自变量只能用增强式for循环语法。(是不是正确的?)
9、public class Some{
public static void someMethod(int i){
System.out.println(“int 版本被调用”);
}
public static void someMethod(Integer integer){
System.out.println(“Integer 版本被调用”);
}
}
以上描述正确的是:Some.someMethod(1);显示“int 版本被调用”
10、public class Main{
public int some(int… numbers){
int sum=0;
for(int number : numbers){
sum += number;
}
return sum;
}
public static void main(String [] args){
System.out.println(sum(1,2,3));
}
}
以下说法正确的是:编译失败。