类与对象(二)

3.类的实例化

3.1什么是实例化

定义了一个类,就相当于在计算机中定义了一种新的类型,与int,double类似,只不过int,double是Java语言自带的内置类型,而类是用户自定义了一个新的类型,比如上述的PetDog类和Student类。他们都是类(一种新定义的类型)有了这些自定义的类型之后,就可以使用这些类来定义实例(或称为对象)。

用类类型创建对象的过程,称为类的实例化,在Java中采用new关键字,配合类名来实例化对象。

public class Main{
    public static void main(String[] args){
        PetDog dogh = new PetDog(); //通过new实例化对象
        dogh.name = "阿黄";
        dogh.color = "黑黄";
        dogh.barks();
        dogh.wag();

        PetDog dogs = new PetDog();
        dogs.name = "赛虎";
        dogs.color = "棕色";
        dogh.barks();
        dogh.wag();
    }
}

输出结果:
阿黄: 旺旺旺~~~
阿黄: 摇尾巴~~~
赛虎: 旺旺旺~~~
赛虎: 摇尾巴~~~

注意事项:

  • new关键字用于创建一个对象的实例。
  • 使用.来访问对象中的属性和方法。
  • 同一个类可以创建一个实例。

3.2类和对象的说明

  1. 类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员。
  2. 类是一种自定义的类型,可以用来定义变量。
  3. 一个类可以实例化出多个对象,实例化出的对象占用实际的物理空间,储存类成员变量
  4. 做个比方,类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际储存数据,占用物理空间

4.this引用

4.1为什么要有this引用

先看一个日期类的例子:

public class Date{
    public int year;
    public int month;
    public int day;

    public void setDay(int y,int m,int d){
        year = y;
        month = m;
        day = d;
    }

    public void printDate(){
        System.out.println(year+"/"+month+"/"+day);
    }

    public static void main(String[] args){
        //构造三个日期类型的对象 d1 d2 d3
        Date d1 = new Date();
        Date d2 = new Date();
        Date d3 = new Date();

        //对d1,d2,d3的日期设置
        d1.setDay(2020,9,15);
        d2.setDay(2020,9,16);
        d3.setDay(2020,9,17);

        //打印日期的内容
        d1.printDate();
        d2.printDate();
        d3.printDate();
    }
}

以上代码定义了一个日期类,然后main方法中创建了三个对象,并通过Date类中的成员方法对对象进行设置和打 印,代码整体逻辑非常简单,没有任何问题。

但是仔细想有两个疑问:

        1.形参名不小心与成员变量名相同:

public void setDay(int year, int month, int day){
    year = year;
    month = month;
    day = day;
}

那函数体种到底是谁给谁赋值?成员变量给成员变量?参数给参数?成员变量参数?估计会在阅读的时候会有混淆。

2.三个对象都在调用setDate和printDate函数,但是这两个函数中没有任何有关对象的说明,setDate和printDate函数如何知道打印的是哪个对象的数据呢?

4.2什么是this引用

this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该 引用去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

public class Date{
    public int year;
    public int month;
    public int day;
    
    public void setDay(int year, int month, int day){
        this.year = year;
        this.month = month;
        this.day = day;
}

    public void printDay(){
        System.out.println(this.year++ "/" + this.month + "/" + this.day);
    }
}

注意:this引用的是调用成员方法的对象

public static void main(String[] args) {
    Date d = new Date();
    d.setDay(2020,9,15);
    d.printDate();
}

4.3this引用的特性

  1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
  2. this只能在“成员方法”种使用
  3. 在“成员方法”中,this只能引用当前对象,不能再引用其他对象
  4. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值