被深蓝色所染的冬天

 

【类和对象】的初学思考20211102

代码:

class Person {
    //1. 成员变量:存储时是否静态,访问时是否公开
    private int age;//实例非静态变量,依赖对象,公开表示其他方法可以直接访问
    private static int staticAge;
    public double height;
    public static double staticHeight;
    //2. 成员方法
    //2.1 静态代码块
    static {
        staticAge=18;
    }
    //2.2 实例代码块
    {
        age=18;
    }
    //【成员变量的内部引用】
    //2.3 private类成员变量
    public void setAge(int age) {//需要公开的接口,set和get方法
        this.age = age;
    }
    public int getAge() {
        return this.age;
    }
    public static int getStaticAge() {
        return staticAge;
    }

    //2.4 public类成员变量
    public void eat(int age){//实例方法
        this.age=age;//this表per对象,因为已经构造完,对象产生了
        staticAge=18;//实例方法可以访问静态成员变量
    }
    public static void staticEat(int age){//静态方法只能访问静态成员变量
        staticAge=age;//静态成员变量依赖类(在对应类里面可以直接写)
        //Person.staticAge=age; 也正确
    }
    //方法一般public类,没必要封装
}
public class Test01 {
    public static void main(String[] args) {
        //产生对象,实例化对象
        Person per=new Person();//自动创建构造方法Person()
        //【成员变量的外部引用,需要传参】
        //1)private类变量需要建立公共的接口:set和get
        System.out.println("private类的age="+per.getAge());
        System.out.println("private类的staticAge="+Person.getStaticAge());
        //2)public类变量不需要公共接口,直接引用
        per.eat(18);
        Person.staticEat(18);
        //总结:变量存储看是否静态,变量外部引用看是否公开,内部引用习惯用this表对象;
    }
}


从Test01类的main函数开始分析:

public class Test01 {
    public static void main(String[] args) {
        //产生对象,实例化对象
        Person per=new Person();//自动创建构造方法Person()
        //【成员变量的外部引用,需要传参】
        //1)private类变量需要建立公共的接口:set和get
        System.out.println("private类的age="+per.getAge());
        System.out.println("private类的staticAge="+Person.getStaticAge());
        //2)public类变量不需要公共接口,直接引用
        per.eat(18);
        Person.staticEat(18);
        //总结:变量存储看是否静态,变量外部引用看是否公开,内部引用习惯用this表对象;
    }
}

对象的创建 Person per=new Person();

 Person per=new Person();
 //等价于 
 //1. Person per;
 //2. per=new Person();

分析过程看:在这里插入图片描述

在这里插入图片描述

Q:填充对象时,对象内部的变量(/常量)如何分配空间?
A:存放看是否静态。1)实例成员变量:依赖对象,存放在堆的per里;2)静态成员变量:存放在方法区,因为静态的不依赖对象;

接着,成员变量的外部引用

        //【成员变量的外部引用,需要传参】
        //1)private类变量需要建立公共的接口:set和get
        System.out.println("private类的age="+per.getAge());
        System.out.println("private类的staticAge="+Person.getStaticAge());
        //2)public类变量不需要公共接口,直接引用
        per.eat(18);
        Person.staticEat(18);

成员方法的引用看开头总代码

总结

变量存储看是否静态,变量外部引用看是否公开,内部引用习惯用this表对象;

细节可能看起来乱,但多敲代码,多去从main开始一行行分析,细节自然懂。

posted on 2021-11-02 21:09  被深蓝色所染的冬天  阅读(30)  评论(0)    收藏  举报

导航