JavaSE---类和对象(上)

1. 面向对象的初步认知

1.1 什么是面向对象

Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。

面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。

1.2 面向对象与面向过程

1. 传统洗衣服过程

 

传统的方式:注重的是洗衣服的过程,少了一个环节可能都不行。

而且不同衣服洗的方式,时间长度,拧干方式都不同,处理起来就比较麻烦。如果将来要洗鞋子,那就是另一种方式。 按照该种方式来写代码,将来扩展或者维护起来会比较麻烦。

2. 现代洗衣服过程 

以面向对象方式来进行处理,就不关注洗衣服的过程.

具体洗衣机是怎么来洗衣服,如何来甩干的,用户不用去关心,只需要将衣服放进洗衣机,倒入洗衣粉,启动开关即可。通过对象之间的交互来完成的。

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

2. 类定义和使用 

2.1 简单认识类

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

比如:洗衣机,它是一个品牌,在Java中可以将其看成是一个类别。 属性:产品品牌,型号,产品重量,外观尺寸,颜色... 功能:洗衣,烘干、定时....。

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("定时功能");}
}
class PetDog {public String name;//名字public String color;//颜色// 狗的属性public void barks() {System.out.println(name + ": 旺旺旺~~~");}// 狗的行为public void wag() {System.out.println(name + ": 摇尾巴~~~");}
}

采用Java语言将洗衣机类在计算机中定义完成,经过javac编译之后形成.class文件,在JVM的基础上计算机就可以识别了。 

 注意事项

类名注意采用大驼峰定义

成员前写法统一为public。文章后面会详细解释

此处写的方法不带 static关键字。 文章后面会详细解释

一般一个文件当中只定义一个类 ,原因:

                                                         如下图所示

每添加一个类,.java源文件内就会多一个类文件。所以我们一般都是规定一个.java源文件内只定义一个类。 

不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改。原因:

但有一种情况除外: 

3. 类的实例化

3.1 什么是实例化

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

比如上述的:PetDog类和Washmachine类。它们都是类(一种新定义的类型)有了这些自定义的类型之后,就可以使用这些类来定义实例(或者称为对象)。

用类类型创建对象的过程,称为类的实例化。

在java中采用new关键字,配合类名来实例化对象。

类本质上有点类似于c语言的结构体,但是c语言结构体是无法内置函数的,而在java中类里面可以内置方法。

class PetDog {public String name;//名字public String color;//颜色// 狗的属性public void barks() {System.out.println(name + ": 旺旺旺~~~");}// 狗的行为public void wag() {System.out.println(name + ": 摇尾巴~~~");}
}
public class Main{public static void main(String[] args) {PetDog dogh = new PetDog();     //通过new实例化对象dogh.name = "阿黄";dogh.color = "黑黄";dogh.barks();dogh.wag();PetDog dogs = new PetDog();dogs.name = "阿黄";dogs.color = "黑黄";dogs.barks();dogs.wag();}
}
/*
输出结果:
阿黄: 旺旺旺~~~
阿黄: 摇尾巴~~~
赛虎: 旺旺旺~~~
赛虎: 摇尾巴~~~
*/

注意事项

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

以上代码定义了一个日期类,然后main方法中创建了三个对象,并通过Date类中的成员方法对对象进行设置和打印,代码整体逻辑非常简单,没有任何问题。

但是细思之下有以下两个疑问:

1. 形参名不小心与成员变量名相同:

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

 那函数体中到底是谁给谁赋值?成员变量给成员变量?参数给参数?参数给成员变量?成员变量参数?估计自己都搞不清楚了。

解决方法要靠this引用: 

2. 三个对象都在调用setDate和printDate函数,但是这两个函数中没有任何有关对象的说明,setDate和printDate函数如何知道打印的是那个对象的数据呢?

一切都是this引用的功劳

 4.2 什么是this引用

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

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);}
public static void main(String[] args) {Date d = new Date();d.setDay(2020,9,15);d.printDate();
}
}

注意:this引用的是调用成员方法的对象。 

4.3 this引用的特性

1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型。

2. this只能在"成员方法"中使用。

3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象。

4. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收在代码层面来简单演示--->注意:下图右侧中的Date类也是可以通过编译的

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

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

相关文章

如何用R语言ggplot2画高水平期刊散点图

文章目录 前言一、数据集二、ggplot2画图1、全部代码2、细节拆分1)导包2)创建图形对象3)主题设置4)轴设置5)图例设置6)散点颜色7)保存图片 前言 一、数据集 数据下载链接见文章顶部 处理前的数据…

搭建 Tomcat 集群【Nginx 负载均衡】

当我们想要提高后端服务器的并发性能,可以通过分配更多的资源给 Tomcat 服务器,但是这只能提高一部分的性能。因为每台 Tomcat 的服务器是有最大连接数为 200.所以即可拥有无穷无尽的内存,也会因为单台 Tomcat 的原因而无法发挥这些资源的最大…

grpc代理服务的实现(二)

目录 grpc service 的实现grpc服务通过unix域监听请求建立与代理服务的tcp连接请求转发到 unix 上代码地址 grpc service 的实现 假设 grpc service 的服务名是 Bar grpc服务通过unix域监听请求 go svr : grpc.NewServer() messages.RegisterBarServer(svr, bar.New()) reflec…

