Tutorial

在Java中一切都包含在类和对象中. Java对象持有状态,状态是该对象内一起保存的变量,我们称他们为字段或成员变量。

让我们从一个例子开始:

class Point {
    int x;
    int y;
}

这个类定义一个点 (拥有x和y属性值)

如果要实例化一个类, 需要使用关键字 new.

Point p = new Point();

在这个列子中, 我们使用了默认构造器 (这个构造器没有参数) 创建这个类. 所有的类不需要显示的定义不干任何事情的默认构造器.

我们可以定义一个自己的构造器:

class Point {
    int x;
    int y;
    Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

这意味着我们不适用默认的构造器 new Point(). 我们现在只能够使用这个构造器 new Point(4, 1).

我们也可以定义多个构造器, Point 对象可以多种方式创建.下面,我们重新定义默认构造器.

class Point {
    int x;
    int y;
    Point() {
        this(0, 0);
    }
    Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

注意关键字 this 的使用. 我们可以在构造器中调用其他的构造器 (避免代码重复),但只能写在构造方法的第一行.

在运行这个类时,我们也可以使用 this 关键字作为当前对象的使用 .

定义了对象pp 可以定义它的属性 xy .

p.x = 3;
p.y = 6;

方法

我们可以在类 Point 中定义方法。

class Point {
    ... // Our code previously
    void printPoint() {
        System.out.println("(" + x + "," + y + ")");
    }
    Point center(Point other) {
        // 返回中心点
        // 因为我们使用的是integer, 这会得到一个约值
        return new Point((x + other.x) / 2, (y + other.y) / 2);
    }

Public公共 and Private私有

我们后面会讨论修饰符, 一定要理解 变量 和 方法前的 privatepublic 修饰符的作用 .

当我们使用关键字 private 定义在变量和方法前时, 是指只用类本事才能方法到变量和方法, 当使用 public 时,指所有的类都可以方法到它。 我们常常看到构造器定义为公共的public,定义私有变量 和定义方法是分开的,他们可以不同。

Exercise

在类Point中写一个scale方法,求中心点。比如 point (8, 4) 经过 scale 方法处理后 变为 (4, 2).

Tutorial Code

class Point {
    private double x;
    private double y;
    public Point(double x, double y) {
        this.x = x;
        this.y = y;
    }
    public void print() {
        System.out.println("(" + x + "," + y + ")");
    }
    // 你的代码写在这
}

public class Main {
    public static void main(String[] args) {
        Point p = new Point(32, 32);
        for (int i = 0; i < 5; i++) {
            p.scale();
            p.print();
        }
    }
}

Expected Output

(16.0,16.0)
(8.0,8.0)
(4.0,4.0)
(2.0,2.0)
(1.0,1.0)

Solution

class Point {
    private double x;
    private double y;
    public Point(double x, double y) {
        this.x = x;
        this.y = y;
    }
    public void print() {
        System.out.println("(" + x + "," + y + ")");
    }

    public void scale(){
        x = x/2;
        y = y/2;
    }
}

public class Main {
    public static void main(String[] args) {
        Point p = new Point(32, 32);
        for (int i = 0; i < 5; i++) {
            p.scale();
            p.print();
        }
    }
}