JavaSE 学习记录

news2024/11/16 6:42:08

1. Java 内存

在这里插入图片描述

在这里插入图片描述

2. this VS super

thissuper是两个关键字,用于引用当前对象和其父类对象

  1. this 关键字:
  • this 关键字用于引用当前对象,即调用该关键字的方法所属的对象。

  • 主要用途包括:

    • 在类的实例方法中,通过 this 来引用当前对象的实例变量或调用当前对象的其他方法。
    • 在构造方法中,通过 this 来调用其他构造方法this()或this(...)或引用当前对象的实例变量this.instanceVariable
  1. super 关键字:
  • super 关键字用于引用父类的成员,即调用父类的方法或访问父类的实例变量。

  • 主要用途包括:

    • 在子类中,通过 super 来调用父类的构造方法super()或super(...)或访问父类的方法和实例变量super.xxx
  1. 注意:

  2. super调用父类的构造方法,必须在构造方法的第一个(this() 也必须在第一个,所以不能同时调用 --> 3.)

  3. super必须只能出现在子类的方法或者构造方法中!

  4. super和this不能同时调用构造方法!

3. 重载(Overload) VS 重写(Override)

  • 重载:在一个类中同一个方法的不同实现

    • 方法名必须相同;

    • 参数列表必须不同(参数个数或者参数类型不同)

    • 修饰符可以相同也可以不同(修饰符不能作为判断是否重写的标志)

    • 抛出的异常同修饰符,可以相同也可以不同,不能作为判断是否重写的标志

  • 重写:需要有继承关系,子类重写父类的方法!

    • 方法名必须相同;

    • 参数列表列表必须相同;

    • 修饰符:范围可以扩大但不能缩小: public>Protected>Default>private

    • 抛出的异常:范围,可以被缩小,但不能扩大;ClassNotFoundException–> Exception(大)

4. 面向对象编程(OOP)的三大特性

面向对象编程(OOP)的三大特性是封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)。

  • 封装(Encapsulation)

    • 封装是指将对象的状态(数据)和行为(方法)包装在一起,并对外部隐藏对象的内部实现细节。
    • 通过封装,对象的内部细节对外部不可见,只提供有限的接口供外部访问和操作,从而提高了代码的可维护性、可重用性和安全性。
    • 例如,使用私有(private)访问修饰符来限制对对象的状态的直接访问,通过公有(public)方法来提供对状态的间接访问。
  • 继承(Inheritance)

    • 继承是指一个类(子类)可以从另一个类(父类)继承其属性和方法,并且可以新增或修改已继承的属性和方法。
    • 继承可以帮助代码实现重用,避免重复编写相似的代码,同时也可以通过建立类之间的层次结构来组织和管理代码。
    • 通过继承,子类可以拥有父类的属性和方法,从而实现代码的扩展和复用。
  • 多态(Polymorphism)

    • 多态是指同一个方法调用可以在不同的对象上具有不同的行为。

    • 多态通过方法重写(Override)和方法重载(Overload)来实现。

    • 方法重写是指子类可以重写父类的方法,从而在运行时根据对象的实际类型来调用相应的方法实现,实现了动态绑定

      存在条件:继承条件!方法需要重写!父类引用指向子类对象(Object o = new Person())!

    • 方法重载是指在一个类中定义多个同名但参数列表不同的方法,编译器根据方法的参数列表选择合适的方法进行调用,实现了静态绑定

    • 多态提高了代码的灵活性和可扩展性,使得代码可以更加通用和可维护。

5. instanceof

instanceof 是 Java 中的一个关键字,用于检查一个对象是否是一个类的实例,或者是否是该类的子类的实例。它的语法形式如下:

object instanceof Class

其中,object 是要检查的对象,Class 是要检查的类或接口。

instanceof 操作符的返回结果有两种可能:

  1. 如果 object 是 Class 的实例,或者是 Class 的子类的实例,或者是实现了 Class 接口的实例,则返回 true
  2. 如果 object 不是 Class 的实例,则返回 false

6. 静态代码块、匿名代码块和构造方法的执行顺序

  1. 静态代码块按照声明顺序执行。
  2. 匿名代码块在每次创建对象时执行,按照声明顺序执行。
  3. 构造方法在匿名代码块执行之后执行。

