Java基础

  • 1.学习Java语言
  • 1.1 面向对象的概念(OOP)
  • 1.一个对象是什么?
  • 2.一个类是什么?
  • 3.继承是什么?
  • 4.一个接口是什么?
  • 5.一个包是什么?
  • 6.练习题


java 工作文档 java的官方文档_java

接着来看Java官方文档:

java 工作文档 java的官方文档_bc_02


Getting Started是环境搭建,和第一个程序 ”Hello World“

就不多言。

1.学习Java语言

java 工作文档 java的官方文档_Java_03

1.1 面向对象的概念(OOP)

java 工作文档 java的官方文档_java_04

1.一个对象是什么?

java 工作文档 java的官方文档_bc_05


现实中的对象都有状态(state)和行为(behavior)。

举例:
一只小狗的状态:名字,颜色,品种,饥渴;
				  行为:叫,摇尾巴,取东西。

思考两个问题:
(1)对象的状态是什么?
(2)对象的行为是什么?

现实世界中对于对象的描述也可以用到面向对象的编程语言中来:
如上图所示。

程序中对象的Methods(方法)______现实中对象的行为。(有些编程语言也称之为函数functions)
程序中对象的Fields (域) ______现实中对象的状态。(有些编程语言也称之为变量variables)

注:看不同的翻译的书,有时很让人混乱。上面的method和field,function和variable。看这个官方文档,就比较清晰,界定也明了。可是我们通常在听到的是方法和变量混着说。可能不必太在意。混沌一点。
不过,如果想写书。可能就得严谨一点了。
本系列中,都采用官方词语。method和field。为了不麻烦。直接不翻译。以后遇到在不同语言中不同的语言,直接用英语单词好了。免得纠结,概念也混乱。

2.一个类是什么?

现实生活中,你经常发现同一类的对象。如,成千上万的自行车,它们相互独立,却有相同的模板和制造方式。每辆自行车,都是按相同的一系列图纸造的,因此它们的零部件相同。

在面向对象编程世界,我们说:一辆自行车,是许多自行车对象类的一个实例。
类是创造各个对象的蓝图。

如下,是用Java描述的一个自行车类。

class Bicycle {
//fields
    int cadence = 0;
    int speed = 0;
    int gear = 1;
//methods
    void changeCadence(int newValue) {
         cadence = newValue;
    }

    void changeGear(int newValue) {
         gear = newValue;
    }

    void speedUp(int increment) {
         speed = speed + increment;   
    }

    void applyBrakes(int decrement) {
         speed = speed - decrement;
    }

    void printStates() {
         System.out.println("cadence:" +
             cadence + " speed:" + 
             speed + " gear:" + gear);
    }
}

fields:cadence, speed, and gear表示对象的状态;
methods: changeCadence, changeGear, speedUp etc.定义如何与外部世界交互。

注:这个类中不包含有main()方法。因为它不是一个完整的应用程序,只是被用在软件中的一个类。
自行车类被用在其它类中。

如下,是创建自行车对象的过程。(关键字new)
BicycleDemo类创建了两个自行车对象 ,并调用了它们的方法。

class BicycleDemo {
    public static void main(String[] args) {

        // Create two different Bicycle objects创建两个自行车对象
        Bicycle bike1 = new Bicycle();
        Bicycle bike2 = new Bicycle();

        // Invoke methods on those objects 调用对象的方法
        bike1.changeCadence(50);
        bike1.speedUp(10);
        bike1.changeGear(2);
        bike1.printStates();

        bike2.changeCadence(50);
        bike2.speedUp(10);
        bike2.changeGear(2);
        bike2.changeCadence(40);
        bike2.speedUp(10);
        bike2.changeGear(3);
        bike2.printStates();
    }
}

输出结果:

java 工作文档 java的官方文档_java_06

封装:Bundling code
好处:

  1. 模块化。
  2. 信息隐藏。
  3. 代码复用。
  4. 易插拔,易调试。

3.继承是什么?

不同种的对象会有许多相同的特点。
如图:不同种的自行车(山地车,公路车,双人车),都有齿轮,有速度等。
它们也有自己的特点。双人车有两座,两副把手,公路车有赛车把手,山地车的齿轮比更小等。

java 工作文档 java的官方文档_编程语言_07


面向对象编程允许多个类从其它类中继承共有的状态和行为。

如上,Bicycle是SuperClass,而其余三种自行车是SubClass.

在Java中,每个类只有一个superclass。而superclass所有的subclass不受限制。

关键字:extends

class MountainBike extends Bicycle {
    // new fields and methods defining 
    // a mountain bike would go here
}

如上图,subclass有superclass的所有fields和methods。也可以拓展自己的fields和methods.
superclass中的代码,不会出现在subclass中。

4.一个接口是什么?

对象通过其内部的方法与外部世界交互。
方法形成对象与外部世界交互的接口。(interface)

接口中的方法,没有方法体。举例,如下:

interface Bicycle {

    //  wheel revolutions per minute
    void changeCadence(int newValue);

    void changeGear(int newValue);

    void speedUp(int increment);

    void applyBrakes(int decrement);
}

以一个类实现这个接口。如下,关键字:implements

class ACMEBicycle implements Bicycle {

    int cadence = 0;
    int speed = 0;
    int gear = 1;

   // The compiler will now require that methods
   // changeCadence, changeGear, speedUp, and applyBrakes
   // all be implemented. Compilation will fail if those
   // methods are missing from this class.

    void changeCadence(int newValue) {
         cadence = newValue;
    }

    void changeGear(int newValue) {
         gear = newValue;
    }

    void speedUp(int increment) {
         speed = speed + increment;   
    }

    void applyBrakes(int decrement) {
         speed = speed - decrement;
    }

    void printStates() {
         System.out.println("cadence:" +
             cadence + " speed:" + 
             speed + " gear:" + gear);
    }
}

接口形成类与外部世界连接的一个形式。这个连接,在编译时增强。
如果一个类实现某一接口,其源码中要实现接口中所有方法。

5.一个包是什么?

Java中,把一系列相关的类和接口,放在同一个包中。

6.练习题

Questions

  1. Real-world objects contain ___ and ___.
state, behavior
  1. A software object’s state is stored in ___.
fields
  1. A software object’s behavior is exposed through ___.
methods
  1. Hiding internal data from the outside world, and accessing it only through publicly exposed methods is known as data ___.
encapsulation 封装
  1. A blueprint for a software object is called a ___.
class
  1. Common behavior can be defined in a ___ and inherited into a ___ using the ___ keyword.
superclass, subclass,extends
  1. A collection of methods with no implementation is called an ___.
interface
  1. A namespace that organizes classes and interfaces by functionality is called a ___.
package
  1. The term API stands for ___?
Application Programming Interface

Exercises

  1. Create new classes for each real-world object that you observed at the beginning of this trail. Refer to the Bicycle class if you forget the required syntax.
  2. For each new class that you’ve created above, create an interface that defines its behavior, then require your class to implement it. Omit one or two methods and try compiling. What does the error look like?