Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【JAVASE】Java 类与对象的奥秘:深入探索编程的基石

【JAVASE】Java 类与对象的奥秘:深入探索编程的基石

作者头像
小舒不服输
发布于 2024-01-30 05:43:45
发布于 2024-01-30 05:43:45
13100
代码可运行
举报
文章被收录于专栏:编程乐园·编程乐园·
运行总次数:0
代码可运行

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

1、🎡了解面向对象

🎄1.1 什么是面向对象

面向对象就是依靠对象之间的交互完成一件事情

这话一说,大家是不是很懵,没关系,我来举个简单的小例子,让我们更加容易理解吧!

我们在家做面条的时候,我们有两种选择 (1)直接拿出面粉->加水->揉成面团->等待发酵->搓成一根根的面条->烧开水->把面条放进锅中->放入盐…等调味料 (2)去楼下超市买好现成的面条和调味包->烧开水->放入面条和调味包

大家有明显感受到上述的区别吗? 相比于第一种选择,第二种我们所需要面向的只有“面条”,“调味包”,“开水”,这几个对象就好,省去了中间繁琐的过程步骤。 其实,第一种选择是面向过程的,第二种选择是面向对象的。 我们可以明显的感受到面向对象的好处,直接明了,不用管面条是如何做成的,也不用操心调料包是如何配置的,省去了中间繁琐的步骤。

🎡2、类

🎄2.1 什么是类?

类是用来对一个实体(对象)来进行描述的 也举个例子来说说:

有一天,小花无所事事的走在路上,偶然遇到一只喵学长,觉得非常可爱,忍不住多看两眼,回到寝室后,迫不及待的想给室友们分享,小花说喵学长的眼睛是琥珀色的,毛是棕色,黑色,白色混合相间的颜色,看见小花时,摇起了尾巴,发出喵喵的叫声~~

小花所描述的喵学长的特征属性,行为组合起来就是一个类,是描述喵学长这个“对象”的类

🎄2.2 定义类
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 创建类
class ClassName{
	field; // 字段(属性) 或者 成员变量
	method; // 行为 或者 成员方法
}

还是举个例子吧:(就把上述的喵学长类,具体实现出来吧)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Cat {
	// 喵学长的属性
	public String name;//名字
	public String color;//颜色
	
	// 喵学长的行为
	public void barks() {
		System.out.println(name + ": 喵喵喵~~~");
	} 
	public void tail() {
		System.out.println(name + ": 摇尾巴~~~");
	}
}

如此如此,这般这般,便定义好了一个类,简单吧

🎡3、对象

🎄3.1 实例化一个对象

什么是实例化呢? 定义了一个类,就相当于在计算机中定义了一种新的类型,用类类型创建对象的过程,称为类的实例化。 也就是如下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Main{
	public static void main(String[] args) {
		Cat cat = new Cat();//通过new实例化对象
		cat.name = "小黄";
		cat.color = "黄色";
		cat.barks();
		cat.tail();
	}
}

上述操作便实例化出“小黄”这个具体的喵学长“对象”。

🎡3、类和对象的说明

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

🎡4、this引用

🎄4.1 什么是this

this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过this引用去访问。(这么只是简单介绍一下this的概念,详细操作请看下文)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Date {
	public int year;
	public int month;
	public int day;
	public void setDay(int year, int month, int day){
		year = year;
		month = month;
		day = day;
		public void printDate(){
        System.out.println(year + "-" + month + "-" + day);
    }
    public static void main(String[] args) {
        Date d = new Date(2023,11,9); 
        d.printDate();
    }
}

上述代码中,形参名不小心与成员变量名相同,在setDay方法中给year赋year值,给month赋month值,给day赋day值,到底是哪个赋值给哪个,此时编译器看不懂,更别说我们了,我们来看看运行结果吧

🤣哈哈哈,果然懵了 此时就要用到this 引用了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 printDate(){
	System.out.println(this.year + "/" + this.month + "/" + this.day);
	}
}

此时便能成功显示出来了 那是因为此时this指向的是当前调佣this的对象

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

🌟 this 有三种用法: (1)this.成员变量 :访问成员变量 (2)this.func 也就是 this.成员方法 : 访问成员方法 (3)this() :访问当前类的构造方法(下文有详细说明)

🎄4.2 给对象初始化

在这里给大家介绍三种给成员变量初始化的方法:

(1)默认初始化(也就是啥也不干)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class A {
	int a;
	double b;
	String c;
	boolean d;
}

