JAVA学习笔记DAY3——菜鸟教程面向对象+数据结构部分

embedded/2025/1/15 13:53:17/

文章目录

  • Java 继承
    • 继承的特性
    • 继承关键字
    • 构造器
  • 重写(Override)与重载(Overload)
    • 重写 Override
      • 重写规则
    • 重载 Overload
  • Java 多态
    • 虚函数
    • 多态的实现方式
  • Java抽象类
    • 抽象方法
  • Java 封装
  • Java接口
    • 接口特性
    • 抽象类和接口的区别
    • 接口的继承
    • 标记接口
  • Java 枚举(enum)
    • 枚举类成员
  • Java包(package)
  • 数据结构
    • 数组(Arrays)
    • 列表(Lists)
    • 集合(Sets)
    • 映射(Maps)
    • 栈 (Stack)
    • 队列(Queue)
    • 堆(Heap)
    • 树(Trees)
    • 图(Graphs)
    • 其他
      • 枚举Enumeration
      • 位集合BitSet
      • 向量Vector
      • 字典Dictionary
      • 哈希表HashTable
      • 属性Properties
  • Java集合框架
  • Java ArrayList
  • Java LinkedList
  • Java HashSet
    • 方法
  • Java HashMap
    • 方法

部分示例代码来自 菜鸟教程

Java 继承

子类继承父类的特征和行为。

java">class 父类{
}
class 子类 extends 父类{
}

继承的特性

  1. 范围:子类拥有父类非private的属性、方法。
  2. 子类可以用自己的方式实现父类的方法。
  3. Java不支持多继承,但支持多重继承。
  4. 提高了类之间的耦合性。(算是缺点)

继承关键字

extends/implements

  • extends 继承类,只能单继承
  • implements 继承接口interface,可以多继承 implements A,B
  • super 访问当前对象父类成员 super.
  • this 指向自己的引用 this.
  • final 最终的,声明类则为最终类不能被继承,修饰方法则不能被子类重写。

构造器

子类不继承父类的构造器,只调用(可隐式)。
若父类构造器带参数,则必须显式调用,通过super(A,B)传参。

重写(Override)与重载(Overload)

重写和重载是Java多态性的不同表现。重写是父类和子类之间多态性的表现。重载是一个类的多态性表现。

重写 Override

子类中定义了一个与父类中方法名称相同、参数列表相同、返回类型一般相同的方法,子类方法的实现覆盖了父类方法的实现。

重写规则

  1. 返回类型在java7后可以不同,但必须是父类返回值的派生类。
  2. 子类访问权限只高不低。
  3. 子类父类是否在同一个包中,会影响能够重写方法的范畴。
  4. static的方法不能被重写,但能够被再次声明。
  5. 构造方法不能被重写。
  6. 重写方法不能抛出更宽泛的强制性异常,非强制性异常则可以随意抛出。

重载 Overload

在同一个类中,方法名字相同,参数列表不同(参数的数量、类型、顺序)。返回类型随意。
不同类中也可以存在重载,子类可以重载父类的方法。

Java 多态

同一个行为具有多个不同表现形式或形态的能力。
同一个接口使用不同的实例执行不同操作。

虚函数

虚函数的存在是为了多态。
Java里的普通函数就相当与C++的虚函数。
final才是非虚函数。

多态的实现方式

  1. 重写
  2. 接口
  3. 抽象类和抽象方法

Java抽象类

abstract 关键字声明
不能实例化对象的类,必须被继承才能被使用。

抽象方法

只声明,没有定义,方法名后直接分号。

  • 有抽象方法的类必定是抽象类

Java 封装

用private修饰属性,用getter和setter提供访问接口。

Java接口

Intereface是抽象方法的集合。

接口特性

  • 接口中的方法是隐式抽象的,public abstract
  • 接口中的变量则隐式为,public static final
  • 接口中的方法不能在接口中实现。

抽象类和接口的区别

  1. 一个类可以继承多个接口,但只能继承一个抽象类。
  2. 抽象类的成员变量可以是各种类型的。
  3. 抽象类可以有静态方法。(JDK1.8之后接口也可以)
  4. 抽象类可以有方法体。(JDK1.8之后接口也可以)

接口的继承

  • extends 接口继承接口,允许多继承
  • implements 类继承接口,允许多继承

标记接口

没有包含任何方法的接口。
只是为了给类做标记。
两种目的:

  1. 建立一个公共的父接口
  2. 向一个类添加数据类型

Java 枚举(enum)

一个特殊的类,其中的枚举值都是public static final的。

java">enum Color 
{ RED, GREEN, BLUE; 
} public class Test 
{ // 执行输出结果public static void main(String[] args) { Color c1 = Color.RED; System.out.println(c1); } 
}
//RED

values()返回全部值
oedinal()返回索引
valueOf()返回指定字符串值的枚举常量

