【Java】类和对象

1、面向对象的初步认知

1.1 什么是面向对象

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

1.2面向对象和面向过程

面向过程:迄今为止,从C语言开始,我们所写的代码都是面向过程程序设计,他的重点是过程,就例如洗衣服,用手洗衣服,注重的是洗衣服的过程,如果你换一个比如洗鞋子,那么就会有不同的清洗方式,就是另一种代码形式,维护和调整起来就会特别麻烦
面向对象:面向对象程序设计,重点是对象,就例如如何把大象放进冰箱?首先,打开冰箱门,其次把大象装进去,最后关闭冰箱门即可,但是我们并没有考虑大象能否放进冰箱,我们只关注里面所涉及的对象

2、类的定义和使用

2.1什么是类,什么是对象

  • 类:类是用来对一个实体(对象)来进行描述的,用通俗的语言来讲,他是一个描述,就比如:人类,我么就知道人类的一些基本特征,两个眼睛、一张嘴、一个鼻子、两张耳朵…他并不是一个真实存在的个体。
  • 对象:对象很简单,他就是一个真实存在的个体

2.2类的定义格式

在java中定义类时需要用到class关键字,具体语法如下

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

class为定义类的关键字,ClassName为类的名字,{}中为类的主体。
类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类具有哪些功能,称为类的成员方法

class WashMachine{
	public String brand; // 品牌
	public String type; // 型号
	public double weight; // 重量
	public double length; // 长
	public double width; // 宽
	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 关键字. 后面会详细解释

2.3定义一个学生类

public class Student{
	public String name;
	public String gender;
	public short age;
	public double score;
	
	public void DoClass(){}
	public void DoHomework(){}
	public void Exam(){}
}

注意事项:

  1. 一般一个文件当中只定义一个类
  2. main方法所在的类一般要使用public修饰
  3. public修饰的类必须要和文件名相同
  4. 不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改(如下图)
    在这里插入图片描述

3.类的实例化

3.1什么是实例化

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

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

class WashMachine{
	public String brand; // 品牌
	public String type; // 型号
	public double weight; // 重量
	public double length; // 长
	public double width; // 宽
	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 void main(String[] args){
		WashMachine washmachine = new WashMachine();// 实例化对象/产生一个对象
	}
}

为什么通过关键字new就能产生一个对象呢?这个对象在底层又是怎么存储的呢?
在这里插入图片描述
我们每通过new关键字,都可以快速实例化一个对象,这个对象的地址就保存在对象名当中,就例如washmachine1和washmachine2当中,对象名存放在栈区,分别保存,真正new出来的成员变量是存放在堆区
注意事项

  • 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();
	}
}

我们知道上面创建了多个对象,但是每一次的调用,Java是怎么知道这次调用的对象是谁呢?
在这里插入图片描述
并且,按照我们平时的编程习惯,setData里面的形参我们一般都会用对应的英文例如:(int year,int month,int day)而不是一些简陋的字母,十分影响可读性,但是当我们改成英文字母之后程序就会有异常,在Java语法里面对于形参都是优先使用的(就近原则),所以左边是形参,右边也是形参,这就无法给本对象的成员变量赋值,我们要让等号左边是成员变量才行,综上,为了解决以上问题,我么就推出了this关键字
在这里插入图片描述
this.成员变量:就能表示当前对象的成员变量,所以左边是当前对象的成员变量,右边是形参,就可以给本次对象的成员变量,赋值。如果你是data1来调用setData构造方法那么this就表示data1的地址,如果你是data2来调用setData构造方法,this就表示data2的地址。
在这里插入图片描述
其实没有用static修饰的成员方法都隐藏了一个this形参,你可以写也可以不写,这是编译器自己隐藏的,
在这里插入图片描述

4.2this引用的特性

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

在这里插入图片描述

5对象的构造及初始化

5.1如何初始化对象

通过前面知识点的学习知道,在Java方法内部定义一个局部变量时,必须要初始化,否则会编译失败。

public static void main(String[] args) {
	int a;
	System.out.println(a);
}
// Error:(26, 28) java: 可能尚未初始化变量a

但是,在类当中,成员变量没有初始化是不会报错的,Java是会帮你完成对应的初始化的
在这里插入图片描述
那么,我们怎么去手动给我们对象去进行初始化呢?
我们可以通过 对象名.成员变量 来进行初始化(前提是成员变量必须是public修饰,后面会讲解原因)

class WashMachine{
	public String brand; // 品牌
	public String type; // 型号
	public double weight; // 重量
	public double length; // 长
	public double width; // 宽
	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 void main(String[] args){
		WashMachine washmachine = new WashMachine();// 实例化对象/产生一个对象
		washmachine.brand = "美的";//初始化成员变量
		washmachine.color = "白色";//初始化成员变量
	}
}

其次 我们也可以用构造方法来进行初始化

5.2构造方法

5.2.1概念

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

我们来看下面的例子

class WashMachine{
	public String brand; // 品牌
	public String type; // 型号
	public String color; // 颜色
	
	public WashMachine(){
		//无参构造方法
	}
	public WashMachine(String brand,String type,String color){
		//有参构造方法
		this.brand = brand;
		this.type = type;
		this.color = color;
	}
	
	public void washClothes(){ // 洗衣服
	System.out.println("洗衣功能");
	}
	public void dryClothes(){ // 脱水
		System.out.println("脱水功能");
	}
	public void setTime(){ // 定时
		System.out.println("定时功能");
	}
	public static void main(String[] args){
		WashMachine washmachine = new WashMachine();// 实例化对象/产生一个对象
		washmachine.brand = "美的";//初始化成员变量
		washmachine.color = "白色";//初始化成员变量
	}
}

5.2.2特性

  1. 名字必须与类名相同
  2. 没有返回值类型,设置为void也不行
  3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)
  4. 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)

构造方法分为:有参构造和无参构造,当我们去new WashMachine()的时候,其实就是调用了无参构造方法,但是我们之前,并没有写无参构造方法呀,为什么一样能行呢?这是因为Java帮我们写过了无参构造方法,只是隐藏了而已如果你需要有参构造方法,那么你写上去之后,Java就会把他之前的无参构造方法移除,这个时候你的new WashMachine()就会报错!你就必须按照你自己写的有参构造方法去创建对象,例如:**new WashMachine(“美的”,“JPO841”,“白色”);**所以我们一般有参和无参都写上去。
在这里插入图片描述
在这里插入图片描述
构造方法中,可以通过this调用其他构造方法来简化代码
前面我们知道this关键字可以用来表示对象的地址(对象的身份),在构造方法里面,也可以用this来实现其他构造方法的调用
在这里插入图片描述
但是这个用法,this()必须写在方法的第一行,否则就会报错
在这里插入图片描述
到这里,类和对象的基本语法就讲完了,但是,类和对象远不止于此,我们知道,面向对象程序设计的三大特点:封装、继承、多态,我们都还没有涉及到,后面的文章也会逐步涉及,希望大家多多关注,批评指正!

  • 16
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值