JAVA篇之类和对象

目录

一. 面向对象

1.1 面向对象和面向过程

二. 类的定义和使用

2.1 什么是类

2.2 类的定义格式

 三. 类的实例化

四. this引用 

4.1 this引用的作用

 五. 构造方法

5.1 构造方法重载

5.2 通过this调用其他构造方法

 5.3 默认初始化

结语


一. 面向对象

Java 是一门面向对象的编程语言 (Object Oriented Program ,简称OOP),面向对象编程的核心思想是将数据(属性)和操作数据的方法封装成一个整体,即对象。对象之间通过信息传递来相互协作,从而实现特定的功能。

1.1 面向对象和面向过程

面向过程注重解决问题的步骤和操作,面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

举例说明:将大象装进冰箱

(1) 面向过程

第一步:打开冰箱

第二步:将大象塞进冰箱

第三步:关上冰箱

那么以上三个步骤就是就是把大象塞进冰箱的过程,我们注重这一件事的过程,那么这种解决问题的方法我们就叫做面向过程。

(2) 面向对象

那么此时只有人、大象、冰箱三个对象,将大象装进冰箱的整个过程是:人、大象、冰箱三个对象之间交互完成的,我们不需要关心大象是如何被装进冰箱的,那么这种不关注过程,通过对象之间的交互完成的解决问题的方式我们叫做面向对象。

注意面向过程和面相对象并不是一门语言,而是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。

二. 类的定义和使用

什么是类呢?我们一起来简单认识一下

2.1 什么是类

类就是用来对一个对象进行描述的,主要描述该对象有哪些属性,哪些功能等

例如:学生

属性:年龄、姓名、性别......

行为:上学、吃饭、考试......

 那么我们知道了类的作用,那么该如何定义类呢?

2.2 类的定义格式

在JAVA中定义类的时候需要用到class关键字,语法格式如下:

class ClassName {    //ClassName表示类的名称

        field;       //表示成员变量(属性)

        method;      //表示行为或者成员方法
}

 那么我们来创建一个上述提到的学生类:

public class Student {public String name;//学生姓名public int age ;//学生年龄public int score ;//学生成绩public void eat(){System.out.println("正在吃饭......");}public void exam(){System.out.println("正在考试......");}}

那么一个简单的学生类就创建好了,里面描述了学生的属性和行为。

定义类的注意事项:

1. 类型采用大驼峰定义

2.成员前写法统一为public ,后面会介绍其他的访问修饰限定符

 三. 类的实例化

通过上述描述我们知道 类 只是用来对一个实体进行描述的,通过实例化才能够创造出对象,那么在JAVA中我们该如何实例化出一个对象呢?这时候就要用到new这个关键字来进行实例化

以上述的学生类示范:

​
​
public class Student {public String name;//学生姓名public int age ;//学生年龄public int score ;//学生成绩public void eat(){System.out.println(name+"正在吃饭......");}public void exam(){System.out.println(name+"正在考试......");}public static void main(String[] args) {Student student1=new Student();student1.name="张三";student1.age=10;student1.score=99;student1.eat();student1.exam();}
}​​

 类实例化的注意事项:

1. new 关键字用于创建一个对象的实例 .
2. 使用 . 来访问对象中的属性和方法 .
3. 同一个类可以创建多个实例对象

四. this引用 

接下来我们看看这个日期类的代码和运行结果,让我们带着问题来探索this的用法。

​
​
public class Day {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 printDay(){System.out.println(year + "/" + month + "/" + day);}public static void main(String[] args) {Day d1 = new Day();Day d2 = new Day();Day d3 = new Day();d1.setDay(2020,9,15);d2.setDay(2020,9,16);d3.setDay(2020,9,17);d1.printDay();d2.printDay();d3.printDay();}
}​​

 通过运行结果可以看见,我们明明利用setDay方法d1、d2、d3都进行的赋值,那么打印出来的结果为什么还是0/0/0呢?

第一个问题:形参名与成员变量名相同时,形参究竟是给成员变量赋值呢还是形参自己对自己赋值呢?

第二个问题:此时我们的d1、d2、d3都在调用printDay方法,该方法是如何知道打印的是哪个对象的数据呢?

那么带着这两个问题,我们一起来探索一下this的用法。

4.1 this引用的作用

this 引用指向当前对象 ( 成员方法运行时调用该成员方法的对象),那么我们来看一下this是怎么解决上述问题的:
问题一:
public void setDay(int year, int month, int day){this.year = year;this.month = month;this.day = day;}

通过运行结果可以看见此时的结果是正确的,这是因为之前的代码中没有加上this引用,那时的赋值操作是 形参自己对自己进行赋值,成员变量的值还是默认值。而此时我们加上了this引用,那么此时带this引用的year、month、day就是当前类的成员变量, 此时的赋值操作就是形参对成员变量进行赋值。
问题二:
public void printDay(){System.out.println(this.year + "/" + this.month + "/" + this.day);}

