面向对象基础01(局部、成员变量,this关键字,构造方法,标准类制作)

局部变量和成员变量

局部变量和成员变量的比较,我们从以下四个方面:

  • 在类中定义的位置不同

    • 局部变量 方法或者方法的形参
    • 成员变量 方法外 类中成员位置
  • 在内存中的位置不同

    • 局部变量 栈上
    • 成员变量 堆中的对象中
  • 生命周期不同

    • 局部变量 随着方法的进出栈而存在而销毁
    • 成员变量 对象创建以后 对象销毁就没了
  • 初始化值不同

    • 局部变量 没有默认的初始化值,需要手动初始化
    • 成员变量 有默认的初始值
      • char \u0000
      • boolean false
  • 作用范围

    • 局部变量 只在方法范围内生效
    • 成员变量 对象当中,整个类的成员方法都可以使用,在普通的加static的方法中,不能使用

    局部变量和成员变量的比较:

    1.在类中定义的位置不同
      a. 局部变量: 定义在类中方法体之内,或者方法的形参的位置
      b. 成员变量: 类中,方法之外
    2.在内存中的位置不同
      a. 局部变量: 栈中
      b. 成员变量: 存储在堆上的,对象中的
    3.生命周期不同
      a. 局部变量: 随着方法进栈而创建,随着方法出栈而销毁
      b. 成员变量: 随着对象的创建而创建,随着对象的销毁而销毁
    4.初始化值不同
      a. 局部变量: 必须在使用之前手动赋予初值
      b. 成员变量: jvm会赋予默认初值
    5.作用范围不同
    	a. 局部变量:只在方法内部起作用
    	b. 成员变量:整个类都可以使用
    

this关键字

  • 引例
    • 创建一个汽车类,有颜色和速度两个属性,行为是可以跑
    • 然后在成员方法中调用属性,调用该方法
    • 在成员方法的形参列表中,定义和属性同名的局部变量,再次调用该方法

总结:

1,使用对象调用成员方法时,java会自动把该对象传给成员方法,由this关键字来接收。(这意味着可以通过this调当前对象的成员变量和成员方法)

2,也就是说,成员方法中,默认有一个this来代表当前对象。(在成员方法和main方法中打印引用和this是一个结果)

3,不同对象的this代表不同对象

4,this关键字可以用来区分成员变量和局部变量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

构造方法(constructor)

例子:

​ 创建一个教师类,有课程和年龄两个属性,行为时可以睡觉

​ 思考一下,我们给成员变量赋值的语句,是不是显得冗余?

​ 怎么改进?

​ 能不能“出厂”的时候就设定好呢?

构造方法:在Java程序设计语言中,必须使用构造器来进行创建对象

  • 构造方法是一种特殊方法,用来创建初始化对象(实例)

语法:

public 类名(参数){
	//方法体
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意:

​ 1,没有返回值,并且方法名是首字母大写的(因为类名是首字母大写)

​ 2,new对象的时候,自动调用这个方法

​ 3,Java默认提供无参构造方法,但是如果你提供了一个有参的构造方法,那么就没有默认的无参构造了—>我们写代码时,应该直接把无参构造提供了

​ 4,构造方法最大的作用是在new对象时给对象的属性赋值

​ 5,构造方法可以重载,重载时可以活用this关键字,调用已有的构造方法

  • a,只能在构造方法中,用this调用另一个构造方法

  • b,如果使用this调用别的构造方法,那么这条语句必须在该构造方法的第一行

​ 6,构造方法无法通过普通方法的调用方式调用

标准类制作

在这里插入图片描述
Student

public class Student {
    //成员变量
    private String name;
    private int age;

    //构造方法
    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //成员方法
    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void show() {
        System.out.println(name + "," + age);
    }
}

StudentDemo

public class StudentDemo {
    public static void main(String[] args) {
        //无参构造方法创建对象后使用setXxx()赋值
        Student s1 = new Student();
        s1.setName("林青霞");
        s1.setAge(30);
        s1.show();

        //使用带参构造方法直接创建带有属性值的对象
        Student s2 = new Student("林青霞",30);
        s2.show();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值