JavaSE - 类和对象

目录

1. 回顾

2. 定义一个类 

2.1 如何定义一个类

2.2 注意事项:

3. 类的实例化(产生对象)

3.1 为什么要进行类的实例化?

3.2 什么是类的实例化?

3.3 如何进行类的实例化?

3.4 实例化对象后,如何访问成员变量和成员方法?

3.5 通过一个例子来详细了解类的实例化:

3.6 零碎知识点

4. this的引用

4.1 先看一下最终的比较好的代码

4.2 为什么要有this引用

4.3 什么是this引用以及this引用的特性

5. 对象的初始化和构造方法

5.1 默认初始化和就地初始化

5.2 构造方法:对对象中的成员进行赋值


1. 回顾

  • 1. 一个Java源文件中,可以有若干各类,但是只能有一个public类,并且public修饰的类名必须和文件名相同
  • 2. 方法必须在类的内部,每一个类中,可以有多个方法,但只能有一个main方法。每一个类中都可以有一个main方法

2. 定义一个类 

类的作用:通过类 去描述一个具体的对象

2.1 如何定义一个类

使用关键字class+类名去定义一个类,类名是大驼峰

{}中是类的成员,一个类必须包含两部分:属性(成员变量)和行为(成员方法),且变量和方法都是小驼峰

成员(成员变量和成员方法)前写法统一为public,且此处的成员方法不带 static 关键字

2.2 注意事项:

1. 一般一个文件当中只定义一个类

2. 每一个类都可以有一个自己的main方法,但只能有一个,main方法的格式为:

public static void main(String[] args){}

3. public修饰的类必须要和文件名相同

4. 类中的成员方法可以直接访问或使用成员变量,即成员变量是可以在成员方法中使用的。

3. 类的实例化(产生对象)

3.1 为什么要进行类的实例化?

定义了一个,就相当于在计算机中定义了一种新的类型。如定义一个狗类,它并不是具体的狗,

它只是一种引用类型,需要对其进行实例化。把图纸变成真正的建筑实体。

3.2 什么是类的实例化?

用引用类型创建对象的过程,称为类的实例化

3.3 如何进行类的实例化?

在Java中采用new关键字配合类名来创建对象。对象:new 类型()  对象是new出来的

3.4 实例化对象后,如何访问成员变量和成员方法?

通过点号(.)来访问,引用.变量、引用.方法    点号:调用的意思 

通过一个类可以实例化无数个对象

3.5 通过一个例子来详细了解类的实例化:

//定义一个Dog类
public class Dog {
    //成员变量
    public String name;
    public String color;
    //成员方法
    public void barks(){
        System.out.println(name + "汪汪叫!");
    }
    public void wag(){
        System.out.println(name + "摇尾巴");
    }
    //main方法
    public static void main(String[] args) {
        //实例化一个Dog对象
        Dog dog = new Dog();
        //点号(.)-》调用的意思
        //1.可以通过 引用.属性来访问属性
        dog.name = "小灰";
        dog.color = "灰色";
        System.out.println(dog.name);
        System.out.println(dog.color);
        //2.可以通过 引用.方法来访问方法
        dog.barks();
        dog.wag();
        //实例化一个dog2对象
        Dog dog2 = new Dog();
        dog2.name = "大黄";
        dog2.color = "黄色";
        System.out.println(dog2.name);
        System.out.println(dog2.color);
        dog2.barks();
        dog2.wag();
    }
}

3.6 零碎知识点

在类内方法外的变量是成员变量,在方法内的变量是局部变量。

局部变量没初始化程序直接报错。

成员变量没初始化,程序可以运行,默认值是对应的初始值。
(引用变量 -> null,byte/short/int/long->0,float->0.0f,double->0.0,char->'/u0000',
boolean->false)

4. this的引用

4.1 先看一下最终的比较好的代码

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

  public void setDate(int year,int month,int day){
      this.year =  year;
      this.month = month;
      this.day = day;
  }
    public void printDate(){
        System.out.println(this.year+" "+this.month+" "+this.day);
    }
    

    public static void main(String[] args) {
        Date date = new Date();
        Date date2 = new Date();

        date.setDate(2022,8,4);
        date2.setDate(2022,8,5);
        
        date.printDate();
        date2.printDate();
    }
}

4.2 为什么要有this引用

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

可能会出现形参自己给自己赋值的现象,根本没赋值到成员变量中

2.若我多实例化几个对象,在main方法中,我可以通过不同的引用知道是setDate和printDate的哪个对象,但站在成员方法的角度上,这两个函数中没有任何有关对象的说明,setDate和 printDate函数如何知道打印的是那个对象的数据呢?

这就有了this。

4.3 什么是this引用以及this引用的特性

this:当前对象的引用,即谁调用这个方法,谁就是this

如:

 这时,date就是this


特性:

1. this只能在"成员方法"中使用,且不包括静态方法。

2. this是“成员方法”的第一个隐藏的参数,不加也会默认有一个this,(红色和蓝色部分都默认会有)但是为了防止形参名不小心与成员变量名相同,最好还是加上(蓝色部分的)this。

3. this有三种使用:this.成员变量 、 this.成员方法  、 this();访问构造方法

5. 对象的初始化和构造方法

5.1 默认初始化和就地初始化

实例化对象这一条语句(如:Student stu = new Student();)在程序层面只是简单的一条语句,在JVM层面需要做好多事情,下面简单介绍下(具体在后面JVM中会详细介绍)

1. 检测对象对应的类是否加载了,如果没有加载则加载

2. 为对象分配内存空间

3. 给对象中包含的成员设置初始值

【所以其实对象空间被申请好之后,对象已经设置好了初始值】

4. 调用构造方法,给对象中各个成员赋值

默认初始化:没给成员变量赋值,此对象的成员变量被默认初始化成初始值

就地初始化:在声明成员变量时,就直接给了值,这就是就地初始化。就地初始化的变量,若后面没有进行修改,那么它默认的输出值就是这个值

5.2 构造方法:对对象中的成员进行赋值

1. 构造方法没有返回值,方法名和类名必须是一样的

2. 实例化对象,一定会调用构造方法。当构造方法调用完成之后,对象才实际上产生了。

构造方法的作用就是对对象中的成员进行赋值,赋值为默认值也是赋值。

若是无参构造方法,会将对象中的成员全部赋值为默认值

若是有参构造方法,会将对象中给了值的成员赋值成给的值没给值的成员就是原来的初始值 

有参构造方法,给了值的成员赋值成给的值,没给值的成员就是原来的初始值。

成员name给值了:hello,成员age没给值。

3. this(...);调用本类当中其它的构造方法,但必须放在构造方法里面,并且必须是第一行,且不能形成环(即不能我调用你,你里面再调用我)

4.若我们没有提供任何的构造方法,编译器会帮我们生成一份默认的无参构造方法

一旦我们提供了任何一个有参构造方法,编译器不再生成无参构造方法若用到,需要我们自己提供

5. 在创建对象时,构造方法由编译器自动调用并且在整个对象的生命周期内只调用一次

6. 构造方法的作用就是对对象中的成员进行赋值,且在调用构造方法之前,对象中的成员已经有了初始值。

7. 构造方法可以重载 

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值