免杀笔记 ----> 后续更新安排

前一段时间,我疯狂更新了内网,本来想把NTLM-Relay给更上的,但是计划安排不允许了,之后后续再给大家进行深入的内网更新了!! :: 真不是我托更 嘻嘻嘻~~~ 说回正题,接下来…

算法体系-22 第二十二节:暴力递归到动态规划(四)

一 最小距离累加和 1.1 描述 给定一个二维数组matrix,一个人必须从左上角出发,最后到达右下角 沿途只可以向下或者向右走,沿途的数字都累加就是距离累加和 返回最小距离累加和 1.2 分析

把服务器上的镜像传到到公司内部私有harbor上,提高下载速度

一、登录 docker login https://harbor.cqxyy.net/ -u 账号 -p 密码 二、转移镜像 minio 2024.05版 # 指定tag docker tag minio/minio:RELEASE.2024-05-10T01-41-38Z harbor.cqxyy.net/customer-software/minio:RELEASE.2024-05-10T01-41-38Z# 推送镜像 docker push harbo…

陕西印刷平台的元宇宙之旅:打造创意印刷新纪元

在数字化时代的浪潮中,陕西印刷平台不断追求创新与卓越,将目光投向了新兴的元宇宙领域。作为传统印刷业的先行者,陕西印刷平台致力于将先进的元宇宙技术融入传统印刷之中,为品牌和个人提供独一无二的创意印刷解决方案。此刻&#…

学习笔记——交通安全分析04

目录 前言 当天学习笔记整理 交通行为、心理与安全 结束语 前言 #随着上一轮SPSS学习完成之后,本人又开始了新教材《交通安全分析》的学习 #整理过程不易,喜欢UP就点个免费的关注趴 #本期内容接上一期03笔记 #最近感觉有点懒,接受各位…

【AI应用探讨】— GPT-4o模型应用场景

目录 1. 自然语言处理(NLP)任务 文本生成 机器翻译 问答系统 2. 聊天机器人与虚拟助手 智能聊天机器人 虚拟助手与陪伴 3. 内容创作与辅助 创意写作 代码生成 4. 教育辅助 学习工具 5. 客户服务与支持 客户服务聊天机器人 技术支持 6. 研…

GitLab教程(六):通过rebase来合并commit

文章目录 1.理解和操作rebase(1)rebase的逻辑(2)实践演示 2.rebase的优缺点 1.理解和操作rebase (1)rebase的逻辑 Git Rebase的基本逻辑是将一个分支的更改移到另一个分支上,同时看起来好像这…

流批一体计算引擎-9-[Flink]中的数量窗与时间窗

1 数量窗 1.1 数量滚动窗口 0基础学习PyFlink——个数滚动窗口(Tumbling Count Windows) 1.1.1 代码分析 Tumbling Count Windows是指按元素个数计数的滚动窗口。 滚动窗口是指没有元素重叠的窗口。 (1)构造了一个KeyedStream,用于存储word_count_data中的数据。…

英伟达算法岗面试,问的贼专业。。。

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

接口返回的文字段落换行问题

接口返回的文字段落换行问题 解决方案:文本中包含\r\n, 使用v-html显示文本,并给便签添加:white-space: pre-wrap;

【Linux】Linux环境基础开发工具_6

文章目录 四、Linux环境基础开发工具gdb 未完待续 四、Linux环境基础开发工具 gdb 我们已经可以写代码了,也能够执行代码了,但是代码错了该如何调试呢?Linux中可以使用 gdb 工具进行调试。 我们写一个简单的程序: 但是我们尝试…

汇编:宏的使用

汇编语言中的宏是用于定义可重复使用的代码块或指令集合的强大工具。宏通过简化代码编写和提高可读性,使得编写和维护汇编程序更加方便;在 MASM(Microsoft Macro Assembler)中,宏的定义和使用非常常见。以下是对汇编语…

java面试题:springMVC的执行流程

请求到达前端控制器DispatcherServlet,该组件是SpringMVC的核心组件,负责接收所有的请求。 DispatcherServlet根据请求中的URL和HandlerMapping找到对应的Controller对象,HandlerMapping是一个接口,定义了请求的URL和对应的Contro…

【linux网络(三)】HTTP协议详解

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Linux从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学更多操作系统知识   🔝🔝 Linux网络 1. 前言2. 序列化和…

定个小目标之刷LeetCode热题(16)

针对本题排序流程,主要是将链表拆分为长度为subLength的子链表1和子链表2,然后把子链表1和子链表2合并为一条有序链表,重复上述步骤直到把链表都拆分完,这样这条链表每段长度为2的子链表都是有序的,那么要整条链表有序…

学习ZYNQ——HLS

文章目录 前言一、HLS是什么?二、HLS开发流程三、HLS工程创建四、代码编写1.led.h2.led.cpp3.test_led.cpp 五、C仿真与C综合六、联合仿真七、添加ap_int.h八、再次进行C仿真的Cosimulation九、导出IP核的时候出现报错: 前言 本文主要记录自己学习HLS的…

JavaScript-DOM

DOM 全称:DOM(Document Object Model--文档对象类型) 作用:用来操控网页类容的功能,开发网页特效和实现用户交互 DOM 结构 将HTML文档以树形结构表现出来称之为DOM树 获取DOM 语法:document.querySelector(css选择器) 参数&…