首页 > 其他分享 >1.类&对象&构造方法

1.类&对象&构造方法

时间:2022-12-01 15:00:19浏览次数:41  
标签:变量 构造方法 对象 Student 方法 public

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

1.1 方法区(method area)

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

1.2 堆(heap)

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

1.3 栈(stack)

  • 调用的方法都会进入到栈中(包括main方法),方法执行完成就出栈。若调用的是对象的方法,则会先进入堆中找到这个方法的地址,再根据地址进入方法区进行调用。

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

  • 对象可作为方法的参数

    public void fun(Scanner scan){
        int i = scan.nextInt();
        System.out.println(i);
    }   
  • 对象可最为方法的返回值

    public Student getStu(){
        Student stu = new Student();
        stu.setName("XiaoMing");
        stu.setAge(11);

        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()方法中可编写访问控制语句。

5. 构造方法

  • 构造方法用于创建对象,若默认的构造方法无法满足使用需求,可自定义构造方法,以替代默认方式,在创建对象时提供额外的功能(实现逻辑、为变量赋值等)。
  • 自定义的构造方法名需和类名相同。定义构造方法时,无需设置返回值类型。

    public class Student {
    public Student (){
        System.out.println("I'm a student");
    };
}
  • 构造方法可进行重载(可创建多个同名构造方法,方法名称相同,但参数列表不同,使用时根据参数列表进行区分)。

    public class Student {
    public Student (){
        System.out.println("I'm a student");
    };

    public Student(String name,int age){
        System.out.println("My name is"+name+", I'm "+age+"years old");
    }
}
  • 同一个类中的无参构造方法可用this调用本类中的有参构造方法:

    public class Student {
    public Student (){
       this("java",18) ;//无参构造方法中调用有参构造方法
        System.out.println("I'm a student");
    };

    public Student(String name,int age){
        System.out.println("My name is "+name+", I'm "+age+" years old");
    }
    /*输出结果:
    My name is java, I'm 18 years old
    I'm a student
    */
}

标签:变量,构造方法,对象,Student,方法,public
From: https://www.cnblogs.com/efancn/p/16941367.html

相关文章

  • FormData()浏览器内置的对象 不需要引入js 主要用于保存文件 发送给后端
    FormData()浏览器内置的对象它是一个构造函数 不需要引入js文件  概念:1.`FormData`是浏览器提供的内置对象2.以`key/value`的形式保存数据3.能够结合`ajax`......
  • Python高级-面向对象设计-笔记
    继承-是基于Python中的属性查找(如X.name)多态-在X.method方法中,method的意义取决于X的类型封装-方法和运算符实现行为,数据隐藏默认是一种惯例参考实例腾讯即时通信模......
  • sql server 删除带依赖的列 由于一个或多个对象访问此 列
    --SELECT*FROMLJEL005H--ALTERTABLELJEL005Haddel_reqintdefault15notnull--消息5074,级别16,状态1,第2行--对象'DF__LJEL005H__el_req__55E14B87'依赖于......
  • JS之面向对象
    面向对象了解构造函数原型对象的语法特征,掌握JavaScript中面向对象编程的实现方式,基于面向对象编程思想实现DOM操作的封装。了解面向对象编程的一般特征掌握基于......
  • <二>函数调用过程中对象优化
    代码1#include<iostream>usingnamespacestd;classTestV2{public: TestV2(inta=10):ma(a){cout<<"TestV2(int)"<<ma<<"对象地址="<<this<<endl;......
  • JavaScript笔记之面向对象
    面向对象了解构造函数原型对象的语法特征,掌握JavaScript中面向对象编程的实现方式,基于面向对象编程思想实现DOM操作的封装。了解面向对象编程的一般特征掌握基于......
  • delphi 让TActionList中的sender指向事发对象
    故事这样的:我有一批按钮需要共同一个点击事件,本来是按最普通的方法,批选了这些按钮,然后双击click事件,然后写代码,最主要的是这句:iTag:=TControl(Sender).Tag;......
  • js 对象属性过滤方法
    有时候需要剔除少数属性,留下大多数。类似于TS的omit例子:letperson={name:"jackchen",age:54,address:'hongkong'}let{name,...xiaohong}=personcons......
  • JavaScript中的Error错误对象与自定义错误类型
    ErrorError是JavaScript语言中的一个标准的内置对象,专门用于处理JS开发中的运行时错误。当我们的JS代码在运行过程中发生错误的话,就会抛出Error对象,整个程序将会中断在错......
  • JS对象笔记
    对象对象基本使用对象是JS中的一种复合数据类型,它相当于一个容器,在对象中可以存储各种不同类型的数据而基本数据类型(原始值)只能存储一些简单的数据,如:语法: 原始创建......