首页 > 技术 > [Big Java]翻译 第2章第3节~第8节

[Big Java]翻译 第2章第3节~第8节

2010年5月14日 QiQi 5 次浏览 发表评论 阅读评论

第3节 定义类 
回忆一下类的定义方法,这个方法就是你可以应用到它的对象。(Recall that a class defines the methods that you can apply to its objects.)
 例子:
Public class Greeter
{
     Public String sayHello();
   {
     String message = ”Hello, World!”;
    }
}
方法定义包含如下部分:
1、获取说明(如:public);获取说明(access specifier)控制着其他哪些方法可以调用这个方法,大多数方法应该被声明为public,这样的话,在你的程序中所有其他的方法才可以调用它们。
2、方法的返回类型(如:String);返回类型是这个方法返回给调用者的值的类型。一些方法只是执行一些声明并不用返回一个值,这样的方法可以使用void作为返回类型。
3、方法的名称(如:sayHello);
4、方法的一系列参数,装在圆括号里(sayHello方法没有参数);一个方法定义具体指定了方法的名称,参数和声明(执行方法的动作)。每个参数是一个变量,有类型和名字。
5、方法的主体:在大括号中的一系列声明。方法的主体(method body)包括方法执行所需的声明。 

语法2.4:方法实现(Method Implementation)
public class ClassName
{
     …
    accessSpecifier returnType methodName(parameterName, …)
   {
        Method body
   }
    …
}
目的:为了定义方法的行为

返回声明(The return statement):使用返回声明来具体指定方法返回给调用者的值。
2.5语法:返回声明(The return Statement)
return expression;
or
return;
目的:为了具体说明方法返回的值和立即退出方法(To specify the value that a method returns)。返回值变成方法的值调用表达式(The return value becomes the value of the method call expression)。 

 

第4节 测试一个类
一个测试类通常执行以下步骤:
1、构建要被测试的类的一个或多个对象;
2、调用一个或多个方法;
3、打印出一个或多个结果。

为了生成一个程序,你需要组合两个类,在大多数环境下你需要执行以下步骤:
1、为你的程序心间一个子文件夹;
2、新建两个文件,针对每个类一个文件;
3、编译这两个文件;
4、运行这个测试程序。 

更加有效率的使用命令行:重新使用相同的javac命令,敲入javac然后按F8键(Windows) 

第5节 实例变量(Instance Fields)
一个对象使用实例变量(Instance Fields)来存储它的状态—它需要执行它方法的数据(An object uses instance fields to store its state — the data that it needs to execute its methods.)一个对象的状态是一系列决定一个对象如何响应方法调用的值,一个对象在一个或多个变量中保存它的状态称之为实例变量(Instance Fields)。你在类里面为一个对象声明实例变量(Instance Fields)

public class Greeter
{
     private String name; 
}
一个Instance Field的声明由以下部分组成:
1、存取权限(An access specifier)常常是private的
2、变量的类型(如:String)
3、变量的名称(如:name)
PS:Access Specifier —- 存取权限(访问权限)。成员的存取权限是由存取指明符关键字public,private或protected所指定。  

类的每个对象有它自己的一系列实例变量(Each object of a class has its own set of instance fields.)实例变量通常被声明作private。这个说明它们仅能被相同类的方法读取,而不能被任何其他的方法读取。换句话说,如果实例变量被声明为private,那么所有数据的读取必须通过公共的方法而存在(In other word,if the instance fields are declared private,then all data access must occur through the public methods.)因此对象的实例变量被使用类的程序员有效的隐藏起来,他们仅关心实现这个类的程序员。这种为数据读取(data access)而隐藏数据和提供方法的过程称之为封装(encapsulation)封装就是为数据的读取而隐藏对象数据和提供方法的过程。你应该声明所有实例变量为private。

