《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));

             }

}

以下说法正确的是:编译失败。

posted @ 2016-12-20 14:38  王鸿云  阅读(462)  评论(0编辑  收藏  举报