复习java5.26

news2024/11/16 9:30:04
面向对象和面向过程

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

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

举例:

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

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

继承:从已有的类中派生出新的类(新的类继承旧的类,旧的类叫做新的类的父类),新的对象具有父类的属性和方法并可以具有自己独有的属性和方法,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;
    }
    @Override
    public 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;
    }
    @Override
    public 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;
    }

    @Override
    public Address clone() throws CloneNotSupportedException {
        Address clone = (Address) super.clone();
        return clone;
    }
}

运行结果:

可以看到原对象的值不会受到拷贝对象的影响。

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

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

相关文章

国内最受欢迎的7大API供应平台对比和介绍||电商API数据采集接口简要说明

本文将介绍7款API供应平台:聚合数据、百度APIStore、Apix、数说聚合、通联数据、HaoService、datasift 。排名不分先后! 免费实用的API接口 第一部分 1、聚合数据(API数据接口_开发者数据定制) 2、百度API Store(API集市_APIStore…

数据安全不容小觑:.hmallox勒索病毒的防范与应对

一、引言 随着网络技术的飞速发展,网络安全问题日益凸显,其中勒索病毒作为一种极具破坏性的网络攻击手段,已在全球范围内造成了巨大的经济损失和社会影响。在众多勒索病毒中,.hmallox勒索病毒以其狡猾的传播方式和强大的加密能力…

27【Aseprite 作图】盆栽——拆解

1 橘子画法拆解 (1)浅色3 1 0;深色0 2 3 就可以构成一个橘子 (2)浅色 2 1;深色1 0 (小个橘子) (3)浅色 2 1 0;深色1 2 3 2 树根部分 (1)底部画一条横线 (2)上一行 左空2 右空1 【代表底部重心先在右】 (3)再上一行,左空1,右空1 (4)再上一行,左突出1,…

L01_JVM 高频知识图谱

这些知识点你都掌握了吗?大家可以对着问题看下自己掌握程度如何?对于没掌握的知识点,大家自行网上搜索,都会有对应答案,本文不做知识点详细说明,只做简要文字或图示引导。 类的生命周期 类加载器 JVM 的内存…

汽车IVI中控开发入门及进阶(二十):显示技术之LCDC

TFT LCD=Thin Film Transistor Liquid Crystal Display LCDC=LCD Controller 薄膜晶体管液晶显示器(TFT LCD)控制器在驱动现代显示技术的功能和性能方面起着关键作用。它们充当屏幕后面的大脑,仔细处理数字信号,并将其转化为精确的命令,决定每个像素的行为,决定它们的…

数据库系统概论(第5版)复习笔记

笔记的Github仓库地址 👆这是笔记的gihub仓库,内容是PDF格式。 因为图片和代码块太多,放到CSDN太麻烦了(比较懒🤣) 如果感觉对各位有帮助的话欢迎点一个⭐\^o^/

Unity 生成物体的几种方式

系列文章目录 unity工具 文章目录 系列文章目录前言👉一、直接new的方式创建生成1-1.代码如下1-2. 效果图 👉二、使用Instantiate创建生成(GameObject)2-1.代码如下2-2.效果如下图 👉三.系统CreatePrimitive创建生成3…

C++编程揭秘:虚表机制与ABI兼容性的实例剖析

前言: 假设你的应用程序引用的一个库某天更新了,虽然 API 和调用方式基本没变,但你需要重新编译你的应用程序才能使用这个库,那么一般说这个库是源码兼容(Source compatible);反之,如…

BGP策略实验(路径属性和选路规则)

要求: 1、使用preval策略,确保R4通过R2到达192.168.10.0/24 2、使用AS Path策略,确保R4通过R3到达192.168.11.0/24 3、配置MED策略,确保R4通过R3到达192.168.12.0/24 4、使用Local Preference策略,确保R1通过R2到达19…

不同网段的通信过程

这里的AA和HH指的是mac地址,上面画的是路由器 底下的这个pc1,或者其他的连接在这里的pc,他们的默认网关就是路由器的这个192.168.1.1/24这个接口 来看看通信的过程 1、先判断(和之前一样) 2、去查默认网关&#xf…

【MySQL】库的基础操作

🌎库的操作 文章目录: 库的操作 创建删除数据库 数据库编码集和校验集 数据库的增删查改       数据库查找       数据库修改 备份和恢复 查看数据库连接情况 总结 前言:   数据库操作是软件开发中不可或缺的一部分&#xff0…

Hibernate

主流ORM框架Object Relation Mapping对象关系映射,将面向对象映射成面向关系。 如何使用 1、导入相关依赖 2、创建Hibernate配置文件 3、创建实体类 4、创建实体类-关系映射文件 5、调用Hibernate API完成操作 具体操作 1、创建 Maven工程,在pom.xml中导…

应用程序图标提取

文章目录 [toc]提取过程提取案例——提取7-zip应用程序的图标 提取过程 找到需要提取图标的应用程序的.exe文件 复制.exe文件到桌面,并将复制的.exe文件后缀改为.zip 使用解压工具7-zip解压.zip文件 在解压后的文件夹中,在.rsrc/ICON路径下的.ico文件…

01.并发编程简介

1 什么是并发编程 所谓并发编程是指在一台处理器上“同时”处理多个任务。并发是在同一实体上的多个事件。多个事件在同一时间间隔发生。 2 为什么我们要学习并发编程? 最直白的原因就是因为面试需要,大厂的 Java 岗的并发编程能力属于标配。 而在非大厂…

vscode远程连接Ubuntu mysql服务器

注意:刚开始使用root用户死活连接不上,可能就是root用户没有权限的问题,可以尝试创建一个新的数据库用户,授予权限进行连接 ubuntu安装mysql 创建新用户 执行:sudo apt-get install mysql-server安装服务器(yum) 执…

【排序算法】选择排序以及需要注意的问题

选择排序的基本思想:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。 第一种实现方法: void SelectSort(int* arr, int n) {for (int j 0…

Python Beautiful Soup 使用详解

大家好,在网络爬虫和数据抓取的领域中,Beautiful Soup 是一个备受推崇的 Python 库,它提供了强大而灵活的工具,帮助开发者轻松地解析 HTML 和 XML 文档,并从中提取所需的数据。本文将深入探讨 Beautiful Soup 的使用方…

C#调用HttpClient.SendAsync报错:System.Net.Http.HttpRequestException: 发送请求时出错。

C#调用HttpClient.SendAsync报错:System.Net.Http.HttpRequestException: 发送请求时出错。 var response await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken);问题出在SSL/TLS,Windows Server 2012不支持…

深入浅出MySQL事务实现底层原理

重要概念 事务的ACID 原子性(Atomicity):即不可分割性,事务中的操作要么全不做,要么全做一致性(Consistency):一个事务在执行前后,数据库都必须处于正确的状态&#xf…

构建智慧科技园区的系统架构:数字化驱动未来创新

随着科技的不断进步和数字化转型的加速推进,智慧科技园区已成为当今城市发展的重要组成部分。在智慧科技园区建设中,系统架构的设计和实施至关重要,对于提升园区管理效率、优化资源利用、促进创新发展具有重要意义。 一、智慧科技园区系统架构…