Java类和对象、自定义包、static、代码块、方法重写

目录

1.类和对象

2.this指针

3.对象的构造和初始化

3.1默认初始化

3.2就地初始化

3.3构造初始化

3.4IDEA快速填充

3.5使用this简化

3.6初始化的总结

4.包的引入

4.1包的概念

4.2导入包中的类

4.3自定义包

5.static修饰

6.代码块的划分

7.方法重写


1.类和对象

使用对象的引用加上点号就可以对于这个属性进行访问;

我们首先是需要定义一个类,这个对象实际上就是类的实例化,我们可以把这个类理解为我们的建筑图纸,对象就是依据这个图纸建设出来的高楼大厦,对于这个类里面的成员变量和成员函数,我们的这个实例化的对象里面都是有的;就如同我们的这个图纸里面有的内容,我们的这个高楼大厦里面也是包含的,因为我们的这个高楼大厦就是依据这个图纸建设的啊;

我们对象加上点就表示这个对象的这个属性值,new就是进行类的实例化的过程,一个类是可以实例化多个对象的,每一个对象,包含相同的属性和方法;

2.this指针

我们的这个this指针是怎么引出来的呢,就是我们的这个形参的名字和我们的成员变量的名字是一样的时候,我们的this指针就指向当前的这个对象,我们的下面的这个是一个日期的类;

this.yaer表示的就是这个对象的year成员变量,year就是这个里面的传递过来的形参,这个就可以区分我们的形参和成员变量;

当然,如果我们的形参和成员变量的名字不一样的时候,我们这个时候是很容易进行区分的,因此这个时候我们就可以不写这个this指针,而且实际情况下,我们大部分情况下都不会写这个this指针,因为一般我们的形参和成员变量不会一样,当然即使是我们不写,这个this指针也是存在的;

3.对象的构造和初始化

3.1默认初始化

这个就是直接来一个和我们的类名字一样的函数,就是构造函数,这个可以显示的写出来,也可以不写,但是即使我们不写出来,创建对象的时候这个构造函数也是会被调用的;

这个时候我们的int就会被默认初始化为0,bollean类型的数据会被默认初始化为false,这个都是默认的操作,如果我们不进行任何的干预;

3.2就地初始化

就是我们在创建对象的时候进行初始化,这个就是创建对象的同时进行初始化,我们把这个叫做就地初始化;

3.3构造初始化

构造的时候赋值,这个相当于C++里面的这个自定义构造函数,本质都是一样的;

这个和上面的区别就是我们的就地初始化就是在定义成员变量的时候进行初始化,构造初始化是在写构造函数的时候进行初始化;

3.4IDEA快速填充

按照下面的这个步骤,我们就可以快速的构建出来带参数的构造函数,最后一不会让我们选择这个函数有几个参数:我们可以选一个,也可以选多个,因为这个构造函数也是函数,也是支持这个重载的;

3.5使用this简化

这个的意思:我们的下面是有一个无参数的构造函数和一个有三个参数的构造函数,这个时候,我们在这个无参的构造函数里面,就可以使用这个this(1900,1,1)相当于就是去调用这个有参的构造函数进行初始化;

这个前提是我们的这个无参的构造函数里面如果是有多行代码,我们的这个thsi的这一行必须写在第一行,否则就会报错;

第二个就是我们的有参函数和无参函数不可以成环,就是本来我已经调用你了,然后你又调用我,这个就是成环,这个也是不被允许的;

下面的这个代码就是对于上面的这个进行进一步说明,两个函数的调用形成了递归调用,这个时候就会报错;

3.6初始化的总结

其实上面的这个什么默认初始化。就地初始化都是分出来的,其实没有必要搞得这么多的类型,我们就只需要知道这个默认的构造函数,以及我们可以写参数的自定义构造函数;

因为学习过这个C++里面的这个类和对象,因此这个里面并不难理解,因为两个的核心思想就是一样的,我们只需要进行迁移即可;

4.包的引入

4.1包的概念

包的全称叫做软件包,是为了让我们程序猿更好的对于创建的类进行管理;

包的这个机制很好的体现了我们的类和对象的封装性,我们可以通过这个包实现对于类和接口的组织和管理;

4.2导入包中的类

