JavaSE-No.6.1——Java的类和对象

JavaSE传送门

JavaSE_Start

JavaSE-No.4——Java方法的使用

JavaSE-No.5——Java数组的定义与使用



1. 初步认识面向对象

1.1 什么是面向对象

Java是一门纯面向对象的语言(Object Oriented Program,继承OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。

1.2 面向对象与面向过程

我们在洗衣服的时候,整个过程是通过:人,衣服,洗衣机,洗衣粉四个对象交互完成的不需要关心洗衣机怎么洗衣服,我们只需要把衣服和洗衣粉放进洗衣机就可以了。


2. 类的定义和使用

对象是一个实体。由来抽象对象,有了对象,对象之间可以进行交互。

例如: 一个洗衣机,洗衣机有很多参数。左侧就是对洗衣机简单的描述,该过程称为对洗衣机对象(实体)进行抽象(对一个复杂事物的重新认知)

是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥),描述完成后计算机就可以识别了。

2.1 类的定义格式

语法格式

// 创建类
class ClassName{ //class为定义类的关键字 ClassName为类名
    field; // 字段(属性) 或者 成员变量
	method; // 行为 或者 成员方法
}

例如: 定义一个洗衣机类(自定义类型)

class WashMachine{
    public String brand; // 品牌
    public String type; // 型号
    public double weight; // 重量
    public double lenght; // 长
    public double weidth; // 宽
    public double height; // 高
    public String color; // 颜色
    
    public void WashClothes(){ // 洗衣服
        System.out.println("洗衣功能"); 
    }
    public void dryClothes(){ // 脱水 
        System.out.println("脱水功能"); 
    }
    public void SetTime(){ // 定时 
        System.out.println("定时功能");
    } 
}

# 注意事项 #

  • 类名注意采用大驼峰定义(每个单词的首字母都大写
  • 当前成员前写法统一为public此处写的方法不带 static 关键字.
  • 建议一个java文件一个类
  • main方法所在的类一般要使用public修饰(注意:Eclipse默认会在public修饰的类中找main方法)
  • public修饰的类必须要和文件名相同
  • 不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改。

![](https://img-blog.csdnimg.cn/d5fb1a5e7737444b911f780bb190cfad.png


3. 类的实例化

定义了一个类,就相当于在计算机中定义了一种新的类型与int,double类似。只不过是用户自定义的。

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

例如: 我们先来定义一个狗类

class Dog{
    public String name;//名字
    public String color;//颜色 
    // 狗的属性
    public void barks() { 
        System.out.println(name + ": 汪汪汪!!!"); 
    }
    // 狗的行为
    public void wag() { 
        System.out.println(name + ": 摇尾巴~~~"); 
    } 
}

#我们来通过new关键字实例化一个对象

Dog dog = new Dog();

![](https://img-blog.csdnimg.cn/f9ea7f546b79466ca49365463de77645.png

#使用.来访问对象中的属性和方法

System.out.println(dog.name);
System.out.println(dog.color);
dog.barks();
dog.wag();
//运行结果
null
null
null:汪汪汪!!!
null:摇尾巴~~~

dog.name和dog.color是未初始化的成员变量,成员变量未初始化时会有一个默认值。

·赋值

public static void main(String[] args) {
        Dog dog = new Dog();
        dog.name = "修勾";
        dog.color = "白色";
        System.out.println(dog.name);
        System.out.println(dog.color);
        dog.barks();
        dog.wag();
}

运行结果展示

#同一个类可以创建多个实例.

Dog dog = new Dog();
Dog dog1 = new Dog();
Dog dog2 = new Dog();

类和对象的说明

  1. 类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员.

  2. 类是一种自定义的类型,可以用来定义变量.

  3. 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量

  4. 做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在


4. this引用

4.2 为什么要有this引用

我们创建一个日期类

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

    public void setDate(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) {
        Date date = new Date();
        date.setDate(2022, 5, 10);
        date.printDate();
    }
}
//运行结果
2022 5 10

下面我们来思考一个 问题 ,如果我们的形参名不小心和成员变量名相同,运行结果会是什么?

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

4.2 this

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

我们将setDate改为:

public void setDate(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
}

运行结果不再是0 0 0 ,那么这个this代表的是谁呢?

# 注意事项 #

  1. this引用的是调用成员方法的对象
  2. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
  3. this只能在"成员方法"中使用
  4. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象

5. 对象的构造及初始化

5.1 构造方法

概念

构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次

例如: 不带参数的构造方法(Date)

public Date() {
        
}

那我们来思考一个 问题 ,我们之前没有写不带参数的构造方法,编译器为什么没有报错呢?

答: 在我们没有写构造方法的时候,编译器会默认提供一个不带参数的构造方法。

5.2 构造方法的特性

#名字必须与类名相同

#没有返回值类型,设置为void也不行

#创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次

#构造方法可以重载

public class Date {
    public int year;
    public int month;
    public int day;
	//无参数
    public Date() {

    }
    //有参数
    public Date(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public void printDate() {
        System.out.println(year+" "+month+" "+day+" ");
    }

    public static void main(String[] args) {
        Date date = new Date();
        date.printDate();
        System.out.println("============");
        Date date2 = new Date(2022, 5, 10);
        date2.printDate();
    }
}

#如果用户没有显式定义,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的。

注意 如果用户定义(如上有参数的构造方法),编译器不再生成。

//错误写法
public class Date {
    public int year;
    public int month;
    public int day;
	
    //有参数
    public Date(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public void printDate() {
        System.out.println(year+" "+month+" "+day+" ");
    }

    public static void main(String[] args) {
        Date date = new Date();//错误,编译器报错!!!
        date.printDate();  
    }
}

使用idea直接创建构造方法

#构造方法中,可以通过this调用其他构造方法来简化代码

public Date() {
    this(1999, 9, 19);
}
public Date(int year, int month, int day) {
    this.year = year;
    this.month = month;
    this.day = day;
}

# 注意事项 #

  1. this(...)必须是构造方法中第一条语句
  2. 不能形成
this小节

1.this.属性 访问当前对象的属性。

2.this() 调用当前对象的构造方法

  • 必须放到构造方法里面

  • 必须放在构造方法的第一行

  • 调用不能够形成环的调用

3.this.func(); 调用当前对象的方法

5.3 初始化

默认初始化

例如:

Date date = new Date(2022,5,10);

就地初始化

例如:

public class Date {
	public int year = 2022;
	public int month = 5;
	public int day = 10;
	
	public Date(){ 
	}
	public Date(int year, int month, int day) { 
	}
	
	public static void main(String[] args) {
    	Date d1 = new Date(2021,6,9); 
    	Date d2 = new Date(); 
    } 
}

# 注意 # 代码编译完成后,编译器会将所有给成员初始化的这些语句添加到各个构造函数中


🌷(( ◞•̀д•́)◞⚔◟(•̀д•́◟ ))🌷

以上就是今天要讲的内容了,希望对大家有所帮助,如果有问题欢迎评论指出,会积极改正!!下一篇文章会继续讲述Java的类和对象的相关知识,期待大家支持,谢谢~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值