明辉站/网站教程/内容

Java编程思想读书笔记(4章)

网站教程2024-01-13 阅读
[摘要]第4章 初始化和清理   一.以构造函数(constructor)确保初始化的进行    如果某个class具备构造函数,Java便会在对象生成之际,使用者有能力加以操作之前,自动调用其构造函数,于是便能名确保初始化动作一定被执行。    二.函数重载(Method overloading)   ...
第4章 初始化和清理

  一.以构造函数(constructor)确保初始化的进行

   如果某个class具备构造函数,Java便会在对象生成之际,使用者有能力加以操作之前,自动调用其构造函数,于是便能名确保初始化动作一定被执行。

   二.函数重载(Method overloading)

   1. 区分重载函数

   由于只能从函数名和函数的引数列来区分两个函数,而重载函数具有相同的函数名称,所以每个重载函数都必须具备独一无二的引数列。

   2. Default构造函数

   1) default构造函数是一种不带任何引数的构造函数。如果你所开发的class不具任何构造函数,编译器会自动为你生成一个default构造函数。

   2) 如果你自行定义了任何一个构造函数(不论有无引数),编译器就不会为你生成default构造函数。

   3) 如果定义了一个class,如

   class Bush{
   Bush(int I){}
   }
   当想用new Bush();来产生class的实例时,会产生错误。因为在定义class时已定义了构造函数,所以编译器就不会为class生成default构造函数。当我们用new Bush()来产生实例时,会尝试调用default构造函数,但在class中没有default构造函数,所以会出错。如:

   class Sundae
   {
   Sundae(int i) {}
   }
   public class IceCream
   {
   public static void main(String[] args)

   {
   //Sundae x = new Sundae();会编译出错,无构造函数Sundae()

   Sundae y = new Sundae(1);
   }
   }
   *:在定义一个class时,如果定义了自己的构造函数,最好同时定义一个default构造函数
   3. 关键字this

   1) this仅用于函数之内,能取得“唤起此一函数“的那个object reference。

   2) 在构造函数中,通过this可以调用同一class中别的构造函数,如

   public class Flower{
   Flower (int petals){}
   Flower(String ss){}
   Flower(int petals, Sting ss){
   //petals++;调用另一个构造函数的语句必须在最起始的位置
   this(petals);
   //this(ss);会产生错误,因为在一个构造函数中只能调用一个构造函数
   }
   }
   **:1)在构造调用另一个构造函数,调用动作必须置于最起始的位置
   2)不能在构造函数以外的任何函数内调用构造函数

   3)在一个构造函数内只能调用一个构造函数

   4. Static的意义

   无法在static函数中调用non-static函数(反向可行)。为什么不能呢,我们看下面的例子。

   例4.2.4.1
   假设能在static函数中调用non-static函数,那么(a)处就将出错。因为在没有产生Movie class实例之前,在就不存在Movie class内的name实例,而在getName()中却要使用name实例,显然的错误的。

   class Movie{
   String name = “”;
   Movie(){}
   public Movie(String name) { this.name = name; }
   public static String getName() { return name; }
   }
   public class Test{
   public static void main(String[] args){
   //下面两名先产生实例后再调用getName()没有问题
   //Movie movie1 = new Movie(“movie1”);
   //String name1 = movie1.getName();
   //下面一名将出错
   //String name2 = Movie.getname(); (a)

   }
   }

……

相关阅读