 printDay方法通过this引用就能够知道打印的是当前对象的数据。

 总结:
        1. 当形参名和成员变量名字相同时,通过this引用表示该变量是当前类的成员变量

        2. this是成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收。

 五. 构造方法

构造方法是一个特殊的成员方法,方法名必须与类名相同,构造方法可以直接给成员变量进行初始化

public class Day {public int year;public int month;public int day;public Day(int year,int month,int day){this.year=year;this.month=month;this.day=day;}public void printDay(){System.out.println(year + "/" + month + "/" +day);}public static void main(String[] args) {Day d1=new Day(2024,10,10);d1.printDay();}
}

 注意事项:

1. 名字必须与类名相同
2. 没有返回值类型,设置为 void 也不行
3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次
4. 如果不写构造方法,编译器会主动添加一个不带参数的构造方法
public class Day {public int year;public int month;public int day;public Day(){......}public void printDay(){System.out.println(year + "/" + month + "/" +day);}
}

 那么如果我们自己写了一个构造方法,那么编译器就不会自动生成构造方法,正所谓救急不救穷。

5.1 构造方法重载

我们可以定义多个不同参数的构造方法,这样就实现了构造方法的重载,方便用于多种情况

public class Day {public int year;public int month;public int day;public Day(){}public Day(int year,int month,int day){this.year=year;this.month=month;this.day=day;}public void printDay(){System.out.println(year + "/" + month + "/" +day);}
}

5.2 通过this调用其他构造方法

. 构造方法中,可以通过 this 调用其他构造方法来简化代码
public class Day {public int year;public int month;public int day;public Day(){this(2020,10,31);}public Day(int year,int month,int day){this.year=year;this.month=month;this.day=day;}public void printDay(){System.out.println(year + "/" + month + "/" +day);}public static void main(String[] args) {Day d1=new Day();d1.printDay();}
}

注意事项:

1. this(...)必须是构造方法中第一条语句

2. 构造方法之间不能互相调用形成环