7. 接口(Interface)和抽象类(Abstract Class)

  1. 成员方法
  • 接口中的方法默认是抽象的,即接口中的方法没有具体的实现,而抽象类中可以包含抽象方法和具体方法的实现。
  • 在接口中声明的方法都是隐式地声明为 public abstract,而抽象类中的抽象方法必须使用 abstract 关键字显式声明。
  1. 多继承
  • Java 接口支持多继承,一个类可以实现多个接口,从而具备多个接口的特性。
  • Java 抽象类不支持多继承,一个类只能继承一个抽象类,但可以同时实现多个接口。
  1. 变量
  • 接口中的变量默认是 public static final 类型的常量,可以省略这些修饰符,因为它们是隐式的。
  • 抽象类中可以包含实例变量和静态变量,可以拥有各种访问修饰符。
  1. 构造方法
  • 接口中不能包含构造方法,因为接口中的方法都是抽象的,无法实例化。

  • 抽象类可以包含构造方法,用于初始化抽象类的实例。

    public abstract class MyAbstractClass {
        int b = 1;
        public MyAbstractClass(int b) {
            this.b = b;
        }
        public abstract void method();
    }
    
            MyAbstractClass myAbstractClass = new MyAbstractClass(1) {
                @Override
                public void method() {}
            };
    
  1. 实现方式
  • 类通过 implements 关键字来实现接口,而通过 extends 关键字来继承抽象类。

8. Java 内部类

  • 成员内部类(Member Inner Class)

    成员内部类是定义在另一个类中的类。它与外部类有关联,并可以访问外部类的成员,包括私有成员。成员内部类可以有访问修饰符,并且可以被外部类的成员方法或其他类使用。

    OuterClass.InnerClass inner = outer.new InnerClass();
    
  • 静态内部类(Static Inner Class)

    静态内部类是定义在另一个类中的静态类。它与外部类的实例无关,并且可以直接访问外部类的静态成员,但不能访问外部类的非静态成员。静态内部类可以有自己的静态成员和方法。

    OuterClass.StaticInnerClass inner = new OuterClass.StaticInnerClass();
    
  • 局部内部类(Local Inner Class)

    局部内部类是定义在方法内部的类。它只在定义它的方法内部可见,不能被方法之外的其他类访问。局部内部类可以访问外部方法的局部变量,但必须为 final 或等效的变量。

  • 匿名内部类(Anonymous Inner Class)

    匿名内部类是没有名字的内部类,通常用于创建一个实现接口或继承抽象类的临时类实例。它一般在创建实例的同时进行类的定义,并且不能有显式的构造方法。

9. Error VS Exception

ErrorException 都是继承自 Throwable 类的子类,用于表示在程序执行过程中可能发生的问题,但它们之间有一些重要的区别。

  1. Error(错误)
  • Error 代表了严重的系统问题,通常是由于虚拟机(JVM)运行环境出现了错误导致的,例如内存不足、栈溢出等。Error 通常是无法恢复或处理的,应用程序不应该捕获 Error
  • 一旦发生 Error,程序通常无法继续执行,并且会导致程序终止。常见的 Error 包括 OutOfMemoryErrorStackOverflowError 等。
  1. Exception(异常)
  • Exception 也代表了程序执行过程中的问题,但相比 ErrorException 更多地表示的是可以被程序本身处理的异常情况。Exception 分为两种类型:可检查异常(checked exception)和运行时异常(runtime exception)
  • 可检查异常(checked exception):编译器会强制要求程序员处理这类异常,要么使用 try-catch 块捕获并处理异常,要么在方法签名中使用 throws 关键字声明抛出异常。
  • 运行时异常(runtime exception):这类异常通常是由程序错误导致的,编译器不会强制要求程序员处理这些异常。常见的运行时异常包括 NullPointerExceptionArrayIndexOutOfBoundsException 等。
  1. Error 如内存不足、栈溢出等在哪些情况下会发生?
  • 内存不足(OutOfMemoryError):当 Java 程序请求的内存超出了 JVM 可用的内存资源时,会抛出 OutOfMemoryError。这可能是因为程序内存泄漏、创建了过多的对象、处理大量数据等原因导致的。

  • 栈溢出(StackOverflowError):当方法调用层级过深,栈空间无法容纳更多的方法调用时,会发生栈溢出。这通常是由于递归调用或者无限循环导致的。

  • 虚拟机错误(VirtualMachineError):这类错误包括 InternalErrorUnknownError 等,通常是指 JVM 本身发生了无法处理的错误,例如 JVM 内部出现问题。

  • 类加载错误(LinkageError):当 Java 虚拟机尝试加载类时出现问题,可能会抛出 LinkageError,例如版本不匹配、类文件损坏等情况。

  • 其他错误(Error):除了上述常见的错误外,还有一些其他的 Error 类型,如 AssertionErrorNoClassDefFoundError 等。

