Java面向对象03:回顾方法的调用

静态方法 static :可以直接通过 类名.方法名 调用

非静态方法:需要实例化类进行调用 new 类.方法名

public class Demo02{
    public static void main(String[] args) {
        // 静态方法调用
        Student.talk();

        // 非静态方法调用 需要先实例化类
        // 对象类型 对象名 = 对象值;
        Student student = new Student();
        student.say();
    }
}
// 学生类
public class Student {
    // 非静态方法
    public void say() {
        System.out.println("学生说话了");
    }

    // 静态方法 static 
    public static void talk() {
        System.out.println("学生说话了");
    }
}

注意

静态方法调用静态方法、非静态方法调用静态方法和非静态方法是没问题的。

但是静态方法调用非静态方法是会报错的。因为静态方法和类一起加载,而非静态方法需要类实例化后才存在。

Java面向对象03:回顾方法的调用

 

public class Demo03 {
    public static void main(String[] args) {
        // 实际参数和形式参数的类型要对应!
        int add = Demo03.add(1, 2);
        System.out.println(add);
    }
    
    public static int add(int a, int b) {
        return a+b;
    }
}
// 值传递
public class Demo04 {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(a);
        
        Demo04.change(a);
        
        System.out.println(a);
    }
    
    // 返回值为空
    public static void change(int a) {
        a = 10;
    }
}

运行结果:

这就是值传递,虽然在 change 方法中把10赋值给了 a ,但只是在 change 方法中赋的,并没有传递到主方法,所以在主方法中 a 仍是 1

Java面向对象03:回顾方法的调用

 

// 引用传递:对象,本质还是值传递
public class Demo05 {
    public static void main(String[] args) {
        Person person = new Person();
        
        System.out.println(person.name);  // null
        
        Demo05.change(person);
        System.out.println(person.name);  // 秦疆
    }
    
    public static void change(Person person) {
        // person 是一个对象:指向的是 Person person = new Person();
        // 这是一个具体的人,可以改变属性!
        person.name = "秦疆";
    }
}

// 定义了一个 Person 类,有一个属性 name
class Person {
    String name;  // null
}

运行结果:

Java面向对象03:回顾方法的调用

 

上一篇:static扩展


下一篇:Educational Codeforces Round 99 (Rated for Div. 2) A-F题解