这时编译器默认给赋好了初始值,具体是多少,看看下面这张表就一目了然;

数据类型

默认值

byte

0

char

‘\u0000’(不可显示的符号)

short

0

int

0

long

0L

boolean

false

float

0.0f

double

0.0

reference(引用类型)

null

(2)就地初始化(在声明成员变量时,就直接给出了初始值)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class A {
	int a = 1;
	double b = 2.5;
	String c = "abc";
	boolean d = true;
}

此处就不再过多介绍了,还是比较简单的,相信一看就能懂😊

(3)🌟构造方法初始化(很重要)

🤕此时大家肯定很懵,构造方法是什么?脑袋里出现一连串的问号,莫慌,这就给大家介绍一下构造方法。

🎉构造方法

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Date {
	public int year;
	public int month;
	public int day;
	// 构造方法:
	// 名字与类名相同,没有返回值类型,设置为void也不行
	// 一般情况下使用public修饰
	// 在创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次
	public Date(int year, int month, int day){
		this.year = year;
		this.month = month;
		this.day = day;
		System.out.println("Date(int,int,int)方法被调用了");
	}
	public void printDate(){
		System.out.println(year + "-" + month + "-" + day);
	}
	public static void main(String[] args) {
	// 此处创建了一个Date类型的对象,并没有显式调用构造方法
	Date d = new Date(2023,11,9); // 输出Date(int,int,int)方法被调用了
	d.printDate(); 
	}
}

运行结果:

🥳观察上面的代码,我们可以总结出构造方法的一些特点: 1、构造方法是一种特殊的方法,方法名和类名相同,并且没有返回值(设置成void 也不行 ) 2、对象的初始化时,一定会调用构造方法 3、构造方法至少要有一个,当我们没有写任何构造方法时,编译器会提供一个不带参数的构造方法(注意:一旦我们写了构造方法,哪怕是没写不带参数的构造方法,编译器也不会提供不带参数的构造方法了) 4、创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次) 5、构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Date {
	public int year;
	public int month;
	public int day;
	// 无参构造方法--内部给各个成员赋值初始值,该部分功能与三个参数的构造方法重复
	// 此处可以在无参构造方法中通过this调用带有三个参数的构造方法
	// 但是this(1900,1,1);必须是构造方法中第一条语句
	public Date(){
		//System.out.println(year); 注释取消掉,编译会失败
		this(1900, 1, 1);
} 

// 带有三个参数的构造方法
public Date(int year, int month, int day) {
	this.year = year;
	this.month = month;
	this.day = day;
	}
}

🌟注意: 1、this(…)必须是构造方法中第一条语句 2、不能形成环