这些 Error 类型通常表示了严重的系统问题,需要进行相应的处理或者对系统进行调整。

  1. 受检异常和非受检异常包括哪些异常?
  • 受检异常(Checked Exception):这些异常在编译时就需要程序员处理,否则编译器会报错。常见的受检异常包括:

    • IOException:输入输出操作异常,如文件读写异常。
    • SQLException:数据库操作异常。
    • ClassNotFoundException:类未找到异常,通常发生于使用反射加载类时。
  • 非受检异常(Unchecked Exception):也称为运行时异常(Runtime Exception),这些异常不需要在编译时处理,但程序在运行时可能会抛出。常见的非受检异常包括:

    • NullPointerException:空指针异常,尝试在空对象上调用方法或访问属性时抛出。
    • ArrayIndexOutOfBoundsException:数组越界异常,访问数组时超出了合法范围。
    • ArithmeticException:算术异常,例如除以零。
    • IllegalArgumentException:非法参数异常,传递给方法的参数不合法。

10. JavaSE 总结

在这里插入图片描述

参考

狂神说笔记——Java SE基础01 - subeiLY - 博客园

狂神说笔记——Java SE基础02

狂神说笔记——Java SE基础03

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

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

相关文章

鸿蒙ArkTS声明式开发:跨平台支持列表【触摸事件】

触摸事件 当手指在组件上按下、滑动、抬起时触发。 说明: 开发前请熟悉鸿蒙开发指导文档: gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独…

Spring从零开始学使用系列(四)之@PostConstruct和@PreDestroy注解的使用

如果各位老爷觉得可以,请点赞收藏评论,谢谢啦!! 文章中涉及到的图片均由AI生成 公众号在最下方!!! 目录 1. 介绍 1.1 PostConstruct概述 1.2 PreDestroy概述 2. 基本用法 2.1 注册CommonAnn…

Docker进入容器查看内容并从容器里拷贝文件到宿主机

工作中需要从docker正在运行的镜像中复制文件到宿主机,于是便将这个过程记录了下来。 (1)查看正在运行的容器 通过以下命令,可以查看正在运行的容器: docker ps (2)进入某个容器执行脚本 我…

Pytest对协程异步函数进行单元测试

安装 安装基础包 pytest,pytest-asyncio pip install pytest pytest-asyncio测试: pytest -s -v ./python-code/do-async/aiohttp_session_pytest.py书写规范 类名必须以 Test 开头方法和函数名必须以test开头 class TestAddFunc(object): # 测试…

【mysql】in和exists的区别,not in、not exists、left join的相互转换

【mysql】in和exists的区别,not in、not exists、left join的相互转换 【一】in介绍【1】in中数据量的限制【2】null值不参与in或not in,也就是说in and not in 并不是全量值,排除了null值【3】in的执行逻辑 【二】exists介绍【1】exists no…

学 Go 具体能干什么?

学习 Go (Golang) 后,你可以从事许多不同的工作和项目,Go 语言以其高性能、并发处理和简洁的语法而闻名,特别适合以下几个领域: 1. 后端开发 Go 在后端开发中非常流行,特别适合构建高性能的 Web 服务和 API。 Web 框…

前端开发-添加公用的ts文件,并在Vue文件中引用

一般我们把页面要用的公用函数写在一个ts文件中 通过调用这个ts文件让我们可以在vue文件中使用函数 Eg:我们现在创建一个formRules.ts文件 然后在我们需要调用该函数体的vue文件中 import { required } from "/utils/formRules";有可能语法一开始会提示…

Shell环境变量深入:自定义系统环境变量

Shell环境变量深入:自定义系统环境变量 目标 能够自定义系统级环境变量 全局配置文件/etc/profile应用场景 当前用户进入Shell环境初始化的时候会加载全局配置文件/etc/profile里面的环境变量, 供给所有Shell程序使用 以后只要是所有Shell程序或命令使用的变量…

推荐丨快速申请免费域名证书

