8.5 方法

属性用来描述对象,方法则是对象的动作、行为或者功能等。方法的调用,必须要有对象。
方法是定义在类里面的非static函数,在java世界里,所有函数都是定义在类里面的。在此学习平台,提到方法就是函数,也称为成员函数,这三者不加区分,是同义的。我们前面学习的函数,都带有static关键字,实际上都是静态方法,关于静态方法,后面会有详细介绍。以下所说的方法都是不带static的(非静态)方法。 这一节,我们主要来学习非静态函数。首先来看看这段代码:
public class Student{
    String name;
    String id;
    String clazz;
    public void printName(){
        System.out.println("名字是:"+name);
    }
}
Student类有三个属性:name、id和clazz,还有一个无参数的函数printName,这个函数打印一句话(注意printName读取了属性name的值)。 假如定义了一个对象stu,那么就可以通过stu调用printName这个方法。
public class Student{
    String name;
    String id;
    String clazz;
    public void printName(){
        System.out.println("名字是:"+name);
    }
    public static void main(String[]args){
        Student stu=new Student();
        stu.name="上官二狗";
        stu.printName();
        Student stu1=new Student();
        stu1.name="东方";
        stu1.printName();
    }
}
stu.printName的意义就是stu的printName这个功能被调用,就好像电视遥控器的换台功能。我们不可能脱离电视机提高音量,在此,也不能脱离Student对象调用printName。
和普通函数不同的是,成员函数(也就是方法)的调用必须有对象。

printName()虽然是没有参数的,但是调用它需要对象,需要使用对象的name属性,哪个对象调用,就使用哪个对象的name属性
在第一节所阐述的:类的行为是这个事物的功能或动作。类的行为就是方法,printName这个方法,就属于Student类的一个功能。
方法可以使用对象的所有属性。
通过对象调用方法,就是这个对象的行为和功能,而方法的调用,必定需要一个对象,否则这是谁的功能?谁的行为?方法内部使用的又是谁的属性? stu.printName()这样的写法,意思就是使用stu的printName功能,必须要有对象 。
这和之前函数的调用有所不同,因为之前的函数调用全部都是静态的,并不需要对象。

再来看一个例子,这是一个玩具车类:
public class ToyCar{
    String name;
    double kilo;
    double length;
    String color;
    String style;
    double v;
    public void start(){
        System.out.println(name+"开车!");
    }
    public void stop(){
        System.out.println(name+"停车!");
        v=0;
    }
    public void turnLeft(){
        System.out.println("左转!");
    }
    public void turnRight(){
        System.out.println("右转!");
    }
    public void backup(){
        System.out.println("倒车!");
    }
    public void accelerate(){
        v=v+1;
        System.out.println(name+"加速!现在速度是"+v);
    }
}
它有许多的方法,里面只有一句打印。这些方法就是车的动作,可以这样使用这个类:
public static void main(String[]args){
    ToyCar car=new ToyCar();
    car.name="征服者";
    car.start();
    car.turnLeft();
    car.accelerate();
    car.stop();
}
方法就是动作,就是功能。