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

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;}
}

相关文章:

Java基础核心知识学习笔记

方法重载 请记住下面重载的条件 方法名称必须相同。参数列表必须不同&#xff08;个数不同、或类型不同、参数类型排列顺序不同等&#xff09;。方法的返回类型可以相同也可以不相同。仅仅返回类型不同不足以成为方法的重载。重载是发生在编译时的&#xff0c;因为编译器可以根…...

Leetcode 237.19.83.82 删除链表重复结点 C++实现

Leetcode 237. 删除链表中的节点 问题&#xff1a;有一个单链表的head&#xff0c;我们想删除它其中的一个节点node。给你一个需要删除的节点 node 。你将 无法访问 第一个节点head。链表的所有值都是唯一的&#xff0c;并且保证给定的节点 node不是链表中的最后一个节点。删除…...

Spring OAuth2.0资源服务源码解析

主要分析spring-security-oauth2-resource-server的源码&#xff0c;介绍OAuth2.0授权码模式下Spring Boot OAuth2资源服务的运行流程&#xff0c;分析其是如何对令牌进行认证的&#xff0c;并展示资源服务配置 代码版本信息 Spring Boot 2.7.10 spring-security-oauth2-resou…...

JavaScript 原型与原型链

原型与原型链 要讨论原型与原型链&#xff0c;就要先了解什么是 构造函数 &#xff0c;构造函数与普通函数没有太大的区别&#xff0c;使用 new关键字 创建实例对象的函数&#xff0c;就叫做构造函数。 在js中&#xff0c;每一个函数类型的数据都有一个 .prototype 的属性&am…...

Spring Boot实现简单的Oracle数据库操作

使用到的技术&#xff1a; 1. Spring Boot&#xff1a;用于简化Spring应用的开发。 2. Dynamic DataSource&#xff1a;实现动态多数据源的访问和切换 3. Oracle JDBC Driver&#xff1a;与Oracle数据库进行连接和交互。 4. Mybatis-Plus&#xff1a;简化SQL映射和数据库访问。…...

微软发布 Phi-3.5 系列模型,涵盖端侧、多模态、MOE;字节 Seed-ASR:自动识别多语言丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…...

笔记:Echarts柱状图 实现滚轮条 数据太多

效果&#x1f447;&#x1f447;&#x1f447; 配置&#xff1a;&#x1f447; let option {dataZoom: [{type: "slider",show: true,zoomLock: true,start: 0,end: 20,bottom: 60,height: 10,textStyle: {color: "transparent",fontSize: 9,},fillerColo…...

嵌入式学习day17(数据结构)

大纲 数据结构、算法数据结构&#xff1a; 1. 线性表&#xff1a;顺序表、链表&#xff08;单向链表&#xff0c;单向循环链表&#xff0c;双向链表&#xff0c;双向循环链表&#xff09;、栈&#xff08;顺序栈&#xff0c;链式栈&#xff09;、队列&#xff08;循…...

网站怎么做敏感词过滤,敏感词过滤的思路和实践

敏感词过滤是一种在网站、应用程序或平台中实现内容审查的技术&#xff0c;用于阻止用户发布包含不适当、非法或不符合政策的内容。我们在实际的网站运营过程中&#xff0c;往往需要担心某些用户发布的内容中包含敏感词汇&#xff0c;这些词汇往往会导致我们的网站被用户举报&a…...

【峟思】如何使用投入式水位计才能确保测量准确性

在水利、环保、工业监测等众多领域&#xff0c;水位测量是一项至关重要的任务&#xff0c;它不仅直接关系到水资源的合理利用与保护&#xff0c;还影响到防洪、供水、排水等多个方面的安全与效率。投入式水位计作为一种常见的水位测量工具&#xff0c;以其结构简单、测量准确、…...

供应链管理系统(SCM) —— 企业物流的智能枢纽

SAP 供应链管理系统以打造数字化和集成化的供应链管理平台为使命&#xff0c;将传统的仓储管理系统、制造执行系统、产品管理系统等软件进行升级和上云管理&#xff0c;为企业提供面向客户、合作伙伴及员工的数字化SCM系统平台。 SAP SCM系统从设计到运维&#xff0c;全面优化供…...

计算机视觉(CV)技术的优势和挑战。

