复习java5.26
面向对象和面向过程
面向过程:把一个任务分成一个个的步骤,当要执行这个任务的时候,只需要依次调用就行了
面向对象:把构成任务的事件构成一个个的对象,分别设计这些对象(属性和方法)、然后把这些对象包装成有自己完整功能的系统。
举例:
面向对象的特征
面向对象的四大特征:继承、多态、封装、抽象;
封装:把每一个对象的信息都隐藏起来,只留出少量的接口(方法)给外界访问来获取和更改对象的信息,良好的封装可以有效的保证数据的合理性。
继承:从已有的类中派生出新的类(新的类继承旧的类,旧的类叫做新的类的父类),新的对象具有父类的属性和方法并可以具有自己独有的属性和方法,java中继承是单继承(每一个子类都只能有一个直接的父类)
多态:多态就是事物的多种形态,在不同的情况下所表现的不同的形式。
多态的存在条件:
- 继承或实现:在多态中必须存在有继承或实现关系的子类和父类
- 方法的重写:子类对父类中的某些方法进行重新定义
- 父类引用指向子类对象,父类类型:指子类对象继承的父类类型,或实现的父接口类型
形式:
父类类型 变量名 = new 子类类型
作用:
当使用变量名调用成员变量时调用的是父类的成员变量,调用方法时则是调用的子类重写的方法。无法调用子类独特的方法和成员变量,当子类和父类拥有相同的静态变量和方法时,调用的是父类的变量和方法。
向上转型:父类引用指向子类对象,多态的一种体现。(无需强制转型)
形式:父类类型 变量名 = new 子类类型
向下转型:子类引用指向父类对象,此时可以调用子类特有的方法(需要强制转型)
形式:子类类型 变量名 =(子类类型) new 父类类型
抽象:把具体的事物使用代码表示出来。
抽象方法:没有方法体的方法
抽象类:包含抽象方法的类
如果有类继承了抽象类,那么这个类要把所继承的抽象类的所有的抽象方法给实现出来,除非这个子类也是抽象类。
java基本类型:
int、long、short、float、double、char、boolean、byte。
在保存金额时不能使用浮点型进行储存,因为浮点型在储存十进制的小数时保存的是近似值所以并不准确,如要保存可以使用BigDecimal,BigDecimal通过使用BigInteger(用于表示整数部分)和scale(用于表示小数部分的位数)来表示高精度的十进制数值,从而可以准确地表示和计算大数。
java在传输参数的时候传输的是值的副本:
如果传输的不是对象,那么传输过去的是变量的值的副本,在方法中改变值不会改变原变量的值。
如果传输的是对象,那么传输的是对象引用的副本,在方法中改变对象的值,那么对象引用的值也会和方法中一样
举例:
public class Main {public static void main(String[] args) {int x=5;chang(x);System.out.println(x);StringBuilder stringBuilder=new StringBuilder("123");changClass(stringBuilder);System.out.println(stringBuilder);}public static void chang(int x){x=6;}public static void changClass(StringBuilder stringBuilder){stringBuilder.append("123");}
}
运行结果:
包装类:
java中很多地方需要使用对象而不是基本数据类型比如集合(集合中只能存放对象),那么这时就轮到包装类出场了。包装类相当于把基本数据类型进行包装后使其获得对象的性质、添加了属性和方法。
基本数据类型 | 包装类 |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
byte | Byte |
boolean | Boolean |
short | Short |
自动装箱和拆箱
装箱:将基础类型转化为包装类型。
拆箱:将包装类型转化为基础类型。
当基础类型于包装类进行运算时会自动进行装箱和拆箱。
String类
String类是不可改变的,在保存字符串时使用的是byte数组来进行存储的,而这个数组是使用final进行修饰的,所以String类是不可以改变的,对String类进行+运算则是生成了一个新的变量。
String类中对byte数组的定义
为什么不用char数组呢?因为使用byte数组更节省空间
因为String类本身是不可改变的要通过新建才能达到修改的效果,所以如果要频繁的对字符串进行修改就会对内存进行比较大的消耗,那么有没有一种类可以直接修改呢?
Stringbuffer类和Stringbuilder类
Stringbuffer和Stringbuilder都是继承的抽象类AbstractStringBuilder,可以对字符串进行直接的修改不用新建。
AbstractStringBuilder中对byte数组的定义
Stringbuffer和Stringbuilder、String的区别
是否线程安全 | 是否可改变 | |
String | 是 | 否 |
Stringbuffer | 是 | 是 |
Stringbuilder | 否 | 是 |
Stringbuffer是所有的方法都添加了synchronized关键字来确保数据的同步的而Stringbuilder却没有,所以Stringbuilder在单线程的情况下是要比Stringbuffer的效率要高的。
StringJoiner
StringJoiner是基于String来实现的?网上说是Stringbuilder但我自己看是基于String数组实现的。
StringJoiner可以在添加字符串的时候自动的去添加用户设置的前缀、后缀、和分隔符。
import java.util.StringJoiner;public class Main {public static void main(String[] args) {StringJoiner stringJoiner=new StringJoiner(",");stringJoiner.add("张三");System.out.println(stringJoiner);stringJoiner.add("李四");System.out.println(stringJoiner);stringJoiner.add("王五");System.out.println(stringJoiner);}
}
运行结果
注意:
new String("suibian"); 这一条语句运行完后建立了几个对象呢?
答案是1或2个。
1.当字符串常量池没有"suibian"是会建立一个字符串对象放到字符串常量池里去。
2.new一个字符串对象放到堆栈里去。
String类的大小
Java中的字符串长度是使用int类型来表示的所以String类字符串最大长度为2^31,字符串常量在常量池中的最大长度是65534
Object类常用的方法有那些?
Object类常用的方法有toString、equals、hashCode、clone等。
toString:默认输出对象地址。
equals:默认比较两个引用变量是否指向同一个对象(内存地址)。
hashCode:将与对象相关的信息映射成一个哈希值,默认的实现hashCode值是根据内存地址换算出来。
clone:得到一个对象的副本。
浅拷贝和深拷贝
浅拷贝:拷贝对象和原始对象里的引用类型引用同一个对象。
在下面这个例子中person1和person2的引用对象引用的是同一个对象。
public class Main {public static void main(String[] args) throws CloneNotSupportedException {Person person1 = new Person("Alice", new Address("New York"));Person person2 = person1.clone();System.out.println(person1.getName());System.out.println(person1.getAddress().getCity());System.out.println(person2.getName());System.out.println(person2.getAddress().getCity());person2.getAddress().setCity("123");System.out.println(person1.getName());System.out.println(person1.getAddress().getCity());System.out.println(person2.getName());System.out.println(person2.getAddress().getCity());}
}
class Person implements Cloneable{private String name;private Address address;public Person(String name, Address address) {this.name = name;this.address = address;}public Person() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}@Overridepublic Person clone() throws CloneNotSupportedException {Person clone = (Person) super.clone();return clone;}
}class Address {private String city;public Address(String city) {this.city = city;}public Address() {}public String getCity() {return city;}public void setCity(String city) {this.city = city;}
}
运行结果:
可以看到原对象的值会受到拷贝对象的影响
深拷贝:拷贝对象和原始对象的引用类型指向不同的对象
对上面的程序进行更改:使Address也实现Cloneable接口,并且在Person的clone中调用Address中的clone方法。
public class Main {public static void main(String[] args) throws CloneNotSupportedException {Person person1 = new Person("Alice", new Address("New York"));Person person2 = person1.clone();System.out.println(person1.getName());System.out.println(person1.getAddress().getCity());System.out.println(person2.getName());System.out.println(person2.getAddress().getCity());person2.getAddress().setCity("123");System.out.println(person1.getName());System.out.println(person1.getAddress().getCity());System.out.println(person2.getName());System.out.println(person2.getAddress().getCity());}
}
class Person implements Cloneable{private String name;private Address address;public Person(String name, Address address) {this.name = name;this.address = address;}public Person() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}@Overridepublic Person clone() throws CloneNotSupportedException {Person clone = (Person) super.clone();clone.address=address.clone();return clone;}
}class Address implements Cloneable{private String city;public Address(String city) {this.city = city;}public Address() {}public String getCity() {return city;}public void setCity(String city) {this.city = city;}@Overridepublic Address clone() throws CloneNotSupportedException {Address clone = (Address) super.clone();return clone;}
}
运行结果:
可以看到原对象的值不会受到拷贝对象的影响。
相关文章:

