oop面向对象第二天:构造器(复用给成员变量赋初值代码/可重载)、this(当前对象/3个用法)、引用类型数组、内存管理

  • 1、构造方法:构造函数、构造器、构建器---------复用给成员变量赋初值代码

  • 2、this:指代当前对象,哪个对象调用方法它指的就是哪个对象
    (1)this.成员变量名-------------访问成员变量
    (2)this.方法名()-----------------调用方法(了解)
    (3)this()---------------------------调用构造方法(了解)

  • 3、null和NullPointerException:

  • 4、引用类型数组:
    (1)给元素赋值需要去new个对象
    (2)访问对象的数据,需要通过数组元素去打点

单词:
1)this:这个
2)Pointer:指针
3)random:随机
4)reference:引用

面向对象第二天:

回顾:

  1. 什么是类?什么是对象?
  2. 如何创建类?如何创建对象?如何访问成员?
  3. 方法的重载(overload):-----------------方便用户的调用
    • 发生在同一类中,方法名相同,参数列表不同
    • 编译器在编译时会根据方法的签名自动绑定方法

笔记:

1、构造方法:构造函数、构造器、构建器---------复用给成员变量赋初值代码

  • 作用:给成员变量赋初始值
  • 与类同名,没有返回值类型(连void都没有)
  • 在创建(new)对象时被自动调用
  • 若自己不写构造方法,则编译器默认提供一个无参构造方法,若自己写了构造方法,则不再默认提供
  • 构造方法可以重载
  • 构造方法也属于类中成员,可以用4种访问修饰符来修饰!!!
package oopday9.day02;
/** 学生类 */
//基于对象(在StudentTest类中new的对象Student)抽出的类不需要main方法
public class Student {
    String name;//默认值为null--------------------------------------成员变量(在整个类中):name、age、address
    int age;//默认值为0
    String address;

//    //若自己不写构造方法,则编译器默认提供下面这个无参构造方法:-----------与类同名,没有返回值类型(连void都没有)
//    //若写了(即下面带参数的构造),则系统不再提供
//    //在创建(new)对象时被自动调用
//    Student(){
//    }

    //构造方法可以重载:------------构造方法也属于类中成员,可以用4种访问修饰符来修饰!!!!
    Student(String name){
      this.sayHi();//------------我们可以在本类构造函数的第一行使用this();
                   //调用本类的无参构造 / 使用this(参数);
                  //构造函数的调用只有这一种方式,或者创建对象时被动触发,不能在外面自己主动调用
    }

    //若自己写了构造方法,则不再默认提供上面那个无参构造:(此时StudentTest类中会有错误,
    // -即new的对象Student()→括号会爆红,因为自己写的是有参构造,java规则是有参必须传参!)
    Student(String name, int age, String address){//----------局部变量(当前方法中):name、age、address
        this.name = name;//成员变量(this.name)与局部变量(name)同名时,若想访问成员变量则this不能省略
        this.age = age;//局部变量没有默认值!!!
        this.address = address;
    }

    //方法
    void study(){
        System.out.println(name+"在学习...");
    }
    void sayHi(){
        System.out.println("大家好我叫"+name+",今年"+age+"岁了,家住"+address);
    }
}


package oopday9.day02;
/** 学生测试类-----构造(Constructor)方法 */
public class ConstructorDemo {
    public static void main(String[] args) {
        //Student zs = new Student();//编译错误,学生类没有无参构造方法(因为自己写了构造方法,系统则不默认提供无参构造,所以报错)

        //1.创建一个学生对象:
        Student zs = new Student("张三",25,"河北");//new Student()是对象

        //2.调用方法
        zs.study();
        zs.sayHi();

        /*
        zs = null;//表示空,没有指向任何对象
        zs.age = 15;//运行时会发生NullPointerException
         */

    }
}

2、this:指代当前对象,哪个对象调用方法它指的就是哪个对象

​ 只能用在方法中,方法中访问成员变量之前默认有个this.

this的用法:

  • (1)this.成员变量名-------------访问成员变量

    成员变量与局部变量同名时,若想访问成员变量则this不能省略

    class Student {
        String name; //成员变量(整个类中)
        int age;
        String address;
        //局部变量(当前方法中)
        Student(String name,int age,String address){//-----为构造方法,Student与类同名!无返回值!
            this.name = name;
            this.age = age;
            this.address = address;
        }
    
        void study(){
            System.out.println(name+"在学习...");
        }
        void sayHi(){                       
            System.out.println("大家好,我叫"+name+",今
                               年"+age+"岁了,家住"+address);
            }
        }
    
  • (2)this.方法名()-----------------调用方法(了解)

  • (3)this()---------------------------调用构造方法(了解)

3、null和NullPointerException:

:表示空,没有指向任何对象,若引用的值为null,则该引用不能进行任何点操作了,若操作则发生NullPointerException空指针异常
在这里插入图片描述

例:
在这里插入图片描述

4. 引用类型数组:

(1)给元素赋值需要去new个对象
(2)访问对象的数据,需要通过数组元素去打点
例1:

  Bomb[] bs = new Bomb[3];
  bs[0] = new Bomb(100,200); //------------(1)给元素赋值需要去new个对象!
  bs[1] = new Bomb(200,300);
  bs[2] = new Bomb(220,330);
  //2)若想访问对象的数据,需要通过数组元素去打点
  bs[0].x = 111; //给第1个炸弹的x修改为111  
  System.out.println(bs[1].width); //输出第2个炸弹的宽
  bs[2].move(); //第3个炸弹移动-------------(2)若想访问对象的数据,需要通过数组元素去打点!

引用类型数组:引用类型数组

(3)引用类型与基本类型内存图:

main方法中new了一个Bom对象的同时,在堆里存储了Bom对象的属性(x/y...)。
在main中通过引用去打点的同时,在栈中

引用类型与基本类型内存图

————————————————————————————————————————
————————————————————————————————————————

精华笔记:
1.构造方法:构造函数、构造器、构建器---------复用给成员变量赋初值代码

  • 作用:给成员变量赋初始值
  • 与类同名,没有返回值类型(连void都没有)
  • 在创建(new)对象时被自动调用
  • 若自己不写构造方法,则编译器默认提供一个无参构造方法,若自己写了构造方法,则不再默认提供
  • 构造方法可以重载

2.this:指代当前对象,哪个对象调用方法它指的就是哪个对象

  • 只能用在方法中,方法中访问成员变量之前默认有个this.

this的用法:

  • this.成员变量名-------------访问成员变量
    (成员变量与局部变量同名时,若想访问成员变量则this不能省略)

  • this.方法名()-----------------调用方法(了解)

  • this()---------------------------调用构造方法(了解)

3.null:表示空,没有指向任何对象
若引用的值为null,则该引用不能进行任何点操作了,
若操作则发生NullPointerException空指针异常

补充:

  1. 成员变量:写在类中,方法外--------有默认值

    局部变量:方法中------------------------没有默认值

  2. java规定:成员变量和局部变量是可以同名的

    • 使用的时候默认采取的是就近原则
  3. 内存管理:由JVM来管理的

    • 堆:new出来的对象(包括成员变量)
    • 栈:局部变量(包括方法的参数)
    • 方法区:-----------周四讲
    • :.class字节码文件(包括静态变量、所有方法)
  4. 数组也是一个对象,所以数组对象也存储在堆中,

    将数组的元素当作成员变量一并存储在堆中

  5. 内存图:
    在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值