背景: 域名是一个IP地址上的“面具” 。一个域名的目的是便于记忆和沟通的一组服务器的地址(网站,电子邮件,FTP等)。 通俗的说,域名就相当于一个家庭的门牌号码,别人通过这个号码可以很容易的找到你。 域名不仅便于记…

Python轻松玩转excel操作指导

目录 一、一图概览 二、表格操作 三、内容操作 四、单元格操作 五、Pandas实现表格操作 六、常见场景示例 一、一图概览 ​ ​本文主要对openpyxl库的常用表格操作进行了梳理,熟练的运用后可极大地提升工作效率。 二、表格操作 #创建一个表格sheet.xlsx #…

python数据分析-基于数据挖掘对APP评分的预测

前言 当我们谈论关于APP用户分析与电子商务之间的联系时,机器学习在这两个领域的应用变得至关重要。App用户分析和电子商务之间存在着密切的关联,因为用户行为和偏好的深入理解对于提高用户体验、增加销售以及优化产品功能至关重要。故本文基于K-近邻模…

揭秘C++ String容器:字符串操作的艺术

目录 ​编辑 引言 一、初识std::string:构造与初始化 二、字符串的操纵艺术:拼接、查找与替换 三、访问与遍历:字符的细腻触感 四、大小与容量:动态调整的智慧 五、进阶功能:探索更多可能 结语 引言 在C标准库…

弱类型解析

php中 转化为相同类型后比较 先判断数据类型后比较数值 var_dump("asdf"0);#bool(true) var_dump("asdf"1);#bool(false) var_dump("0asdf"0);#bool(true) var_dump("1asdf"1);#bool(true)1、md5撞库 例&#xff1a; <?php incl…

【Python从入门到进阶】55、使用Python轻松操作Mysql数据库

一、引言 1、MySQL数据库简介 MySQL是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它使用了一种名为Structured Query Language&#xff08;SQL&#xff09;的查询语言来管理数据。MySQL因其高性能、可扩展性、易用性和稳定性而广受欢迎&#x…

【论文复现】LSTM长短记忆网络

LSTM 前言网络架构总线遗忘门记忆门记忆细胞输出门 模型定义单个LSTM神经元的定义LSTM层内结构的定义 模型训练模型评估代码细节LSTM层单元的首尾的处理配置Tensorflow的GPU版本 前言 LSTM作为经典模型&#xff0c;可以用来做语言模型&#xff0c;实现类似于语言模型的功能&am…

数据结构:树(3)【二叉树链式结构实现】【二叉树的前序,中序,后序遍历】【求二叉树全部结点个数】【求二叉树叶子结点个数】【求二叉树的深度】【单值二叉树】

一.二叉树链式结构的实现 二叉树的链式结构的实现相对于顺序结构的实现就没有那么多的讲究了。就是普通的链表&#xff0c;只不过多了一个指向的指针。 具体结构如下&#xff1a; typedef int BTDataType; typedef struct BinaryTreeNode {BTDataType data;struct BinaryTre…

云计算和大数据处理

文章目录 1.云计算基础知识1.1 基本概念1.2 云计算分类 2.大数据处理基础知识2.1 基础知识2.3 大数据处理技术 1.云计算基础知识 1.1 基本概念 云计算是一种提供资源的网络&#xff0c;使用者可以随时获取“云”上的资源&#xff0c;按需求量使用&#xff0c;并且可以看成是无…

一.架构设计

架构采用 ddd 架构&#xff0c;不同于传统简单的三层的架构&#xff0c;其分层的思想对于大家日后都是很有好处的&#xff0c;会给大家的思想层级&#xff0c;提高很多。 传统的项目 现有的架构 采取ddd架构&#xff0c;给大家在复杂基础上简化保留精髓&#xff0c;一步步进行…

以太坊钱包

以太坊钱包是你通往以太坊系统的门户。它拥有你的密钥&#xff0c;并且可以代表你创建和广播交易。选择一个以太坊钱包可能很困难&#xff0c;因为有很多不同功能和设计选择。有些更适合初学者&#xff0c;有些更适合专家。即使你现在选择一个你喜欢的&#xff0c;你可能会决定…

游戏找不到d3dcompiler_43.dll怎么办,教你5种可靠的修复方法

在电脑使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到d3dcompiler43.dll”。这个问题通常出现在游戏或者图形处理软件中&#xff0c;它会导致程序无法正常运行。为了解决这个问题&#xff0c;我经过多次尝试和总结&#xff0c;找到了以下五…