计算机视觉&#xff08;CV&#xff09;技术在许多领域中具有广泛的应用&#xff0c;并且具有一些优势和挑战。 优势&#xff1a; 1. 高效性&#xff1a;CV技术能够快速处理大量的图像和视频数据&#xff0c;以实现实时的分析和决策。 2. 自动化&#xff1a;CV技术可以自动化地…...

数据库MySQL多表设计、查询

目录 1.概述 2.一对多 3.一对一 4.多对多 5.多表查询 5.1内连接 5.2外连接 5.3子查询 1.概述 项目开发中,在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结构&#xff0c;由于业务之间相互关联&#xff0c;所以各个…...

基于vue框架的北城招聘管理平台题目7lly3(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,企业,企业信息,职位类型,职位信息,简历信息,职位应聘,求职意愿,面试信息,录取信息,实习信息,冻结信息,解冻信息 开题报告内容 基于Vue框架的北城招聘管理平台 开题报告 一、引言 随着互联网的飞速发展和企业对人才需求的不断增…...

详讲C#中如何存储当前项目的设置-超级简单省事

我们在编写软件的时候总有一些配置数据需要保存&#xff0c;比如用户选择的偏好设置&#xff0c;又如软件所用到的数据库文件等。我们有很多中方式都可以保存&#xff0c;比如直接保存在某个文本文件&#xff0c;或者ini文件中&#xff0c;其实最简单的办法是保存在项目的资源文…...

【QT文件操作】---xml文件读取

XML&#xff08;可扩展标记语言&#xff0c;eXtensible Markup Language&#xff09;是一种用于存储和传输数据的文本格式&#xff0c;广泛用于配置文件、数据交换和文档表示。XML 文件具有明确的结构和标记&#xff0c;这使得它能够描述复杂的层次结构和数据关系。 xml和html…...

科研软件 | Diamond 4.6 安装教程

软件介绍 Diamond一个化学专业软件。它是一款在原子水平实现晶体结构可视化的软件&#xff0c;包括分子和聚合物扩展、多面体、搜索结构数据、自动和批量创建结构图片等功能&#xff0c;支持晶体结构着色和渲染以及批注。 软件下载 https://pan.quark.cn/s/37214b5bec7c 软…...

利用keepalived达成服务高可用

官方网站Keepalived for Linux 1.keepalived简介 vrrp 协议的软件实现&#xff0c;原生设计目的为了 高可用 ipvs 服务 功能&#xff1a; 基于 vrrp 协议完成地址流动 为 vip 地址所在的节点生成 ipvs 规则 ( 在配置文件中预先定义 ) 为 ipvs 集群的各 RS 做健康状态检测 …...

Dumpy:一款针对LSASS数据的动态内存取证工具

关于Dumpy Dumpy是一款针对LSASS数据的动态内存取证工具&#xff0c;该工具专为红队和蓝队研究人员设计&#xff0c;支持重新使用打开的句柄来动态转储 LSASS。 运行机制 Dumpy可以动态调用 MiniDumpWriteDump 来转储 lsass 内存内容。此过程无需打开 lsass 的新进程句柄&…...

TinyEngine是什么?

TinyEngine 是 OpenTiny 项目下的一个开源低代码引擎&#xff0c;旨在帮助开发者快速构建应用程序。它提供了可视化搭建页面的能力&#xff0c;支持在线实时构建和二次开发或集成&#xff0c;适用于多种场景的低代码平台开发&#xff0c;例如资源编排、服务端渲染、模型驱动、移…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...

WebRTC调研

WebRTC是什么&#xff0c;为什么&#xff0c;如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...

当下AI智能硬件方案浅谈

背景&#xff1a; 现在大模型出来以后&#xff0c;打破了常规的机械式的对话&#xff0c;人机对话变得更聪明一点。 对话用到的技术主要是实时音视频&#xff0c;简称为RTC。下游硬件厂商一般都不会去自己开发音视频技术&#xff0c;开发自己的大模型。商用方案多见为字节、百…...

标注工具核心架构分析——主窗口的图像显示

&#x1f3d7;️ 标注工具核心架构分析 &#x1f4cb; 系统概述 主要有两个核心类&#xff0c;采用经典的 Scene-View 架构模式&#xff1a; &#x1f3af; 核心类结构 1. AnnotationScene (QGraphicsScene子类) 主要负责标注场景的管理和交互 &#x1f527; 关键函数&…...