面向对象4(this关键字,构造方法,static关键字)

本文详细解析Java中构造方法的概念、作用及调用特性,包括构造方法与setter方法的区别,以及this关键字如何用于区分成员变量和局部变量,强调构造方法在对象初始化中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

this关键字

含义:这个对象,本对象
作用:区分本对象的成员变量 和 局部变量

this.成员名

public class Student{
    private String name;
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
    	实际参数的局部变量名与成员变量名一致,系统不识别
    	若局部变量名随意起名,无法见名思意,对以后编码不便利
    	所以用this关键字区分成员变量和局部变量
        this.name = name;
    }

}
public class Demo {

    public static void main(String[] args) {
        Student stu = new Student();
        stu.setName("小明");
        
    }
}

构造方法

概念:称之为构造函数,又称为构造器。
作用:用于给对象中的成语变量赋值,在创建对象同时,会自动调用构造方法赋予成员变量初始值。

  • 类中默认都有一个隐式无参构造方法,当自定义有参构造方法后,默认的无参构造方法会消失,若需要无参构造方法,需要重新自定义显式无参构造方法。
public class Student{
    private String name;
    private int age;

	/*Student(){//无参构造方法
	}
	*/
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void show(){
        System.out.println("姓名:"+name+",年龄:"+age);
    }
}
public class Demo {

    public static void main(String[] args) {
        Student stu = new Student("小明",19);
        stu.show();
    }
}

输出结果:
在这里插入图片描述

构造方法 与 setter 方法的区别:

  1. 语法不同:构造方法没有返回值,setter方法有返回值。
  2. 时机不同:构造方法在对象创建的期间进行赋值,setter方法在对象创建后进行赋值。
  3. 调用次数不同:构造方法一个对象只能调用一次。setter方法一个对象能调用多次。
  4. 调用者不同:构造方法调用者是JVM,setter方法的调用者是程序员。

注意点:

  1. 如果没有自定义构造方法,类中会默认给一个无参构造方法(隐式)
  2. 当显式自定义构造方法后,类中的(隐式)无参构造方法会消失。
  3. 当自定义有参构造方法后需要无参构造方法,需显式创建个无参构造方法。
  4. 构造方法能使用方法的重载。
  5. 使用this(参数列表),来使用其他构造方法。
  6. this(参数列表),必须是构造方法的第一行代码。
  7. 构造方法能调用功能方法
  8. 功能方法不能调用构造方法。
class Student{
    String name;
    int age;
    Student(){
        System.out.println("无参构造方法");
    }
    Student(String name){
        this();
        System.out.println("有参构造方法"+name);
    }
    Student(String name,int age){
        System.out.println("有两个有参构造方法"+name+age);
    }
}
public class Demo {
    public static void main(String[] args) {
        Student stu1 = new Student("李白");
        Student stu2 = new Student("李白",18);
    }
}

输出结果:
构造方法调用其他构造方法,调用了功能方法。
this必须在构造方法的第一行

在这里插入图片描述

static关键字:

  • 概述:如果在多个对象中都有一个相同的属性值,那么这个属性值没必要在每个对象中都存储一份,浪费空间,而且维护难度大,一旦需要修改,需要修改所有的对象。
  • 含义:静态的,静态的变量不会随着对象的变化而变化 修饰成员:属性 和 方法。
  • 加载时机:随着类的加载而加载进入方法区,直接在静态区开闭了存储静态变量的内存空间。
  • 静态变量优于对象而存在
  • 静态变量被所有该类所有对象所共享
  • 代码层次:可以使用类名直接调用,不需要使用对象名称,在不创建对象的前提下,仍可以使用这个静态变量。(建议用类名来访问)
class Method{
    static int num = 10;
    public static void show(){
        System.out.println("静态方法直接调用");
    }
}
public class Demo {
    public static void main(String[] args) {
        System.out.println(Method.num);
        Method.show();
    }
}

输出结果:
在这里插入图片描述

静态变量与非静态变量的区别:

  1. 概念上所属不同:
    静态变量属于类,非静态变量属于对象
  2. 存储位置不同:
    静态变量存储在方法区的静态区,非静态变量存储在堆内存中。
  3. 作用范围不同:静态属性作用于该类所有对象,非静态属性作用于该类本对象
  4. 生命周期不同:
    a)静态变量随着类的加载而存在,随着类的回收而消失。
    b)非静态变量随着对象的创建而存在,随着对象的消失而消失。
  5. 访问方式不同:
    a)静态变量可以使用对象访问,又可以通过类名直接访问。
    类名.静态变量名
    类名.静态方法名
    b)非静态变量只能通过对象访问。

注意:
非静态成员可以调用静态成员,静态成员不能调用非静态成员。
原因:
静态成员是随着类的加载而产生的,但非静态成员是随着对象的产生而产生的,当静态成员调用非静态成员时,无法确定非静态成员是否已经存在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值