下面的是两个导入包里面的类的方法,但是第一种会更加繁琐一些,第二个更加简单一些:

第一个就是上面的这个样子的,我们直接指出来我们要导入的类属于哪个包里面。上面导入的这个Date这个类就是属于我们的java.util这个包里面,但是这样写比较繁琐,因为我们每一次使用都要把前面的这个包的名字写一遍,因此我们可以使用下面的这个import写法:

下面的这个import就是我们在第一行直接指出来这个类属于那个包,这样再类里面我们就可以直接使用了;


如果想要导入这个java.util的其他的类,这个时候我们就可以使用*这个方法:

 这个*实际上就是一个通配符,这个通配符表示的是所有,例如我们之前学习这个sql语句的时候从这个表里面选择所有的内容,这个时候就是select * from之类的这个语句,在我们学习这个linux的时候,想要从一个很大的文件系统里面对于这个文件里面进行筛选,这个时候使用*.txt表示的就是所有的以txt结尾的文件,这个也是相同的用法;熟悉git的朋友可能就更清楚了,这个git里面有一个gitignore文件,这个文件里面内容就是用来,对于我们上传的文件进行筛选的,这个文件我们可以修改的,例如这个.mlx文件就是一类文件,这类文件就会在上传的时候被过滤掉;

虽然这个*可以省去很多的问题,但是我们还是建议直接指定,下面的这个就是使用*出现的一个问题(两个类的名字冲突,该如何进行选择)

上面的这个编译报错就是因为我们的这个两个包里面都是有这个date这个类的,因此在进行导入的时候,他就不知道我们程序猿到底想要导入哪一个类,因此这个就会出现报错的情况,我们如果想要解决这个报错,我们就可以使用这个具体的:就是进行import之后,我们用到的时候进行具体的指定,这个就不会报错(如下图所示)

4.3自定义包

我上面创建的这个包是分层显示的,就是类似于一个树状的结构。但是最开始这个系统默认的这个设置可能就不是这个样子的,因为我们的这个自定义包实际上会在这个我们的电脑的这个文件夹里面进行创建,我们点击这个package之后,我们就写这个com.baidu.www,实际上这个就是一个文件之间的包含的关系,就是这个com文件夹里面有一个baidu的文件夹,baidu文件夹里面有一个www文件夹;

如果使用这个默认的IDEA设置,这个里面的com,baidu,www的层架结构可能就不会显示出来,我们可以按照下面的这个步骤把对应的这个勾选取消掉,就是这个compact middle packages这个,他的这个原来的是勾选上的,我们把这个取消掉,这个时候我们的com,baidu,www就是像树状一样进行显示的;

如果想要查看这个具体的文件层级结构,我们可以按照下面的这个方式进行查看,这样我们就可以真正的在自己的这个电脑的文件夹里面看到我们呢的自定义的包包;

包的层级结构:我们需要知道这个包的层结结构,即使是我们的自定义的包,这个也是有自己的层级结构的,像下面的这个www就是和test3,test4同属以一个级别的,就是这三个都是属于baidu这个包里面的,但是我们的这个test,test2就是属于com.baidu.www这个包里面的,因此,他们的这个范围是不一样的;

下面的这个string brand这个没有任何的权限设置,但是这个属于我们的test包,因此这个可以在自己的这个类里面进行访问,像这个test3,test4都是无法进行访问的,这个就是包的访问权限(在自己的这个包里面的类可以访问,其他的不可以访问,不同的包里面的类的名字可以不一样,这个就是C++里面的这个命名空间,两个就是一个意思,本质没有差别)

我们可以使用下面的方式验证上面的结论:我们在baidu这个目录下面建立一个test类,这个时候不会报错,但是我们在这个www下面去建立一个类,这个时候就会报错,这个就是包的作用域的限制导致的,不同的包里面的这个类的名字可以一样,但是一个包里面的名字不可以是一样的;

5.static修饰

这个其实不难理解:

static修饰成员变量:这个成员变量属于类域的,不是某一个对象的,而是创建类的时候就存在了,这个成员变量就是共有的;

static修饰成员方法:这个成员方法也是属于这个类的,不依赖于任何一个对象而存在;

static修饰的静态成员方法里面不可以使用我们的非静态成员变量;