复习java5.26
面向对象和面向过程 面向过程:把一个任务分成一个个的步骤,当要执行这个任务的时候,只需要依次调用就行了 面向对象:把构成任务的事件构成一个个的对象,分别设计这些对象(属性和方法)、然后把…...

学 Python 具体能干什么?
Python 是一种功能强大、用途广泛的编程语言,因其简洁易读的语法和丰富的库生态系统而备受欢迎。学习 Python后,你可以从事以下几方面的工作: 1. Web 开发 Python 有很多流行的 Web 框架,如: Django:一个…...

福昕PDF使用技巧
因为突然间学校的企业版WPS突然很多功能就不能使用了,所以转向福昕PDF。 一、合并文件 添加需要合并的文件,可以使用ctrla等方式全选 找到最上方的“合并文件” 二、文本注释...
条款8:了解各种不同意义的new和delete
有时候我们觉得,C的术语仿佛是要故意让人难以理解似的。 这里就有一个例子:请说明new operator 和operator new 之间的差异(译注:本书所说的new operator,即某些C教程如C Primer 所谓的new expression) 当你写出这样…...

windows 搭建 go开发环境
go语言(或 Golang)是Google开发的开源编程语言,诞生于2006年1月2日下午15点4分5秒,于2009年11月开源,2012年发布go稳定版。Go语言在多核并发上拥有原生的设计优势,Go语言从底层原生支持并发,无须…...

