Java再学类、对象、构造方法!

71 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情

Snipaste_2022-12-07_23-08-34.jpg

类、对象、构造方法 

1. 类和对象的内存处理方式

1.1 方法区(method area)

  • 也称静态区,主要用于存放用户定义的各个类、静态变量等。

1.2 堆(heap)

  • 堆中存放对象和非静态变量。
  • 在使用new关键字产生对象后,对象会存放进堆中进行管理,对象名就是对象在堆中的地址。
  • 对象把被它调用的成员变量直接存储到堆中。
  • 对象把被它调用的成员方法地址存储到堆中,间接调用。

2. 对象作为方法的参数和返回值

对象作为方法参数

    public void Number(Scanner sc){
        
      int age=sc.nextInt();
      System.out.print(age);
      
    }   

对象作为方法的返回值

    public Student getStu(){
           int age=sc.nextInt();
        Student stu=new student();
        stu.age=age;
       return stu;
    }

3. 成员变量和局部变量

3.1 基本特征

  • 成员变量位于方法外,可供整个类使用;成员变量有默认值null,定义时可不赋值;
  • 局部变量位于方法内,仅它所在的方法可使用。局部变量没有默认值,定义时必须赋值。

3.2 内存管理

  • 由于成员变量在类中定义,而类实例化为对象后是进入堆中,故成员变量是在堆中进行管理。
  • 局部变量在方法中定义,方法是在栈中进行管理,故局部变量也在栈中进行管理。

3.3 生命周期

  • 局部变量在栈中,故最终随方法出栈以结束生命周期,周期较短。
  • 成员变量在堆中,故最终以垃圾回收的方式结束周期,周期较长。

3.4 this关键字的使用

  • 若某个类中,局部变量的名称和成员变量名称相同,则可使用this关键字对局部变量进行标识,以区分两个变量。
  • 若有多个类,则this表示的是造成重名的那个类。

4. private型变量的访问

  • 若类中有变量private int age,则在类以外无法直接访问这个变量。
  • 若要在类外访问private型变量age,需在类中定义setAge()和getAge()两个方法,按格式要求,变量名age的首字母必须为大写(idea中使用alt+insert可快速创建)。
  • setAge()和getAge()方法中可编写访问控制语句。