也不可以使用我们的非静态的成员方法(因为非静态方法有this指针,但是我们的static修饰的方法没有this指针)

6.代码块的划分

下面的这个就是一个普通的代码块:

下面的这个是另外的两个类型:实例化代码块和静态代码块,其中两个的区别就是静态的代码块的前面加上我们的关键字static;

实例化代码块只有在我们创建对象的时候才会被执行,静态代码块:无论我们创建多少个对象,我们的这个静态的代码块只会被执行一次,如果一个类里面有多个静态的代码块,这个时候就会按照这个先后顺序依次执行;

7.方法重写

就是我们自己创建一个对象,我们想要打印这个对象的相关的属性内容,这个时候就可以使用一下对于方法的重写

下面的这个就是我们的类的相关的信息:

接着我们调用自定义构造函数:创建一个对象,想要打印这个对象;

下面的这个是一个调用的过程(这个和我们上面使用的案例不一样,但是这个调用的过程是一样的,因此这个时候,我们可以看到这个最后是走到了这个toString这个位置,但是打印的结果却是一个类的全路径名+@+一个地址,我们想要的是这个相关的属性,这个时候,我们就可以进行方法的重写,重写的方法就是我们的toString方法)

我们可以通过下面的方式进行重写,这个不需要我们自己写:

下面的这个操作是在我们的类的文件进行的;首先右键,找到generate,然后选择这个toString这个方法,然后把这个里面所有的成员变量全部勾选(这个第三个步骤可能会不一样,因为这个具体取决于我们的成员变量的数量);

然后我们就可以看到我们的这个tostring方法已经被重写了,这个已经写在我们的这个类里面去,这个时候我们再次执行,这个就会调用我们重写的这个方法,override表示的就是这个方法是被重写的,打印结果就是相关的这个对象的属性信息;

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

C++系列-多态

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 多态 多态就是不同类型的对象,去做同一个行为,但是产生的结果是不同的。 比如说: 都是动物叫声,猫是喵喵,狗是汪汪&am…

rancher hello-world

创建一个Deployment, 只填名称和容器镜像rancher/hello-world 成功后: 查看日志 结果: 部署了工作负载。这个过程可能需要几分钟完成。 当您的工作负载部署完成后,它的状态将变为Active,您可以从项目的工作负载页面查看工作负载当前的状态…

ARM assembly: Lesson 10

今天,我们来看一下基于ARM汇编,如何实现函数的调用。 基础知识 在ARM汇编中,函数的前四个参数存放于 R0~R3寄存器中, 剩余的参数存放于栈中,返回值存放于r0。在栈中存放数值,可以避免在调用过程中,数据的…

串--KMP算法之手动计算next数组(详解)

目录 一、手动计算next数组 二、使用next数组进行模式匹配 三、练习 一、手动计算next数组 next[2] 表示模式串和主串对比,模式串里面第2个字符和主串不匹配,j应该指向几? 首先:字符串的下标和next数组下标保持一致 字符串是1~…

初识TCP/IP协议

回顾上文 来回顾一下TCP协议的特性,有一道比较经典的题:如何使用UDP实现可靠传输,通过应用程序的代码,完成可靠传输的过程? 原则,TCO有啥就吹啥,引入滑动窗口,引入流量控制&#x…

计算机毕业设计 农场投入品运营管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

ECP5701:PD协议芯片兼容PD 2.0和PD 3.0 (5V,9V,12V,15V,20V),支持 PD 输入多种类型无线充方案

TYPE-C接口,全称USB Type-C,是近年来在电子设备中广泛采用的一种新型接口。它以其小巧的尺寸、可逆的插拔方向以及高速的数据传输能力,迅速取代了传统的USB接口,成为现代设备的标准配置。不仅如此,TYPE-C接口还支持PD&…

2024年音频转文字:不可错过的四大工具!

在数字化办公和学习的背景下,音频转文字服务正变得越来越重要。本文将针对几款备受推崇的音频转文字工具进行深入解析! 365在线转文字:云端处理,无需下载 直达链接:www.pdf365.cn/ 365在线转文字以其高效的转录速度…

Pikachu-Cross-Site Scripting-存储型xss

