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

复习java5.26

面向对象和面向过程

面向过程:把一个任务分成一个个的步骤,当要执行这个任务的时候,只需要依次调用就行了

面向对象:把构成任务的事件构成一个个的对象,分别设计这些对象(属性和方法)、然后把这些对象包装成有自己完整功能的系统。

举例:

面向对象的特征
面向对象的四大特征:继承、多态、封装、抽象;

封装:把每一个对象的信息都隐藏起来,只留出少量的接口(方法)给外界访问来获取和更改对象的信息,良好的封装可以有效的保证数据的合理性。

继承:从已有的类中派生出新的类(新的类继承旧的类,旧的类叫做新的类的父类),新的对象具有父类的属性和方法并可以具有自己独有的属性和方法,java中继承是单继承(每一个子类都只能有一个直接的父类)

多态:多态就是事物的多种形态,在不同的情况下所表现的不同的形式。

多态的存在条件:

  1. 继承或实现:在多态中必须存在有继承或实现关系的子类和父类
  2. 方法的重写:子类对父类中的某些方法进行重新定义
  3. 父类引用指向子类对象,父类类型:指子类对象继承的父类类型,或实现的父接口类型

形式:

父类类型 变量名 = 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…...

如何通过Outfit字体打造专业级视觉体验?设计师必备指南

如何通过Outfit字体打造专业级视觉体验?设计师必备指南 【免费下载链接】Outfit-Fonts The most on-brand typeface 项目地址: https://gitcode.com/gh_mirrors/ou/Outfit-Fonts 在数字化设计领域,字体不仅是信息传递的载体,更是品牌个…...

避开这3个坑,你的LVGL界面动画才能流畅不卡顿:定时器使用避坑指南

避开这3个坑,你的LVGL界面动画才能流畅不卡顿:定时器使用避坑指南 在嵌入式GUI开发中,流畅的动画效果往往能大幅提升用户体验。但很多开发者在使用LVGL定时器实现动画时,常会遇到界面卡顿、响应迟缓的问题。这通常不是LVGL本身的问…...

2025_NIPS_CELLVERSE: Do Large Language Models Really Understand Cell Biology?

一、文章主要内容总结 该研究聚焦于大语言模型(LLMs)在细胞生物学领域的应用能力评估,核心贡献是构建了首个统一的语言中心型基准数据集CELLVERSE,并通过系统实验揭示了LLMs在单细胞分析任务中的表现与局限: 背景与问题:现有单细胞分析方法存在缺乏统一性(需为不同多组…...

VibeVoice保姆级教程:从部署到实战,打造你的专属语音助手

VibeVoice保姆级教程:从部署到实战,打造你的专属语音助手 1. 引言:为什么选择VibeVoice? 想象一下,你正在开发一个需要语音交互的应用,或者想为视频内容添加专业配音,又或者需要为视障用户提供…...

智能抖音内容采集工具:自动化下载方案让效率提升20倍

智能抖音内容采集工具:自动化下载方案让效率提升20倍 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…...

软件测试新方法:利用Lingbot-Depth-Pretrain-ViTL-14进行GUI界面立体元素测试

软件测试新方法:利用Lingbot-Depth-Pretrain-ViTL-14进行GUI界面立体元素测试 你有没有遇到过这种情况?一个软件界面看起来功能都正常,按钮能点,输入框能输,但用起来就是感觉“不对劲”。比如,一个弹窗好像…...

互联网创业者的AI助手:用Nanbeige 4.1-3B快速生成产品文案与市场分析

互联网创业者的AI助手:用Nanbeige 4.1-3B快速生成产品文案与市场分析 你是不是也遇到过这种情况?产品功能已经开发得七七八八,但产品介绍文档还是一片空白;明天就要发新品预热微博,文案却憋了一下午只写出个标题&…...

手把手教你用FireRed-OCR:5步搞定复杂文档精准解析

手把手教你用FireRed-OCR:5步搞定复杂文档精准解析 1. 为什么选择FireRed-OCR? 在日常工作和学习中,我们经常遇到需要从PDF、扫描件或图片中提取文字和表格的情况。传统OCR工具面对复杂排版时往往力不从心,而FireRed-OCR Engine…...

华硕笔记本智能管理:用G-Helper实现高效调节与散热优化

华硕笔记本智能管理:用G-Helper实现高效调节与散热优化 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, S…...

灵感画廊实际作品:基于‘纪实瞬间’预设的城市街景写实图像生成

灵感画廊实际作品:基于‘纪实瞬间’预设的城市街景写实图像生成 “见微知著,凝光成影。将梦境的碎片,凝结为永恒的视觉诗篇。” 今天,我们不谈复杂的参数,也不讲枯燥的部署。我想带你走进一个特别的创作空间——灵感画…...