Java基础核心知识学习笔记

方法重载

请记住下面重载的条件

  • 方法名称必须相同。
  • 参数列表必须不同(个数不同、或类型不同、参数类型排列顺序不同等)。
  • 方法的返回类型可以相同也可以不相同。
  • 仅仅返回类型不同不足以成为方法的重载。
  • 重载是发生在编译时的,因为编译器可以根据参数的类型来选择使用哪个方法。

方法的重写

  • 重写的方法必须要和父类保持一致,包括返回值类型,方法名,参数列表也都一样。
  • 重写的方法可以使用 @Override 注解来标识
  • 子类中重写方法的访问权限不能低于父类中方法的访问权限。

This关键字

这段代码比较精妙,精妙在哪呢,我一个 eatApple0方法竟然可以调用多次,你在后面还可以继续调

用,这就很神奇了,为啥呢? 其实就是 this 在作票了,我在 eatApple 方法中加了一个 return

this 的返回值,也就是说哪个对象调用 eatApple 方法都能返回对象的自身。

main 方法中传递了一个 int 值为 10 的参数,它表示的就是苹果的数量,并把这个数量赋给了 num 全局变量。所以 num 的值现在就是 10。

你会发现上面这段代码使用的不是this,而是this(参数)。它相当于调用了其他构造方法,然后传递参数进去。这里注意一点:this0必须放在构造方法的第一行,否则编译不通过

  1. public Apple(int num):
    • 这个构造方法接收一个整数参数 num,表示苹果的数量。
    • 它调用了另一个构造方法 Apple(int num, String color),并传入了 num 和一个固定的字符串 "红色 " 作为参数。
    • 这里的 this(num, "红色 ") 表示调用 Apple(int num, String color) 构造方法,其中 this 指的是当前正在创建的对象。
  1. public Apple(String color):
    • 这个构造方法接收一个字符串参数 color,表示苹果的颜色。
    • 它调用了另一个构造方法 Apple(int num, String color),并传入了默认数量 1color 作为参数。
    • 这里的 this(1, color) 表示调用 Apple(int num, String color) 构造方法,其中 this 指的是当前正在创建的对象。
  1. public Apple(int num, String color):
    • 这个构造方法接收两个参数:一个整数 num 和一个字符串 color
    • 在这个构造方法中,this 关键字被用来给成员变量 numcolor 分别赋值为传入的参数 numcolor
    • 这里的 this.num = num;this.color = color; 中的 this 指的是当前正在创建的对象,而 numcolor 是传入构造方法的参数。

  • Apple myApple = new Apple(5); 会创建一个数量为 5、颜色为红色的苹果。
  • Apple myGreenApple = new Apple("绿色"); 会创建一个数量为 1、颜色为绿色的苹果。
  • Apple myApples = new Apple(10, "黄色"); 会直接创建一个数量为 10、颜色为黄色的苹果。

继承

继承的关键字是extends

多态

多态指的是同一个行为具有多个不同表现形式。是指一个类实例(对象)的相同方法在不同情形下具有不同表现形式。封装和继承是多态的基础,也就是说,多态只是一种表现形式而已。

多态的实现具有三种充要条件

  • 继承
  • 重写父类方法
  • 父类引用指向子类对象

你可以发现 main 方法中有一个很神奇的地方, Fruit fruit = new Apple( ) , Fruit 类型的对象

竟然指向了 Apple 对象的引用,这其实就是多态 ->父类引l用指向子类对象,因为 Apple 继承于

Fruit,并且重写了 eat 方法,所以能够表现出来多种状态的形式。

static关键字

final关键字

接口

interface

抽象类

abstract

异常

常见的Exception

RuntimeException 和 CheckedException

与 Exception 有关的 Java 关键字

throws 和 throw

try 、 finally 、 catch

集合

Iterable接口

顶层接口

ArrayList

Vector

Vector 同 ArrayList 一样,都是基于数组实现的,只不过 Vector 是一个线程安全的容器, 它对内部的每

个方法都简单粗暴的上锁,避免多线程引起的安全性问题,但是通常这种同步方式需要的开销比较大

因此,访问元素的效率要远远低于 ArrayList。

还有一点在于扩容上,ArrayList 扩容后的数组长度会增加 50%,而 Vector 的扩容长度后数组会增加

倍。

LinkedList

双向链表

Stack

堆栈

HashSet

TreeSet

LinkedHashSet

Map类

Collections类

Collections 不属于 Java 框架继承树上的内容,它属于单独的分支, Collections 是一个包装类,它的作

