开发喵星球

OOP02-静态总结和梳理

pPeHp90.png pPeHkB4.png

本文解决两个问题

为什么使用静态变量

静态方法为什么不能调用非静态成员?

静态方法和实例方法有何不同?

静态成员的特点

静态成员包括哪些

来个例子

需求:定义人类,属性有姓名,性别,生命次数

分析:

代码:

public class Person {
    String name;  // 实例属性
    String gender; // 实例属性
    static int live = 1; // 静态属性

    public Person(String name, String gender) {
        this.name = name;
        this.gender = gender;
    }

    public void sayHello(){
        System.out.printf("我是%s,%s生,我们都知道人的生命只有%d次\n",this.name,this.gender,Person.live);
    }

    public static void main(String[] args) {
        Person p1 = new Person("美少女","女");
        Person p2 = new Person("浩哥","男");
        p1.sayHello();
        p2.sayHello();
    }
}

内存分配(重点):

1692156084907

继续深入

小结:

检验一下

  1. 下面的代码运行后是什么结果

    public class Test {
        int age;
    
        public static void main(String[] args) {
            age = 1;
            System.out.println(age);
        }
    }
    

    第5行报错:原因是静态方法main访问了实例属性age

  2. 下面的代码运行后是什么结果

    public class Test {
        public void add(){
            System.out.println("调用了add方法");
        }
        
        public static void sub(){
            System.out.println("调用了sub方法");
            add();
        }
    
        public static void main(String[] args) {
            sub();
        }
    }
    

    第8行报错:原因是静态方法sub调用了实例方法add

  3. 下面的代码运行后是什么结果

    public class Test {
        public void add(){
            System.out.println("调用了add方法");
        }
    
        public static void sub(){
            System.out.println("调用了sub方法");
            new Test().add();
        }
    
        public static void main(String[] args) {
            sub();
        }
    }
    

    正确,这个题目是对上一个题目的改进,正确的原因是第8行在调用add方法前,已经new出了Test类的对象,然后由Test类的对象调用实例方法add。

   
分类:Java/OOP 作者:开发喵 发表于:2023-08-29 12:46:04 阅读量:108
<<   >>


powered by kaifamiao