public String sayHello(){
      String message = ”Hello,” + name + ”!”;
      return message;

注意这个方法使用两个独立的对象变量:本地变量message和实例变量。本地变量属于单独的方法,你仅能在你声明的方法中使用。实例变量属于属于一个对象,你可以在它的类的所有方法中使用。

2.6语法 实例变量声明 (Instance Field Declaration)
accessSpecifier class ClassName
{
      …
     accessSpecifier fieldType fieldName;
     …
}
目的:为了定义在类的每个对象中的一个存在的变量(To define a field that is present in every object of  a class) 

第6节 构造器(Constructors)
一个构造器说明一个对象如何被初始化。构造器(constructors)包含命令来初始化对象。构造器(constructors)的名称总是与类的名称相同。
public Greeter(String aName)
{
     Name = aName;
}
构造器通常声明做public,使在程序中的任何代码都能构建类的新对象。构造器不需要返回类型(return type),new操作符调用这个构造器。
new Greeter(”Dave”)
构造器不是方法,你不能在一个已存在的对象上调用一个构造器,你只能联合new这个操作符来使用构造器(constructor)。
worldGreeter.Greeter(”Harry”);   // Error 

2.7 语法 构造器的实现(Constructor Implementation)
accessSpecifier class ClassName
{
     …
     accessSpecifier ClassName(parameterType parameterName, …)
    {
       constructor implementation;
    }
    …
}
目的:为定义一个构造器的行为,构造器是用来初始化新创建对象的实例变量的。 

第7节 设计一个类的公共接口
在你开始编程前,你需要明白你的类的这个对象是如何工作的。考虑你能够跟一个银行账号执行什么样的操作。
你能够 Deposit money (存钱)
        Withdraw money (取钱)
        Get the current balance (获取当前的账户结余)
在java里,这些操作用方法调用来描述,让我们假设这个变量harrsChecking包括一个引用,这个引用是对于一个类型为BankAccount的对象。你将会能够调用以下方法:
harrsChecking.deposit(2000);
harrsChecking.withdraw(500);
System.out.println(harrsChecking.getBalance());
这样,这个BankAccount类应该定义三个方法:
deposit
withdraw
getBalance
接下来,你需要决定这些方法的参数和返回类型,就像你可以从代码范例中看到的一样,deposit和withdraw接收一个数字(美元总数)但不返回值。方法getBalance没有参数但返回一个数字。更灵活的数字类型被称为double,它代表双精度浮点数(double precision floating-point number)。想象一个double类型的数字可以是能够出现在计算器里的任何数字,比如250,6.75或-0.33333333。现在你知道你可以对数字用double类型,你能够写下BankAccount类的方法如下: 
public void deposit(double amount)
public void withdraw(double amount)
public double getBalance()
现在让我们为这个类的构造器做一样的事,我们如何构建一个银行账户?
BankAccount harrsChecking = new BankAccount();
应该构建一个零结余的新银行账户,如果我们想要从一个其他的结余开始呢?第二个构造器将会有用,它为初始值设置结余。
BankAccount harrsChecking = new BankAccount(5000);
以上给了我们两个构造器
public BankAccount()
public BankAccount(double initialBalance)
编译器通过你调用时使用的参数可知道你使用的哪个构造器。重载方法(Overloading methods)是有相同的名称但不同的参数类型的方法。如果一个名称用来表示超过一个构造器或方法,那这个名称就是被重载了。类的构造器和方法形成类的公共接口,它们是这些操作在你的程序中任何代码都能访问来创建和实现BankAccount对象,以下是类BankAccount的公共接口的完整列表:
public void deposit(double amount)
public void withdraw(double amount)
public double getBalance()
public BankAccount()
public BankAccount(double initialBalance)

抽象是为一个类找到最本质的特征的过程(Abstraction is the process of finding the essential feature set for a class.)正如你所看到的,你可以使用BankAccount类的对象来实现有意义的任务,而不用知道BankAccount对象如何保存它们的数据或者BankAccount方法如何做它们的工作。这就是面向对象编程的重要方面。想想一个抽象画除去不必要的细节和试图只去表现一个对象的最本质特征。当你设计一个类的公共接口时,你也需要找到是最本质的可以在你的程序中去操作对象的那些指令(you also need to find what operations are essential to manipulate objects in your program.) 

Advanced Topic 2.2
Overloading(重载):当相同的名字用来为超过一个方法或构造器使用时,这个名字就是重载,这对于构造器是特别平常的事,因为所有构造器必须和类有相同的名字。对于重载的目的,返回值的类型不重要,你不能有两个方法都有完全相同的名称和参数类型但是不同的返回值。 

第8节 给公共接口加注释(Commenting the Public Interface)
使用文档注释来描述你程序的类和公共方法。当你定义类和方法时,你应该习惯于全面地注释它们的行为。在Java中有一个非常有用的标准格式为文档注释(documentation comments)服务。如果你在你的类中使用这种格式,一个称为javadoc的程序能够自动生成一系列简洁明了的Html页面来描述它们。一个文档注释(documentation comment)以一个/**开始,一个特别的定义符被Javadoc工具所使用,然后你可以描述方法的目的,为每个方法的参数,你提供一行以@para开头,后面跟着参数名和一个简洁的解释。最后你提供一行以@return开头来描述返回值,你可以省略没有参数方法的para标签,同时你可以省略返回类型是void的方法的@return标签。Javadoc工具复制每个注释的第一句给一个概要表,因此最好小心写第一句,它应该以大写字母开头,以圆点结束,它不需要是符合语法的完整句子,但它应该是有意义的,当它被从注释中抽取出来显示在一个概要中。

你刚刚看见的注释说明了独立的方法,你也应该为每个类提供一个简单的注释,说明它的目的,为接口注释的语法也非常简单,仅需要将文档注释放在类之上即可。

即使你以为这些注释很繁琐,但你仍然需要花时间去写它们,原因有三:
1、javadoc工具将会把你的注释排版成简洁的你可以在浏览器上查看的文档。
2、实际上很容易花多一点时间去衡量是否因一个注释价值不大而不写它比就直接去写要好一些。在实际中的程序非常简单的方法很少,对一个价值不大的方法过度注释是无害的,反之一个复杂的方法没有任何注释对于未来维护的程序员来说将引起真正的灾难。根据标准的Java documentation风格,每个类、每个方法、每个参数和每个返回值都应该有一个注释。
3、在写方法的代码前,先写下方法的注释常常是一个不错的注意,这是最好的测试你是否明白你需要编写些什么,如果你不能解释清楚一个类或一个方法做什么,你将不能准备好去实现它。

转载原创文章请注明:文章转载自:嗨!柒柒! 阅读 影音 旅行 生活 分享 (http://www.jiangyouni.cn/qiqi)
本文标题:[Big Java]翻译 第2章第3节~第8节
本文地址:http://www.jiangyouni.cn/qiqi/?p=364

  1. 2010年5月14日18:24 | #1

    学习了。谢谢分享

    [回复]

  2. 2010年5月24日22:23 | #2

    /**
    *
    */
    package com.renliang.test.helloworld;

    /**
    * @author Renliang
    * @date 2010-5-24
    */
    public class Test {

    /**
    * 入口方法
    */
    public static void main(String[] args) {

    Test _test = new Test();

    _test.sayHello();
    _test.sayHello(”QiQi”);
    _test.sayHello(”QIQI”,”World”);

    }

    /**
    * sayHello functiion
    *
    * @author Renliang
    * @date 2010-5-10
    */
    public void sayHello() {
    System.out.println(”hello qiqi!”);
    }

    /**
    * sayHello functiion
    *
    * @param name
    * @author Renliang
    * @date 2010-5-10
    */
    public void sayHello(String name) {
    System.out.println(”hello ” + name + ” !”);
    }

    /**
    * sayHello functiion
    *
    * @param name,say
    * @author Renliang
    * @date 2010-5-10
    */
    public void sayHello(String name, String say) {
    System.out.println(”hello ” + say + “,My name is ” + name);
    }

    }

    [回复]

  1. 本文目前尚无任何 trackbacks 和 pingbacks.