文章目录
前言
📕各位读者好, 我是小陈, 这是我的个人主页
📗小陈还在持续努力学习编程, 努力通过博客输出所学知识
📘如果本篇对你有帮助, 烦请点赞关注支持一波, 感激不尽
📙 希望我的专栏能够帮助到你:
JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等
Java数据结构: 顺序表, 链表, 堆, 二叉树, 二叉搜索树, 哈希表等
JavaEE初阶: 多线程, 网络编程, TCP/IP协议, HTTP协议, Tomcat, Servlet, Linux, JVM等(正在持续更新)
相信小伙伴们应该都听过一句广为流传的玩笑话🙈:“你还没对象?学Java自己new一个,一个不够就new两个”
我本人也在学习Java之前就被这句话勾起了兴趣🙉,那么本篇就介绍什么是Java里的“对象”
提示:是正在努力进步的小菜鸟一只,如有大佬发现文章欠佳之处欢迎评论区指点~ 废话不多说,直接上干货!
一、初识面向对象
1.什么是面向对象
Java是一门纯面向对象的语言(Object Oriented Program,简称OOP)
在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好✅
看不懂?没关系,有个简单了解即可,会随着Java的学习慢慢深入理解的💪
2.面向对象过程
📌📌📌我们拿洗衣服来举例👇
👉传统的洗衣服方式:
拿盆子—放水—放衣服—放洗衣液—手搓—换水—放洗衣液—手搓—换水—拧干
👉而有了洗衣机的洗衣服方式:
把衣服丢进洗衣机里—放洗衣粉—启动洗衣机
😿传统的方式注重的是洗衣服的过程,少了一个环节可能都不行
而且不同衣服洗的方式,时间长度,拧干方式都不同,处理起来就比较麻烦。如果将来要洗鞋子,那就是另一种放方式
按照该种方式来写代码,将来扩展或者维护起来会比较麻烦
😸有了洗衣机的方式可以理解为有四个对象:人,衣服,洗衣液,洗衣机
用这种方式洗衣服,使用者不需要关心洗衣机的运行方式和工作原理,用户只需要将衣服放进洗衣机,倒入洗衣粉,启动开关即可,通过对象之间的交互来完成,这就是面向对象的方式✅
❗️面向过程和面相对象并不是一门语言,而是解决问题的方法,没有那个好坏之分,都有其专门的应用场景❗️
二、类的定义与使用
面相对象程序设计关注的是对象,而对象是现实生活中的实体,比如:洗衣机
但是洗衣机计算机并不认识🤷,需要开发人员告诉给计算机什么是洗衣机💁
上图的参数就是对洗衣机简单的描述✍️,该过程称为对洗衣机对象( 实体 )进行抽象( 对一个复杂事物的重新认知 )
但是这些简化的抽象结果计算机也不能识别,开发人员可以采用某种面相对象的编程语言来进行描述,比如:Java语言
1.什么是类
Java中,类是用来对一个实体( 对象 )来进行描述的,主要描述该实体( 对象 )具有哪些属性( 外观尺寸等 ),哪些功能( 用来干啥 ),描述完成后计算机就可以识别了
📌📌📌
例如修狗🐶,动物界有那么多🐶,每一个🐶都有自己的各项参数,我们就可以把“狗”当作一个类,这个类中可以有你家的修狗,也可以有我家的修狗,也可以有张三的修狗
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("定时功能");
}
}
⚠️注意事项 :
1️⃣类名注意采用大驼峰定义
2️⃣成员前写法统一为public,后面会详细解释
3️⃣此处写的方法不带 static 关键字. 后面会详细解释
大驼峰:ILoveYou、GoodBye
小驼峰:iLoveYou、goodBye
3.示例
🚗🚗🚗
我们来简单定义一个狗🐶类
class PetDog {
// 成员属性
public String name;//名字
public String color;//颜色
// 成员方法
public void barks() {
System.out.println(name + ": 旺旺旺~~~");
}
public void wag() {
System.out.println(name + ": 摇尾巴~~~");
}
}
🚗🚗🚗
再来简单定义一个学生🙇类
class Student{
// 成员属性
public String name;
public String gender;
public short age;
public double score;
// 成员方法
public void DoClass(){
System.out.println("没想好写啥");
}
public void DoHomework(){
System.out.println("没想好写啥");
}
public void Exam(){
System.out.println("没想好写啥");
}
}
⚠️注意事项:
1️⃣ 一般一个文件当中只定义一个类( 如果有多个类,只能有一个public类 )
2️⃣main方法所在的类一般要使用public修饰
3️⃣public修饰的类必须要和文件名相同
三、类的实例化
1.什么是类的实例化
定义了一个类,就相当于在计算机中定义了一种新的类型,与 int,double 类似,只不过 int 和 double 是 java 语言自带的内置类型
而类是用户自定义了一个❗️新的类型❗️,比如上述的:PetDog 类和 Student 类
有了这些自定义的类型之后,就可以使用这些类来定义实例( 就是所谓的对象 )
👉用类这个类型创建对象的过程,称为类的实例化,在java中采用new🆕关键字,配合类名来实例化对象。
语法格式:
类名 对象名 = new 类名();
📌📌📌
例如:我们把刚刚定义的狗这个类实例化出来(在main方法中)
public static void main(String[] args) {
// 通过new实例化对象
PetDog dog1 = new PetDog();
// 对象 + .(点号)访问成员属性和成员方法
dog1.name = "坦克";
dog1.color = "粉色";
dog1.barks();
dog1.wag();
PetDog dog2 = new PetDog();
dog2.name = "飞猪";
dog2.color = "绿色";
dog2.barks();
dog2.wag();
}
⚠️注意事项
1️⃣new 关键字用于创建一个对象的实例
2️⃣使用对象 + .( 点号)来访问对象中的属性和方法.
3️⃣同一个类可以创建多个实例
2.类和对象的说明
🎯类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员
🎯类是一种自定义的类型,可以用来定义变量
🎯一个类可以实例化出多个对象,实例化出的对象占用实际的物理空间( 堆区 ),存储类成员变量( 成员方法在方法区 )
📌📌📌
举个例子。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间
四、this引用
1.为什么要有this引用
第一种情况
📌我们在刚才的狗这个类中,补充一个 set 成员方法,在 set 方法中给修狗的名字和颜色赋值
⚠️这里就发生了编译报错,因为成员变量和 set 方法中的形参同名
那这两行代码具体是表示谁给谁赋值呢❓
实际上Java里有一个局部变量优先原则,形参 name 和 color 是局部变量,优先使用,所以这两行代码表示形参给形参自己赋值,所以编译错误
方法里的变量叫做局部变量,存储在栈上
而成员变量存储在堆上
第二种情况
📌我们再在狗这个类中,补充一个 show 方法,来展示修狗的名字和颜色
可以看到我们 new 了两个对象,也就是实例化了两个小狗出来,dog1 和 dog2 都调用了 show 这个成员方法
那 show 方法是如何知道是哪个对象调用的自己呢❓🤷🤷🤷
这就需要我们认识一下“ this ”这个关键字
2.什么是this引用
this 引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。
说人话就是: this 引用 表示 当前对象
我们先把需要加上 this 的地方都加上:
⚠️加上this以后:
👉当 dog1 + 点号访问成员变量方法时,this 引用就表示dog1
所以在 set 方法中,把形参传给了 dog1 的成员属性
👉当 dog2 + 点号访问成员变量方法时,this 引用就表示dog2
所以在 set 方法中,把形参传给了 dog2 的成员属性
👉同样,在其他方法中,就是因为this,所以方法才知道是谁调用的自己,并且this.name可以完整的表示当前对象的成员属性
3.this引用的特征
🎯this 的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型❗️❗️❗️
🎯this 只能在"成员方法"中使用
🎯在"成员方法"中,this 只能引用当前对象,不能再引用其他对象
🎯 this 是“成员方法”第一个隐藏的参数❗️,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法的对象的引用传递给该成员方法,this负责来接收
⚠️ 方块圈起来的就是编译器隐藏的 this 参数,但我们自己不需要写,也不建议这样写
五、对象的构造及初始化
1.如何初始化对象
通过前面知识点的学习知道,在Java方法内部定义一个局部变量时,必须要初始化,否则会编译失败。
📌例如:
public static void main(String[] args) {
int a;
System.out.println(a);
}
想要通过编译就需要在使用变量 a 之前对 a 进行初始化
📌如果是对对象初始化:
PetDog dog1 = new PetDog();
dog1.set("坦克", "粉色");
需要调用之前写的set方法才可以将具体的日期设置到对象中
❓那么问题来了:
每次对象创建好后只能调用自定义的set方法进行初始化,比较麻烦,还有其他的初始化方式吗?
下面我们认识一下“ 构造方法 ”
2.构造方法
1.概念
构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,没有返回值,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。
📌例如:
PetDog dog1 = new PetDog();
此时在()中,没有任何参数,实例化dog1这个对象的时候,编译器就调用了一个不带任何参数的构造方法,这是编译器默认提供的
格式为:
public PetDog() {
}
⚠️注意
构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间
所以我们就可以在构造方法中对对象进行初始化:
class PetDog {
// 成员属性
public String name;//名字
public String color;//颜色
public PetDog(String name, String color) {
this.name = name;
this.color = color;
}
...
}
public class Test {
public static void main(String[] args) {
PetDog dog1 = new PetDog("坦克", "粉色");
...
}
}
此时我在PetDoge类中写了带有三个参数的构造方法,那么编译器就不会默认提供不带参数的构造方法了
2.特性
🎯名字必须与类名相同
🎯没有返回值类型,设置为 void 也不行
🎯创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)
🎯构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)
3.默认初始化
上面说到,局部变量在使用之前必须初始化,而类中的成员变量却不需要,即使不初始化,编译器会对成员变量设置初始值:
🎯byte,int,short 设置为0
🎯long 设置为 0L
🎯char 设置为 ‘\u0000’
🎯float 设置为0.0f
🎯double 设置为0.0
🎯boolea 设置为false
🎯引用数据类型设置为null
这些就是默认初始化的值
4.就地初始化
在声明成员变量时,就直接给出了初始值
public class PetDog {
public String name = "坦克";
public String color = "粉色";
}
这种初始化方式相当于给每一个new出来的对象都设置了值,说白了就是把代码“ 写死了 ”
比如你要new一个狗,并不是每一条狗都叫“ 坦克 ”,所以实际上用到的并不多,
总结
以上就是今天要讲的关于【类和对象】的内容,类的定义方式以及对象的实例化,类中的成员变量和成员方法的使用,对象的整个初始化过程这些你掌握了吗❓
多嘴一句,现在你会给自己new一个对象了吗🤭
如果本篇对你有帮助,请点赞收藏支持一下,小手一抖就是对作者莫大的鼓励啦🤪🤪🤪
上山总比下山辛苦
下篇文章见