【java基础】自定义类
文章目录
- 基本介绍
- 自定义类
- 字段
- 方法
- 构造器
- main方法
基本介绍
什么是类这里就不过多赘述了,这里来介绍关于类的几个名词
- 类是构造对象的模板或蓝图
- 由类构造对象的过程称为创建类的实例
- 封装就是将数据和行为组合在一个包中,并对对象的使用者隐藏具体的实现方式
- 对象的数据称为实例字段
- 操作数据的过程称为方法
下面再来说明一些对象的三个主要特性
- 对象的行为(behavior)一可以对对象完成哪些操作,或者可以对对象应用哪些方法?
- 对象的状态(state)一当调用那些方法时,对象会如何响应?
- 对象的标识(identity)一如何区分具有相同行为与状态的不同对象?
在本篇文章中,不会涉及到继承和接口,只会讲解任何定义最基本的类
自定义类
最简单的自定义类的形式如下
class ClassName{filed1filed2...constructor1constructor2...method1method2...}
我们可以发现一个类就是由字段、方法、构造器组成的(不是必须的)。
下面我就定义了一个简单的People类
class People {// 字段String name;int age;// 构造器public People(String name, int age) {this.name = name;this.age = age;}// 方法@Overridepublic String toString() {return "People{" +"name='" + name + '\'' +", age='" + age + '\'' +'}';}
}
下面来对字段,构造器,方法来进行逐个的介绍
字段
以上面的People为例子,我们定义了如下2个属性
String name;int age;
可以发现这和我们定义普通变量的写法是一样的,只不过我们在方法里面定义变量的作用域为当前所在的代码块,而类字段的作用域为整个类。
对于类字段,我们还可以使用修饰符来进行修饰,表示访问范围。可以不写,也可以用private,public,protected来进行修饰。
String name1;private String name2;protected String name3;public String name4;
对于这几个的细节,这里不进行说明。我们只需要记住,类字段一般都是使用private进行修饰即可。使用private表示该字段只能在本类进行使用
这里我们还要进行说明的一点是可以看见上面的代码只进行了定义,并没有初始化。如果我们没有初始化直接使用其实也是可以的,因为类在进行创建的时候会进行默认的初始化,给一个默认值。默认值的规则如下
- 基本类型默认值是0
- 布尔类型默认值是false
- 引用类型默认值是null
方法
以上面People中的toString方法为例子,@Override先进行忽略
@Overridepublic String toString() {return "People{" +"name='" + name + '\'' +", age='" + age + '\'' +'}';}
可以发现,方法由4部分组成,分别是方法修饰符,返回类型,方法名称,参数列表,代码块
- 方法修饰符:可以不写,也可以是private,protected,public。对于具体细节,这里不做说明,现在只需要记得方法使用public修饰就表示可以在其他类进行使用就行了
- 返回类型:这个是由自己决定的,可以按照自己的需求返回任何类型,我们返回使用的是return语句。当然也可以不进行返回,如果没有返回值,那么就使用void进行修饰
- 方法名称:这个就是自己来进行编写了,但是这里给出建议,方法的命名最好要能够体现出方法的作用
- 参数列表:上面的方法并没有参数列表,但是方法是可以有参数的,如果有参数,那么在调用方法的时候就需要传入对应的参数才行,这些参数可以在方法中进行使用
- 代码块:我们就是在里面编写自己的代码,如果有返回值,最后的语句一定要为return
有了方法的一些基本概念,我们再来看上面定义的toString方法,该方法就是使用public进行修饰,表示其他类可以进行调用,返回类型是一个字符串,名称为toString,没有参数,最终会返回People的name和age。
需要说明的是name和age我们并没有定义,为什么能够使用呢?其实上面在类字段中我们已经说过了,类字段的作用域是整个类,方法也在同一个类中,所以当然能够使用啊
上面说明了类字段一般都是private,只能够当前类里面使用,如果其他类想访问或者修改怎么办呢?其实这就是通过get和set来进行的,get一般是获取特定类字段的值,set一般是设置类字段的值,例子如下
public String getName() {return name;}public void setName(String name) {this.name = name;}
一般get,set后面都是跟着类字段的名称,这样容易理解该方法的意思
构造器
在使用java的时候,使用new关键字创建对象大家应该都使用过。使用new创建对象其实就是通过构造器完成的。
我们还有使用上面People里面的构造器进行说明
// 构造器public People(String name, int age) {this.name = name;this.age = age;}
构造器其实也是一个方法,但是这个方法比较特殊,并不需要写返回类型,并且名称还和类名是一样的,这些都容易理解,不容易理解的是以下内容
this.name = name;this.age = age;
其实,this代表的就是当前这个对象,是一个隐式对象。this.name就是当前这个类里面的name字段,当然我们可以不用写this。但是这里的情况比较特殊,因为传入的参数名称也叫做name,如果我们不写this,那么上面的语句就会变成如下情况
name = nameage = age
是不是很奇怪?如果不写this,那么编译器怎么知道你写的name是参数上的name还是类字段的name呢,其实根据最近的原则,name代表的就是参数上的name,this.name就是类字段的name。
对于构造器,我们可以给定多个,只需要参数的类型或者个数有区别就行,用专业术语来说就是重载
public People(String name) {this.name = name;}public People() {}
如果一个构造器没有参数,那么这个构造器就叫无参构造器,如果我们类里面一个构造器也不写,那么类就会存在一个默认的无参构造器。如果写了构造器,那么无参构造器就不会默认存在,需要显示的声明才行。
对于构造器的使用,其实就是在new的时候才会进行调用,根据new时传入的参数,匹配相应的构造器
People people = new People("tom",1);People people1 = new People();People people2 = new People("jack");
main方法
这个大家应该都很熟悉,main方法的形式如下
public static void main(String[] args) {}
main方法就可以看作是一个固定写法,不对任何对象进行操作,实际上,在启动程序的时候还没有构建起任何对象。静态的main方法将执行并构建起程序所需要的对象。
每个类都可以有一个main方法。main方法就是程序运行的入口,可以执行,常用于测试
相关文章:
【java基础】自定义类
文章目录基本介绍自定义类字段方法构造器main方法基本介绍 什么是类这里就不过多赘述了,这里来介绍关于类的几个名词 类是构造对象的模板或蓝图由类构造对象的过程称为创建类的实例封装就是将数据和行为组合在一个包中,并对对象的使用者隐藏具体的实现…...
7、STM32 FSMC驱动SRAM
本次使用CubeMx配置FSMC驱动SRAM,XM8A51216 IS62WV51216 原理图: 注意:FSMC_A0必须对应外部设备A0引脚 一、FSMC和FMC区别 FSMC:灵活的静态存储控制器 FMC:灵活存储控制器 区别:FSMC只能驱动静态存储控制器(如&…...
七、虚拟机栈
虚拟机栈出现的背景 1.由于跨平台性的设计,Java的指令都是根据栈来设计的,不同平台CPU架构不同,所以不能设计为基于寄存器的。 2.优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同…...
Linux其他常用命令
Linux其他常用命令查找文件find 命令功能非常强大,通常用在特定目录下搜索符合条件的文件如果省略路径,表示在当前文件夹下查找之前学习的通配符,在使用 find 命令时同时可用演练目标1.搜索桌面目录下,文件名包含1的文件find Desk…...
一次性打包学透 Spring
不知从何时开始,Spring 这个词开始频繁地出现在 Java 服务端开发者的日常工作中,很多 Java 开发者从工作的第一天开始就在使用 Spring Framework,甚至有人调侃“不会 Spring 都不好意思自称是个 Java 开发者”。 之所以出现这种局面…...
1080T、2080T、4070T显卡的深度学习性能测试和结论
先说结论: 4070T显卡FP32的训练和推理速度跟3090应该基本类似。但由于显存12G偏低,4070T不太适合如今的深度学习模型训练(新手列外,大部分模型都能训练起来,耗电也相对很低),更适合测试最新的一…...
SpringBoot搭建SpringMVC项目
前言据我的了解,现在不管是大公司或是小公司,如果使用java开发一个web项目,大部分都会选择使用SpringBoot,关于Springboot的好处,就不在这里过多赘述,总之Springboot有一套完整的生态,从项目构建…...
Prescriptive Analytics for Flexible Capacity Management
3 本节根据Netessine等人(2002年)和Bassok等人(1999年)对我们解决的容量规划问题进行了正式描述。考虑一家以pi(I1,…,I)的单价提供I服务的公司。在每个计划周期t∈{1,……...
超简单的待办事项列表管理器todo
什么是 todo ? todo 是一个自托管的 todo web 应用程序,可让您以简单且最少的方式跟踪您的 todo。📝 老苏觉得和之前介绍的 KissLists 比较像 文章传送门:最简单的共享列表服务器KissLists 官方提供了 Demo 演示站点:https://tod…...
在C#中初测OpencvSharp4
一、配置OpenCV 首先,我们新建一个工程,然后就是给这个工程配置OpenCV了,最简单的方法还是Nuget,来我们右键一个Nuget: 打开Nuget后,你可以直接输入OpenCVSharp4来查找,当然,如果你…...
洛谷P1123 取数游戏(C++)(DFS)
目录 1.题目 题目描述 输入格式 输出格式 输入输出样例 说明/提示 2.AC 1.题目 题目描述 一个N \times MNM的由非负整数构成的数字矩阵,你需要在其中取出若干个数字,使得取出的任意两个数字不相邻(若一个数字在另外一个数字相邻88个格…...
Python Qt6快速入门-嵌入PyQtGraph图表
嵌入PyQtGraph 文章目录 嵌入PyQtGraph1、PyQtGraph介绍2、创建PyQtGraph小部件3、绘图样式配置3.1 背景颜色3.2 线条颜色、线宽和样式配置3.3 线标记(Line Markers)3.4 绘制标题3.5 轴标题3.6 图例(Legends)3.7 轴范围限制3.8 绘制多组数据3.10 画布清空4、更新数据5、总结1、…...
Mac电脑_GitHub提交项目至仓库
第一步(准备工作): Mac 电脑自带 git , 无需安装 1. 创建一个项目 demo1 在 github 上 2. 创建 ssh 密钥 打开终端: ssh-keygen -t rsa -C "your_emailyouremail.com" 此处输入两次密码, 直接…...
Android自定义View实现横向的双水波纹进度条
效果图:网上垂直的水波纹进度条很多,但横向的很少,将垂直的水波纹改为水平的还遇到了些麻烦,现在完善后发布出来,希望遇到的人少躺点坑。思路分析整体效果可分为三个,绘制圆角背景和圆角矩形,绘…...
Python 之 Pandas 分组操作详解和缺失数据处理
文章目录一、groupby 分组操作详解1. Groupby 的基本原理2. agg 聚合操作3. transform 转换值4. apply二、pandas 缺失数据处理1. 缺失值类型1.1 np.nan1.2 None1.3 NA 标量2. 缺失值处理2.1 查看缺失值的情形2.2 缺失值的判断2.3 删除缺失值2.4 缺失值填充在开始之前ÿ…...
【人工智能 AI】什么是人工智能? What is Artificial Intelligence
目录 Introduction to Artificial Intelligence人工智能概论 What is Artificial Intelligence? 什么是人工智能?...
17、触发器
文章目录1 触发器概述2 触发器的创建2.1 创建触发器语法2.2 代码举例3 查看、删除触发器3.1 查看触发器3.2 删除触发器4 触发器的优缺点4.1 优点4.2 缺点4.3 注意点尚硅谷MySQL数据库教程-讲师:宋红康 我们缺乏的不是知识,而是学而不厌的态度 在实际开发…...
内核并发消杀器(KCSAN)技术分析
一、KCSAN介绍KCSAN(Kernel Concurrency Sanitizer)是一种动态竞态检测器,它依赖于编译时插装,并使用基于观察点的采样方法来检测竞态,其主要目的是检测数据竞争。KCSAN是一种检测LKMM(Linux内核内存一致性模型)定义的数据竞争(data race)的工…...
蓄水池抽样算法
蓄水池抽样,也称水塘抽样,是随机抽样算法的一种。基本抽样问题有一批数据(假设为一个数组,可以逐个读取),要从中随机抽取一个数字,求抽得的数字下标。常规的抽样方法是,先读取所有的…...
数据结构预算法之买股票最好时机动态规划(可买卖多次)
一.题目二.思路在动规五部曲中,这个区别主要是体现在递推公式上,其他都和上一篇文章思路是一样的。所以我们重点讲一讲递推公式。这里重申一下dp数组的含义:dp[i][0] 表示第i天持有股票所得现金。dp[i][1] 表示第i天不持有股票所得最多现金如…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...
当下AI智能硬件方案浅谈
背景: 现在大模型出来以后,打破了常规的机械式的对话,人机对话变得更聪明一点。 对话用到的技术主要是实时音视频,简称为RTC。下游硬件厂商一般都不会去自己开发音视频技术,开发自己的大模型。商用方案多见为字节、百…...
【技巧】dify前端源代码修改第一弹-增加tab页
回到目录 【技巧】dify前端源代码修改第一弹-增加tab页 尝试修改dify的前端源代码,在知识库增加一个tab页"HELLO WORLD",完成后的效果如下 [gif01] 1. 前端代码进入调试模式 参考 【部署】win10的wsl环境下启动dify的web前端服务 启动调试…...
以太网PHY布局布线指南
1. 简介 对于以太网布局布线遵循以下准则很重要,因为这将有助于减少信号发射,最大程度地减少噪声,确保器件作用,最大程度地减少泄漏并提高信号质量。 2. PHY设计准则 2.1 DRC错误检查 首先检查DRC规则是否设置正确,然…...