🥳OK,今日分享就到这里了,小编是新手,上述可能有错误的地方,还请见谅,指出后,一定虚心接受,及时改正✌️

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Java】类和对象详解!!!
1.从上面代码中,我们可以发现,在定义成员方法时,有一个成员的方法的形参和实参是一样的
喜欢做梦
2024/11/25
1.2K0
【Java】类和对象详解!!!
【Javase-9.类和对象】
java是一门纯面向对象的语言,在面向对象的世界里,一切皆为对象.面向对象是解决问题的一种思想,主要依靠对象之间的交互来完成一件事.
用户11369350
2024/11/19
620
【Javase-9.类和对象】
【Java】类和对象
Java是⼀⻔纯⾯向对象的语⾔(Object Oriented Program,简称OOP),在⾯向对象的世界⾥,⼀切皆为对象。⾯向对象是解决问题的⼀种思想,主要依靠对象之间的交互完成⼀件事情。⽤⾯向对象的思想来设计程序,更符合⼈们对事物的认知,对于⼤型程序的设计、扩展以及维护都⾮常友好。
User_芊芊君子
2025/04/08
480
【Java】类和对象
知识改变命运 第八集(上):Java中的类和对象
Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面 向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人 们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好
用户11319080
2024/10/17
1270
知识改变命运 第八集(上):Java中的类和对象
Java中的类和对象
在Java中,类近似于C语言中的结构体,类是用来对一个实体(对象)来进行描述的,如下:
AUGENSTERN_
2024/04/09
1820
Java中的类和对象
【Java篇】无形至有形,法与道的编织:类与对象初探
面向过程强调程序的执行流程,注重将问题拆解成一系列的操作步骤,每一步骤都必须严格按顺序执行。例如,传统的洗衣服过程要求依次完成浸泡、搓洗、漂洗、甩干等操作,任何一步出错都可能导致整体流程无法正常进行。
半截诗
2025/03/18
600
【Java篇】无形至有形,法与道的编织:类与对象初探
【JavaSE】Java入门四(面向对象 1——四千五百字详解)
面向对象有三大特征:封装,继承,多态。Java就是依靠类和对象来依次实现这三大特征的 ,我会在接下来的文章中详细介绍这三大特征。
小皮侠
2024/04/08
2740
【JavaSE】Java入门四(面向对象 1——四千五百字详解)
类和对象(1)
主要用代码描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥),描述完成计算机就可以识别类其中的代码从而描述对象。
E绵绵
2024/04/08
790
类和对象(1)
【Java探索之旅】this 关键字 解决你的成员变量困惑
观看上方的代码,定义了一个日期类,然后main方法中创建了三个对象,并通过Date类中的成员方法对对象进行设置和打印,代码整体逻辑非常简单,没有任何问题。
屿小夏
2024/04/25
1210
【Java探索之旅】this 关键字 解决你的成员变量困惑
Java面向对像编程OOP
由于Java中基本数据类型无法直接进行交换,所以我们可以通过引用数据类型进行数据交换
ImAileen
2024/12/06
820
Java面向对像编程OOP
【Java探索之旅】解密构造方法 对象初始化的关键一步
在Java方法内部定义一个局部变量时,必须要初始化,否则会编译失败。对于对象的成员在默认的情况下是有初始值的,但是如果要给对象中的成员变量赋值,就要调用创建好的方法然后传值。想要给成员变量赋值这样就显得很麻烦,有没有在实例化对象的时候就可以直接对对象赋值呢?答案是有的。
屿小夏
2024/04/25
1190
【Java探索之旅】解密构造方法 对象初始化的关键一步
《JavaSE-第七章》之抽象的类-实例的对象-合理的封装
之前我们所写的代码几乎都是在main方法里面,我们也操作了一些对象如String,Math等。但是将大量的代码写入main里面不是面向对象编程的做法,接下来我们将脱离面向过程,走向面向对象,慢慢的培养自己设计对象的能力,慢慢的感受对象是如何让我们的生活过的丰富多彩。本篇会重点讲解面向对象与面向过程的区别以及面向对象三大特征之封装等知识。
用户10517932
2023/10/07
2210
《JavaSE-第七章》之抽象的类-实例的对象-合理的封装
Java---对象与类的封装
一、类和对象: package cn.hncu.Myclasslearn; /** * * @author hncu_chx * * Mylove amin */ /**类是一种数据类型,声明一个类就是定义了一个数据类型。 类的实例(instance)是类的取值,对象就是类的变量,一个对象能引用一个实例, 就像一个int变量i能够保存int类型的一个常数。 声明对象: 类 对象 MyDate d1;//声明d1是MyDate类的一个对象 **/ publ
谙忆
2021/01/20
5300
Java---对象与类的封装
Java继承、final/protected说明、super/this辨析
上面的这个animal就是基类,我们的这个dog和bird都是继承这个基类的特征,使用的是extends这个关键字,表示我们的子类继承父类,父类的这个成员变量和成员方法我们子类都会拥有的;
阑梦清川
2025/02/24
900
Java继承、final/protected说明、super/this辨析
【Java SE】类和对象(上)
用户11369558
2024/11/20
1020
【Java SE】类和对象(上)
Java 零基础入门学习(小白也能看懂!)
不仅如此,Java还是一个有一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于嵌入式系统、移动终端、企业服务器、大型机等各种场合。
爱敲代码的小杨.
2024/05/07
3240
Java 零基础入门学习(小白也能看懂!)
C++初阶类与对象(一):学习类与对象、访问限定符、封装、this指针
C语言典型的面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题
是Nero哦
2024/01/18
1630
C++初阶类与对象(一):学习类与对象、访问限定符、封装、this指针
Java学习笔记_零基础系列(十三)Java中的this关键字
this是java语言中的一个关键字,它存储在内存的什么地方呢,一起来看一段程序:
牛仔码农
2021/08/09
3650
【C++ 初阶路】--- 类与对象(上)
C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题,
用户11029269
2024/06/15
1120
【C++ 初阶路】--- 类与对象(上)
Python面向对象编程
面向对象最重要的概念就是类(Class)和实例(Instance),Java比较熟了,下面贴代码注释
听着music睡
2018/10/25
4510
相关推荐
【Java】类和对象详解!!!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验