java">enum Color 
{ RED, GREEN, BLUE; 
} public class Test 
{ public static void main(String[] args) { // 调用 values() Color[] arr = Color.values(); // 迭代枚举for (Color col : arr) { // 查看索引System.out.println(col + " at index " + col.ordinal()); } // 使用 valueOf() 返回枚举常量,不存在的会报错 IllegalArgumentException System.out.println(Color.valueOf("RED")); // System.out.println(Color.valueOf("WHITE")); } 
}

枚举类成员

可以有自己的变量、方法和构造函数。
构造函数会在调用时实现n次(n为枚举常量个数)

Java包(package)

类似于文件夹,用于区别类的命名空间。
把相互联系的【类、接口、枚举、注释】组织在同一个包中。
———————————————以上为面向对象部分—————————————————

数据结构

数组(Arrays)

插入和删除元素相对慢。

java">int[ ] array = new int[5];

列表(Lists)

  • Arraylist
    动态数组,快速尾部插入
java">List<String> arrayList = new ArrayList<>();
  • LinkedList
    双向链表
java">List<Integer> linkedList = new LinkedList<>();

集合(Sets)

用于存储不重复的元素

  • HashSet
    无序集合,基于HashMap实现。
java">Set<String> hashSet = new HashSet<>();
  • TreeSet
    基于红黑树实现,不允许重复元素。自动排序。

映射(Maps)

用于存储键值对

  • HashMap
    哈希表 无序
  • TreeMap
    红黑树 有序

栈 (Stack)

LIFO后进先出

java">Stack<Integer> stack = new Stack<>();

队列(Queue)

FIFO先进先出

  • LinkedList
  • PriorityQueue

堆(Heap)

优先队列的基础,可实现最大堆和最小堆。

树(Trees)

TreeNode类型

图(Graphs)

Java没有内建的图类

其他

枚举Enumeration

位集合BitSet

向量Vector

动态数组

字典Dictionary

一个抽象类,键值对

哈希表HashTable

属性Properties

Java集合框架

没看进去,暂时跳过

Java ArrayList

Java LinkedList

链表

  • 单向链表
  • 双向链表

Java HashSet

  • 基于HashMap,不允许有重复元素
  • 允许有null
  • 无序
  • 不是线程安全的
  • 实现了Set接口

方法

  • add
  • contains
  • remove
  • clear
  • size

Java HashMap

散列表,键值对映射
实现了Map接口。

方法

  • put(key,value)
  • get(key)

http://www.ppmy.cn/embedded/48919.html

相关文章

细说ARM MCU的串口接收数据的实现过程

目录 一、硬件及工程 1、硬件 2、软件目的 3、创建.ioc工程 二、 代码修改 1、串口初始化函数MX_USART2_UART_Init() &#xff08;1&#xff09;MX_USART2_UART_Init()串口参数初始化函数 &#xff08;2&#xff09;HAL_UART_MspInit()串口功能模块初始化函数 2、串口…

JDK8-17新特性

一、JDK8新特性:Lambda表达式 1.Lambda表达式及其使用举例 Lambda是一个匿名函数&#xff0c;我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格&#xff0c;使Java的语言表达能力…

Adobe Photoshop cc快速抠图与精致抠图方法

一、背景 Photoshop cc绝对是最好用的抠图and修图软件&#xff0c;但是即使最简单的抠图&#xff0c;每次用时都忘记怎么做&#xff0c;然后再去B站搜&#xff0c;非常费时&#xff0c;下面记录一下抠图过程&#xff0c;方便查阅。 一、Adobe Photoshop快速抠图 选择——主体…

uniapp怎么进行页面的跳转

在 UniApp 中&#xff0c;页面的跳转主要通过 navigator 组件或者 API 调用实现。以下是几种常见的页面跳转方法&#xff1a; 使用 <navigator> 组件 <navigator> 组件是页面链接的组件&#xff0c;类似于 HTML 中的 <a> 标签。你可以通过 url 属性指定要跳…

Python | Leetcode Python题解之第148题排序链表

题目&#xff1a; 题解&#xff1a; class Solution:def sortList(self, head: ListNode) -> ListNode:def merge(head1: ListNode, head2: ListNode) -> ListNode:dummyHead ListNode(0)temp, temp1, temp2 dummyHead, head1, head2while temp1 and temp2:if temp1.v…

C# WPF入门学习主线篇(十七)—— UniformGrid布局容器

C# WPF入门学习主线篇&#xff08;十七&#xff09;—— UniformGrid布局容器 欢迎来到C# WPF入门学习系列的第十七篇。在前几篇文章中&#xff0c;我们已经探讨了 Canvas、StackPanel、WrapPanel、DockPanel 和 Grid 布局容器及其使用方法。本篇博客将介绍另一种非常实用且简单…

Mysql的增、删、查、改

MySQL 是一个流行的关系型数据库管理系统&#xff0c;它支持 SQL&#xff08;结构化查询语言&#xff09;用于管理数据库中的数据。以下是使用 SQL 在 MySQL 中进行增&#xff08;INSERT&#xff09;、删&#xff08;DELETE&#xff09;、查&#xff08;SELECT&#xff09;、改…

Linux下的串口通信

串口通信 基础知识&#xff1a; 什么是串口&#xff1f; 串口全称串行通信接口&#xff0c;是一种常用于电子设备之间通信的异步&#xff0c;全双工接口&#xff0c;典型的串口通信只需要 3 根线&#xff0c;分别是地线 (GND)&#xff0c;发送线(TX)&#xff0c;接收线(RX)。如…