Android 布局中@NULL的使用和代码实现方式详解
文章目录 1、使用场景2、示例代码实现2.1、移除背景2.2 、移除文本2.3、移除布局宽度或高度2.4、移除提示文本2.5、移除图像资源 3、综合示例3.1、布局文件 activity_main.xml3.2、主活动文件 MainActivity.java3.4、资源文件3.5、运行结果 4、优点5、缺点6、综合分析6.1、适用…...

服务器数据恢复—同友存储raid5阵列上层虚拟机数据恢复案例
服务器数据恢复环境: 某市教育局同友存储,存储中有一组由数块磁盘组建的raid5阵列,存储空间划分若干lun。每个lun中有若干台虚拟机,其中有数台linux操作系统的虚拟机为重要数据。 存储结构: 服务器故障: r…...
我得近况说明
最近转入了Django开发工作,所以主要方向在Python开发。...
C语言——在头⽂件中#if、_STDC_等字⾏起什么作⽤?
一、问题 通常,⼀些程序员都不会去研究头⽂件中的内容是什么含义,总觉得乱乱的,有很多 #if、_STDC_、#line 等字符,那么这些字符都各代表什么呢,在头⽂件中又起到什么作⽤呢? 二、解答 在头⽂件中存在类似…...

解密MySQL中的临时表:探究临时表的神奇用途
欢迎来到我的博客,代码的世界里,每一行都是一个故事 解密MySQL中的临时表:探究临时表的神奇用途 前言临时表的定义与分类创建与使用临时表临时表的操作与管理优化与性能提升注意事项与最佳实践 前言 在数据库管理中,临时表是一个…...

Go 语言简介 -- 高效、简洁与现代化编程的完美结合
在现代软件开发领域,选择合适的编程语言对于项目的成功至关重要。Go 语言(又称 Golang )自 2009 年由Google发布以来,以其简洁的语法、高效的并发模型以及强大的性能,迅速成为开发者们的新宠。Go语言不仅融合了传统编译…...

绝缘鞋计量校准周期多长时间合适?校验检测方法是什么?
绝缘鞋的计量校准,通常是应用在电学相关领域,因此也是属于计量校准机构中的电学室管辖的范围,而绝缘鞋为了安全防护,也是采用了绝缘材料,其标准要求耐电压至少在15KV以下,可应用于工频(50到60F&…...
python-13(案例讲解)
目录 抓取链家前十页的数据 计算均价和总价 计算的类型(整租,合租) 计算的房型 抓取boss直聘前十页的数据 抓取boss直聘前十页的数据 将获取数据本地序列化 计算每个区的需求个数与均价 抓取链家前十页的数据 链家网址:长…...

【深度学习】最强算法之:人工神经网络(ANN)
人工神经网络ANN 1、引言2、人工神经网络(ANN)2.1 定义2.1.1 定义2.1.2 应用场景 2.2 核心原理2.3 实现方式2.4 算法公式2.5 代码示例 3、总结 1、引言 小屌丝:鱼哥,看新闻没? 小鱼:新闻天天看,啥事大惊小怪的。 小屌…...
Unity vscode在mac上的编译环境设置
在settings.json文件中配置以下信息。 settings.json路径一般在/Users/xxx/Library/Application Support/Code/User/settings.json {"omnisharp.useGlobalMono": "always","editor.fontLigatures": false,"omnisharp.useModernNet": …...
【Java】在高并发场景下,保证 Redis 缓存一致性的几种方案
在高并发场景下,保证 Redis 缓存一致性是一个常见的挑战。以下是几种常见的解决方案及其优缺点,以及相应的代码示例。 1. Cache Aside Pattern (旁路缓存模式) 原理 读取数据时,先读缓存,如果缓存没有命中,再从数据…...

GaussDB数据库的备份与恢复
1.逻辑备份-gs_dump gs_dump是一款用于导出数据库相关信息的工具,支持导出完整一致的数据库对象(数据库、模式、表、视图等)数据,同时不影响用户对数据库的正常访问。 备份sql语句 gs_dump是openGauss用于导出数据库相关信息的工…...

03-02-Vue组件之间的传值
前言 我们接着上一篇文章 03-01-Vue组件的定义和注册 来讲。 下一篇文章 04-Vue:ref获取页面节点–很简单 父组件向子组件传值 我们可以这样理解:Vue实例就是一个父组件,而我们自定义的组件(包括全局组件、私有组件)…...

昂达固态硬盘数据恢复方法:全面解析与操作指南
在数字化时代,数据已经成为我们生活和工作中不可或缺的一部分。而固态硬盘(SSD)由于其读写速度快、抗震性强等优点,慢慢取代了传统的机械硬盘,成为我们存储数据的主要选择。然而,即便再先进的存储设备&…...

C++的红黑树
目录 基本概念 插入结点的颜色 判断性质是否破坏 调整方式 u为g的右孩子 u存在且为红 u存在且为黑 u不存在 结论 红黑树结点定义 代码实现 基本概念 1、红黑树是一种特殊的二叉搜索树,每个结点会增加一个存储位表示结点的颜色(红或黑&#x…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...