用就是为集合框架提供某些功能实现,此类只包括静态方法操作或者返回 collections。

汇总图

泛型

泛型其实就是一种参数化的集合,它限制了你添加进集合的类型。泛型的本质就是一种参数化类型。多

态也可以看作是泛型的机制。一个类继承了父类,那么就能通过它的父类找到对应的子类,但是不能通

过其他类来找到具体要找的这个类。泛型的设计之处就是希望对象或方法具有最广泛的表达能力。

类、接口、方法、通配符

泛型方法的使用

泛型接口的使用

问题:接口中方法不是不能有方法体吗,为什么max有

从 Java 8 开始,引入了两种特殊类型的接口方法,它们可以包含方法体:

  1. 默认方法 (default 方法):这些方法允许为接口方法提供默认实现。默认方法在接口中定义,并使用 default 关键字标记。
  2. 静态方法 (static 方法):这些方法允许在接口中定义静态方法,它们的行为类似于类中的静态方法,而不是对象的方法。

泛型通配符

反射

Java 反射机制是在程序的运行过程中,对于任何一个类,都能够知道它的所有属性和方法;对于任意

一个对象,都能够知道调用它的任意属性和方法,这种动态获取信息以及动态调用对象方法的功能称为

java语言的反射机制。

反射举例解释一下

枚举

values() 方法显示顺序的值。

IO

File类

IO类

注解

AOP

AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,它旨在通过分离横切关注点(cross-cutting concerns)来提高代码的模块化程度。AOP 允许开发者将与业务逻辑无关的功能(如日志记录、事务管理、权限控制等)从业务逻辑中解耦出来,封装成独立的组件。

AOP 的核心概念

  • 切面(Aspect):封装了横切关注点的模块。例如,日志记录或事务管理等。
  • 连接点(Join Point):程序执行过程中的特定点,如方法调用或异常抛出等。
  • 通知(Advice):在特定连接点上执行的动作。通知可以是前置通知(before)、后置通知(after)、环绕通知(around)等。
  • 切入点(Pointcut):匹配连接点的表达式,用来指定哪些连接点应应用通知。
  • 目标对象(Target Object):被通知的对象。
  • 代理(Proxy):由 AOP 框架创建的对象,用来拦截目标对象的方法调用,并插入通知。

AOP 的使用场景

  1. 日志记录:在方法开始和结束时记录日志。
  2. 性能监控:测量方法执行的时间。
  3. 事务管理:自动管理事务边界。
  4. 权限验证:在方法调用前进行权限检查。
  5. 缓存管理:自动缓存方法结果。

AOP 的实现方式

AOP 可以通过多种方式实现,包括但不限于:

  • Spring AOP:Spring 框架提供的 AOP 支持,广泛用于 Java 应用程序中。
  • AspectJ:一种强大的 AOP 框架,支持编译时、加载时和运行时的织入。

Spring AOP 示例

以下是一个使用 Spring AOP 的简单示例,展示了如何为一个服务类的方法添加日志记录通知。

步骤 1: 创建一个切面类

创建一个切面类 LoggingAspect,该类包含前置通知和后置通知。

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;@Aspect
@Component
public class LoggingAspect {@Around("execution(* com.example.service.*.*(..))")
11    public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {12        System.out.println("Before method: " + joinPoint.getSignature().getName());13        try {14            Object result = joinPoint.proceed();15            System.out.println("After method: " + joinPoint.getSignature().getName());16            return result;17        } catch (Throwable ex) {18            System.out.println("Error in method: " + joinPoint.getSignature().getName());19            throw ex;20        }21    }
22}
步骤 2: 创建一个服务类

创建一个服务类 Service,该类包含一个方法。

java深色版本1import org.springframework.stereotype.Service;
2
3@Service
4public class Service {
5
6    public void doSomething() {
7        System.out.println("Doing something...");
8    }
9}
步骤 3: 配置 Spring

确保你的 Spring 配置正确启用了 AOP 支持。

java深色版本1import org.springframework.context.annotation.Configuration;
2import org.springframework.context.annotation.EnableAspectJAutoProxy;
3
4@Configuration
5@EnableAspectJAutoProxy
6public class AppConfig {
7    // 配置类
8}
步骤 4: 使用服务类

在主类中使用 Service 类。

java深色版本1import org.springframework.beans.factory.annotation.Autowired;
2import org.springframework.boot.CommandLineRunner;
3import org.springframework.boot.SpringApplication;
4import org.springframework.boot.autoconfigure.SpringBootApplication;
5
6@SpringBootApplication
7public class Application implements CommandLineRunner {
8
9    @Autowired
10    private Service service;
11
12    public static void main(String[] args) {
13        SpringApplication.run(Application.class, args);
14    }
15
16    @Override
17    public void run(String... args) throws Exception {
18        service.doSomething();
19    }
20}

