当前位置: 首页 > news >正文

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表示的就是这个方法是被重写的,打印结果就是相关的这个对象的属性信息;

相关文章:

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.类和对象 使…...

【系统代码】招投标采购一体化管理系统,JAVA+vue

前言: 随着互联网和数字技术的不断发展,企业采购管理逐渐走向数字化和智能化。数字化采购平台作为企业采购管理的新模式,能够提高采购效率、降低采购成本、优化供应商合作效率,已成为企业实现效益提升的关键手段。系统获取在文末…...

基于yolov8深度学习的120种犬类检测与识别系统python源码+onnx模型+评估指标曲线+精美GUI界面目标检测狗类检测犬类识别系统

【算法介绍】 基于YOLOv8深度学习的120种犬类检测与识别系统是一款功能强大的工具,该系统利用YOLOv8深度学习框架,通过21583张图片的训练,实现了对120种犬类的精准检测与识别。 该系统基于Python与PyQt5开发,具有简洁的UI界面&a…...

UNI-APP_iOS开发技巧之:跳转到TestFlight或者App Store

有的时候我们的应用可能需要上TestFlight或者App Store,更新升级就需要跳到TestFlight里面。方法如下: 跳转到TestFlight: itms-beta://itunes.apple.com/app/你的AppID 跳转到AppStore: itms-apps://itunes.apple.com/app/你的AppIDhttps://airp…...

基于SSM+Vue技术的定制式音乐资讯平台

文未可获取一份本项目的java源码和数据库参考。 一、选题的背景与意义: 随着个人计算机的普及和互联网技术的日渐成熟,网络正逐渐成为人们获取信息及消费的主要渠道。然而在当前这个信息时代,网络中的信息种类和数量呈现爆炸性增长的趋势&a…...

Spring依赖注入和注解驱动详解和案例示范

在 Spring 框架中,依赖注入(Dependency Injection, DI)和注解驱动(Annotation-Driven)是其核心机制,它们为 Spring 应用提供了灵活性和可扩展性。依赖注入简化了对象间的依赖管理,而注解驱动则通…...

网络通信——OSPF协议(基础篇)

这里基础是因为没有讲解OSPF中的具体算法过程,以及其中很多小细节。后续会更新。 目录 一.OSPF的基础信息 二.认识OSPF中的Router ID 三.OSPF中的三张表 四.OSPF中的度量方法(计算开销值) 五. OSPF选举DR和BDR(就是这个区域…...

Kubernetes从零到精通(15-安全)

目录 一、Kubernetes API访问控制 1.传输安全(Transport Security) 2.认证(Authentication) 2.1 认证方式 2.2 ServiceAccount和普通用户的区别 2.3 ServiceAccount管理方式 自动ServiceAccount示例 手动ServiceAccount示例 3.鉴权 (Authorization) 3.1鉴权方式 3.2 …...

《蓝桥杯算法入门》(C/C++、Java、Python三个版本)24年10月出版

推荐:《算法竞赛》,算法竞赛大全书,网购:京东 天猫  当当 文章目录 《蓝桥杯算法入门》内容简介本书读者对象作者简介联系与交流《蓝桥杯算法入门 C/C》版目录 《蓝桥杯算法入门 Java》版目录 《蓝桥杯算法入门 Python》版目录 …...

Soar项目中添加一条新的SQL审核规则示例

soar是一个开源的SQL规则审核工具,是一个go语言项目,可以直接编译构建成一个可执行程序,而且是一个命令行工具,我们可以利用archey来调用soar进行sql规则审核以及sql的分析,包括执行计划的查看及sql建议等。 soar中已…...

RISC-V开发 linux下GCC编译自定义指令流程笔记

第一步:利用GCC提供了内嵌汇编的功能可以在C代码中直接内嵌汇编语言 第二步:利用RSIC-V的中的.insn模板进行自定义指令的插入 第三步:RISC-V开发环境的搭建 C语言插入汇编 GCC提供了内嵌汇编的功能可以在C代码中直接内嵌汇编语言语句方便了…...

java代码是如何与数据库通信的?

Java代码与数据库通信的过程主要通过Java Database Connectivity(JDBC)来实现。JDBC是Java与数据库之间的标准接口,提供了用于执行SQL语句和处理数据库结果的API。以下是Java代码与数据库通信的详细步骤: 一、导入JDBC库 在Java…...

gateway--网关

在微服务架构中,Gateway(网关)是一个至关重要的组件,它扮演着多种关键角色,包括路由、负载均衡、安全控制、监控和日志记录等。 Gateway网关的作用 统一访问入口: Gateway作为微服务的统一入口&#xff0c…...

北京数字孪生工业互联网可视化技术,赋能新型工业化智能制造工厂

随着北京数字孪生工业互联网可视化技术的深入应用,新型工业化智能制造工厂正逐步迈向智能化、高效化的全新阶段。这项技术不仅实现了物理工厂与数字世界的精准映射,更通过大数据分析、人工智能算法等先进手段,为生产流程优化、资源配置合理化…...

土地规划与区域经济发展:筑基均衡未来的战略经纬

在新时代背景下,土地规划不仅是空间布局的艺术,更是推动区域经济均衡发展的关键引擎。土地资源的合理配置对于激发区域潜能、促进经济结构优化有着重要意义。本文将深入剖析土地规划如何成为促进区域经济均衡发展的强大动力。 一、土地规划与区域经济的…...

wsl(2) -- ubuntu24.04配置

1. 常用脚本及别名配置 修改的文件内容参考另一篇文章常用bash脚本。 修改~/.bashrc,在文件末尾追加以下内容。 # Add by user export MYTOOLS$HOME/tools export MYBINS$HOME/bin # 系统中其他地方已经添加过了,暂不清楚是哪里添加的 #export PATH$M…...

python快速搭建https服务器

本文介绍了在ubuntu操作系统上搭建https服务器的过程 在一台连接到网络的主机上搭建https服务器,假设该主机的ip地址为:10.98.69.174 创建证书example.crt和私钥example.key openssl req -newkey rsa:2048 -nodes -keyout example.key -x509 -days 365…...

网络原理3-应用层(HTTP/HTTPS)

目录 DNSHTTP/HTTPSHTTP协议报文HTTP的方法请求报头、响应报头(header)状态码构造HTTP请求HTTPS 应用层是我们日常开发中最常用的一层,因为其他层:传输层、网络层、数据链路层、物理层这些都是操作系统和硬件、驱动已经实现好的,我们只能使用…...

JVM(HotSpot):堆空间(Heap)以及常用相关工具介绍

文章目录 一、内存结构图二、堆的定义三、堆内存溢出四、堆内存排查工具 一、内存结构图 二、堆的定义 1、通过new关键字创建的对象,都会放到堆空间中。 2、它是线程共享的,堆中的对象都要考虑线程安全问题。 那有同学肯定会问,方法内通过n…...

【Python语言初识(六)】

一、网络编程入门 1.1、TCP/IP模型 实现网络通信的基础是网络通信协议,这些协议通常是由互联网工程任务组 (IETF)制定的。所谓“协议”就是通信计算机双方必须共同遵从的一组约定,例如怎样建立连接、怎样互相识别等,…...

golang循环变量捕获问题​​

在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下: 问题背景 看这个代码片段: fo…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...