存储型xss &#xff0c;随便输入点内容&#xff0c;都能保存下来&#xff1b;刷新后也不会丢失&#xff1b;输入特殊字符&#xff0c;也能原样返回&#xff1b; 查看代码&#xff0c;也可以看到输出结果直接原路返回&#xff0c;不做处理 构造payload <script>alert(1)…

batch和momentum

&#x1f680; 机器学习系列前期回顾 1、初识机器学习 2、线性模型到神经网络 3、local minima的问题如何解决 &#x1f680;在初识机器学习中&#xff0c;了解了机器学习是如何工作的并引入了线性模型&#xff0c;在线性模型到神经网络这节&#xff0c;将线性模型进一步改进为…

【web安全】——XSS漏洞

1.XSS漏洞基础 1.1.漏洞成因 XSS(Cross-site scripting)被称为跨站脚本攻击&#xff0c;由于与层叠样式表的缩写一样&#xff0c;因此被缩写为XSS.XSS漏洞形成的原因是网站/程序对前端用户的输入过滤不严格&#xff0c;导致攻击者可以将恶意的is/html代码注入到网页中&#x…

基于Word2Vec和LSTM实现微博评论情感分析

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有&#xff1a;中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等&#xff0c;曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝&#xff0c;拥有2篇国家级人工智能发明专利。 社区特色…

【Python报错已解决】TypeError: unsupported operand type(s) for +: ‘str‘ and ‘int‘

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

【C++前缀和】2845. 统计趣味子数组的数目|2073

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode 2845. 统计趣味子数组的数目 难度分&#xff1a;2073 给你一个下标从 0 开始的整数数组 nums &#xff0c;以及整数 modulo 和整数 k 。 请你找出并统计数组…

(作业)第三期书生·浦语大模型实战营(十一卷王场)--书生入门岛通关第3关Git 基础知识

任务编号 任务名称 任务描述 1 破冰活动 提交一份自我介绍。 2 实践项目 创建并提交一个项目。 破冰活动 提交一份自我介绍。 每位参与者提交一份自我介绍。 提交地址&#xff1a;https://github.com/InternLM/Tutorial 的 camp3 分支&#xff5e; 安装并设置git 克隆仓库并…

分散加载文件 scatter files

目录 一、加载域和执行域二、Image entry points三、映射符号四、链接器预定义符号1、将符号引入到程序中1.1 引入到 C/C1.2 引入到汇编 2、域相关的符号2.1 执行域符号 Image$$2.2 执行域符号 Load$$2.3 加载域符号 Load$$LR$$2.4 节相关的符号2.5 镜像符号2.6 输入节符号 五、…

【Nacos 架构 原理】服务发现模块之Nacos注册中心服务数据模型

文章目录 服务&#xff08;Service&#xff09;和服务实例&#xff08;Instance&#xff09;定义服务服务元数据定义实例实例元数据持久化属性 集群定义集群 生命周期服务的生命周期实例的生命周期集群的生命周期元数据的生命周期 服务&#xff08;Service&#xff09;和服务实…

收单外包机构备案分析及建议

2020年9月16日&#xff0c;中国支付清算协会&#xff08;下称“中支协”或“协会”&#xff09;公示了首批收单外包服务机构备案名单。历经5年&#xff0c;约进行50次公示后&#xff0c;截至9月21日共备案收单外包机构32457家&#xff0c;取消备案机构316家&#xff0c;拟取消机…

YOLO v11实时目标检测3:训练数据集格式说明

一、Yolov11简介 YOLOv11 是 YOLO 系列的最新版本&#xff0c;它不仅在目标检测方面表现出色&#xff0c;还引入了对象分割和多目标跟踪的功能。本文将介绍如何使用 YOLOv11 进行人流统计、车流统计以及跟踪的实际应用。 二、Yolo v11训练数据集格式说明 2.1 数据组织&#…

Redis --- 第二讲 --- 特性和安装

一、背景知识 Redis特性&#xff1a; Redis是一个在内存中存储数据的中间件&#xff0c;用于作为数据库&#xff0c;作为缓存&#xff0c;在分布式系统中能够大展拳脚。Redis的一些特性造就了现在的Redis。 在内存中存储数据&#xff0c;通过一系列的数据结构。MySQL主要是通…