运行结果

当你运行这个应用程序时,你会看到在 doSomething 方法调用前后都有日志输出,这是因为切面中的通知被执行了。

总结

AOP 是一种强大的工具,可以帮助开发者更好地组织和管理代码中的横切关注点。通过将这些关注点从业务逻辑中分离出来,可以提高代码的可维护性和可扩展性。Spring AOP 是实现 AOP 的一种流行方式,适用于大多数基于 Spring 的 Java 应用程序。

例子

需求:统计各个业务层方法执行耗时。

实现步骤:

  1. 导入依赖:在pom.xml中导入AOP的依赖
  2. 编写AOP程序:针对于特定方法根据业务需要进行编程

为演示方便,可以自建新项目或导入提供的springboot-aop-quickstart项目工程

pom.xml

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>

AOP程序:TimeAspect

@Component
@Aspect //当前类为切面类
@Slf4j
public class TimeAspect {@Around("execution(* com.itheima.service.*.*(..))") public Object recordTime(ProceedingJoinPoint pjp) throws Throwable {//记录方法执行开始时间long begin = System.currentTimeMillis();//执行原始方法Object result = pjp.proceed();//记录方法执行结束时间long end = System.currentTimeMillis();//计算方法执行耗时log.info(pjp.getSignature()+"执行耗时: {}毫秒",end-begin);return result;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机网络】网络版本计算器

此前我们关于TCP协议一直写的都是直接recv或者read&#xff0c;有了字节流的概念后&#xff0c;我们知道这样直接读可能会出错&#xff0c;所以我们如何进行分割完整报文&#xff1f;这就需要报头来解决了&#xff01; 但当前我们先不谈这个话题&#xff0c;先从头开始。 将会…

第二十三节、血量更新逻辑的实现

一、创建代码 引入命名空间 using UnityEngine.UI; 调用UI必须有这个代码 二、ScriptObject类 1、是一个持久化存储文件的类型 接收所有的事件方法 先继承SO类&#xff0c;然后创建项目菜单 2、进行订阅 放入事件类&#xff0c;关联代码&#xff0c;即可进行广播 传递给这…

蓝桥杯2021第十二届蓝桥杯青少年组省赛试题真题

带我去看题解&#xff01;&#xff01;&#xff01; 带我去看题单&#xff01;&#xff01;&#xff01; 目录 第一题&#xff1a;[2021第十二届蓝桥杯青少年组省赛] 字符串 题目背景 题目描述 输入格式 输出格式 输入输出样例 第二题&#xff1a;[2021第十二届蓝桥杯…

AI + 3D 机器人视觉领域综合资源库

随着人工智能技术的不断发展,3D 机器人视觉领域已经成为了一个备受关注的研究方向。在这个领域中,研究者们致力于探索如何让机器人更好地理解三维空间,从而实现更加智能和灵活的操作。为了方便大家学习和研究,这里介绍一个全面的资源库——Awesome Robotics 3D,它汇集了最…

Ajax技术详解

Ajax简介 Ajax 即 "Asynchronous Javascript And XML"&#xff08;异步 JavaScript 和 XML&#xff09;&#xff0c;是指一种创建交互式、快速动态应用的网页开发技术&#xff0c;无需重新加载整个网页的情况下&#xff0c;能够更新页面局部数据的技术。 为什么要使…

Markdown中使用 LaTeX 绘图 -- TikZ

Markdown中使用 LaTeX 绘图 -- TikZ 1 介绍1.1 概述1.2 与其他图包对比 2 示例 & 学习[The TikZ and PGF Packages](https://tikz.dev/)[Graphics with TikZ in LaTeX](https://tikz.net/)[TikZ PGF Manual](https://www.bu.edu/math/files/2013/08/tikzpgfmanual.pdf)[在 …

【从Qwen2,Apple Intelligence Foundation,Gemma 2,Llama 3.1看大模型的性能提升之路】

从早期的 GPT 模型到如今复杂的开放式 LLM&#xff0c;大型语言模型 (LLM) 的发展已经取得了长足的进步。最初&#xff0c;LLM 训练过程仅侧重于预训练&#xff0c;但后来扩展到包括预训练和后训练。后训练通常包括监督指令微调和校准&#xff0c;这是由 ChatGPT 推广的。 自 …

机器学习:逻辑回归处理手写数字的识别

1、获取数据, 图像分割该数据有50行100列&#xff0c;每个数字占据20*20个像素点&#xff0c;可以进行切分,划分出训练集和测试集。 import numpy as np import pandas as pd import cv2 imgcv2.imread("digits.png")#读取文件 graycv2.cvtColor(img,cv2.COLOR_BGR2G…

LVS负载均衡群集-DR模式

一、负载均衡群集 1.数据包流向分析 客户端发送请求到 Director Server&#xff08;负载均衡器&#xff09;&#xff0c;请求的数据报文&#xff08;源 IP 是 CIP,目标 IP 是 VIP&#xff09;到达内核空间。Director Server 和 Real Server 在同一个网络中&#xff0c;数据通过…

深度学习基础—Softmax回归

通常对于二分类问题&#xff0c;大家熟知的模型就是logistic回归。那么对于多分类问题呢&#xff1f;如果要多分类&#xff0c;我们可以在网络的最后一层建立多个神经元&#xff0c;每个神经元对应一个分类的输出&#xff0c;输出的是某一个分类的概率&#xff0c;这些概率之和…

写给大数据开发:如何优化临时数据查询流程

你是否曾因为频繁的临时数据查询请求而感到烦恼&#xff1f;这些看似简单的任务是否正在蚕食你的宝贵时间&#xff0c;影响你的主要工作&#xff1f;如果是&#xff0c;那么这篇文章正是为你而写。 目录 引言&#xff1a;数据开发者的困境问题剖析&#xff1a;临时数据查询的…

小程序开发与发布指南:API、协同工作、版本管理与运营数据

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

乡村养老服务管理系统

TOC springboot549乡村养老服务管理系统pf 绪论 1.1 研究背景 现在大家正处于互联网加的时代&#xff0c;这个时代它就是一个信息内容无比丰富&#xff0c;信息处理与管理变得越加高效的网络化的时代&#xff0c;这个时代让大家的生活不仅变得更加地便利化&#xff0c;也让…

【论文阅读33】Deep learning optoacoustic tomography with sparse data

Deep learning optoacoustic tomography with sparse data 论文题目:基于稀疏数据的深度学习光声断层扫描 论文链接:Deep learning optoacoustic tomography with sparse data | Nature Machine Intelligence 代码链接:GitHub - ndavoudi/sparse_artefact_unet 数据链接…

「C++系列」vector 容器

文章目录 一、vector 容器1. 基本特性2. 基本操作3. 注意事项 二、应用场景1. 应用场景2. 案例案例一&#xff1a;存储动态大小的数据集合案例二&#xff1a;实现栈 三、相关链接 一、vector 容器 C 中的 vector 是一个非常常用的容器&#xff08;container&#xff09;&#…

comfyUI工作流-Flux大模型应用/黑神话悟空角色生成(附lora)

​ 是什么让悟空开始搬砖&#xff0c;这莫不是新的副本 其实我们用AI就能生成这种黑神话悟空的衍生图片 让悟空做ceo&#xff0c;做老师&#xff0c;上工地搬砖 七十二变&#xff0c;体验人生百态 操作很简单&#xff0c;只需要一个comfyUI工作流&#xff0c;你就能任意生成…

嵌入式day31

mplayer项目问题分析&#xff1a; 知识短时间内可以获取到 能力的提升一定需要练习 IPC 进程间通信方式 共享内存 //最高效的进程间通信方式 共享内存&#xff1a; 1.是一块 内核预留的空间 2.最高效的通信方式 //避免了用户空间到内核空间的数据拷贝 操作&#xff1a; …

<数据集>航拍牧场牛羊识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1021张 标注数量(xml文件个数)&#xff1a;1021 标注数量(txt文件个数)&#xff1a;1021 标注类别数&#xff1a;3 标注类别名称&#xff1a;[cattle, cow, sheep] 序号类别名称图片数框数1cattle29741282cow6740…

Zookeeper服务注册及心跳机制详解

ZooKeeper提供了一种类似于文件目录的结构来保存key值&#xff0c;其提供了四种key类型&#xff0c;分别是持久节点&#xff0c;临时节点&#xff0c;持久有序节点&#xff0c;临时有序节点。其中临时节点的特性是当创建此节点的会话断开时&#xff0c;节点也会被删除。这一特性…

Hive SQL语言

目录 Hive SQL之数据库与建库 create database :创建数据库 use database :选择特定的数据库 drop database :删除数据库 Hive SQL之表与建表 create table : 创建表 分隔符指定语法 Hive SQL-DML-Load加载数据 Load语法功能 语法规则之filepath 语法规则之LOCAL …