 5.3 默认初始化

在使用局部变量之前是必须进行初始化的,否则会进行报错。但是使用成员变量时,可以不进行初始化,当我们实例化一个对象后,对象空间被申请好之后,对象中包含的成员其实已经设置好了初始值。

结语

以上就是部分类和对象的内容,希望大家看完本篇后能够理解类和对象的概念,在此小新感谢大家的观看!!!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/457786.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面向对象与设计模式第二节:设计模式实战

第三章:面向对象与设计模式 第二节:设计模式实战 设计模式是软件工程中的一项重要实践,它为解决常见的设计问题提供了经过验证的解决方案。本课将深入探讨几种常见的设计模式,并通过实际案例分析其在项目中的应用。 1. 每种设计…

JavaEE初阶---文件IO总结

文章目录 1.文件初识2.java针对于文件的操作2.1文件系统的操作---file类2.2文件内容的操作---流对象的分类2.4字符流的操作》文本文件2.4.1异常的说明2.4.2第一种文件内容的读取方式2.4.3第二种读取方式2.4.4close的方法的介绍2.4.5close的使用优化操作2.4.6内容的写入 2.3字节…

无需依赖闭源模型!司南CompassJudger为AI评测带来新选择

前沿科技速递🚀 近期,司南OpenCompass团队发布了一款开源的全能评价模型——CompassJudger。这是全球首个全能开源的 All-in-one Judge Model,不仅支持主流的双向对比(pair-wise)和单向评分(point-wise&…

软件工程--需求分析与用例模型

面向对象分析(ObjectOrientedAnalysis,简称OOA) 分析和理解问题域,找出描述问题域所需的类和对象,分析它们的内部构成和外部关系,建立独立于实现的OOA模型,暂时忽略与系统实现有关的问题。 主要使用UML中的以下几种图…

全球知名度最高的华人起名大师颜廷利:世界顶级思想哲学教育家

全国给孩子起名最好的大师颜廷利教授在其最新的哲学探索中,提出了《升命学说》这一前沿理论观点,该理论不仅深刻地回应了古今中外众多哲学流派和思想体系的精髓,还巧妙地融合了实用主义、理想主义以及经验主义的核心理念。通过这一独特的视角…

我准备写一份Stable Diffusion入门指南-part1

我准备写个SD自学指南,当然也是第一次写,可能有点凌乱,后续我会持续更新不断优化,我是生产队的驴,欢迎监督。 Stable Diffusion WebUI 入门指南 Stable Diffusion WebUI 是一款基于 Stable Diffusion 模型的用户界面…

力扣 中等 740.删除并获得点数

文章目录 题目介绍题解 题目介绍 题解 由题意可知,在选择了数组中元素 a 后,该元素以及所有等于 a−1 和 a1 的元素都会从数组中删去,并获得 a 的点数。若还有多个值为 a的元素,由于所有等于 a−1 或 a1 的元素已经被删除&#x…

三种材料的金相图及金相图解析材料

3. 二.不同温度下三种材料(铸铁,铝,低碳钢)的低温脆性,相关材料,文献引用 三.三种材料在汽车制造中可能的应用 (如捷豹用铝合金降低车身重量).三种材料哪个材…

Linux: Shell编程入门

Shell 编程入门 1 ) Shell 概念 shell 是 在英语中 壳, 外壳的意思可以把它想象成嵌入在linux这样的操作系统里面的一个微型的编程语言不像C语言, C 或 Java 等编程语言那么完整,它可以帮我们完成很多自动化任务例如保存数据监测系统的负载等等,我们同样…

AI博士人手10篇顶会,遭质疑。。。

B站:啥都会一点的研究生公众号:啥都会一点的研究生 AI科技圈又发生了啥新鲜事? “稚晖君”灵犀X1全球开源,推动人形机器人技术共享 智元机器人宣布其人形机器人灵犀X1正式面向全球开源,提供了超过1.2GB的软硬件全套…

【LeetCode】11.盛最多水的容器

思路: 利用双指针法进行移动,一个在头一个在尾,此时宽度最宽,当宽度缩小时,高度发生变化,从而可以找到最大值。 代码: int maxArea(int* height, int heightSize) {int* left height;int* …

android——渐变色

1、xml的方式实现渐变色 效果图&#xff1a; xml的代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools…

Java常见数据结构

数组 数组的特性存储空间是连续的长度是不可变的只能存储 相同的类型(不严谨)可以通过下标访问数组的内容 a[10] 复杂度是O1每个元素的默认是为零值 0 null false -> 一个对象的基本的数据域的初始化也是这样的 Student 类中的username属性 默认值 链表 查找麻烦 插入和删…

logback日志导入使用

1导入配置 <!-- 日志 &#xff0c; 会自动传递slf4j门面--> <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version> </dependency>2 引入配置 Logback要求…

开源实时数仓的构建

设计计思路 基本思路 开源数据平台的设计思路是通过 Flink SQL Batch、StartRocks SQL 、StartRocks物化视图 的能力实现一个离线任务的开发&#xff1b;使用 DolphinScheduler 进行离线工作流编排和调度&#xff1b;通过 Flink CDC 和 Flink SQL 实现流处理能力&#xff0c;进…

HarmonyOS 相对布局(RelativeContainer)

1. HarmonyOS 相对布局&#xff08;RelativeContainer&#xff09; 文档中心:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-layout-development-relative-layout-V5   RelativeContainer为采用相对布局的容器&#xff0c;支持容器内部的子元素设…

【C++】—— 模板进阶

【C】—— 模板进阶 1 非类型模板参数1.1 什么是非类型模板参数1.2 非类型模板参数对比宏的优势1.3 array 简单了解 2 模板的特化2.1 引子2.2 函数模板特化2.3 函数模板特化的坑2.4 类模板的特化2.4.1 全特化2.4.2 偏特化&#xff08;半特化&#xff09;2.4.3 选择2.4.4 偏特化…

英伟达GPU算力【自用】

GPU&#xff08;图形处理单元&#xff09;算力的提升是驱动当代科技革命的核心力量之一&#xff0c;尤其在人工智能、深度学习、科学计算和超级计算机领域展现出了前所未有的影响力。2024年的GPU技术发展&#xff0c;不仅体现在游戏和图形处理的传统优势上&#xff0c;更在跨行…

unity项目导出安卓工程后,在AndroidStudio打包报错:unityLibrary:BuildIl2CppTask‘.

下面这个是我在unity开发者社区提问后&#xff0c;他们回答得&#xff1a; 解决方案&#xff1a;我这边按照这几个方案检查了下&#xff0c;NDK和JDK都没问题&#xff0c;最后重启电脑才解决的&#xff0c;应该是文件被锁定了&#xff0c;我用的windows系统的。 验证&#xff…

书生第四期作业:L0G1000 任务作业

永不止步&#xff0c;空杯心态&#xff0c;从零开始&#xff0c;复习一下&#xff0c;争取完成全部任务 SSH登录 PowerShell命令行登录成功 VScode SSH登录成功 进入root文件夹 闯关任务&#xff1a;映射运行hello_world.py 可选任务1&#xff1a;linux命令行基本命令过一边 …