当前位置: 首页 > 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;因为编译器可以根…...

SAP学习笔记 - 开发01 - BAPI是什么?通过界面和ABAP代码来调用BAPI

BAPI作为SAP中的重要概念&#xff0c;在SAP系统的开发中几乎是必须的。 本章来学习一下BAPI 的直观印象&#xff0c;以及在ABAP代码中的调用。 目录 1&#xff0c; BAPI概述 1&#xff0c;从画面角度来直观体验一下BAPI 1-1&#xff0c;MM&#xff1a;購買依頼変更BAPI - …...

mysql笔记3(数据库、表和数据的基础操作)

文章目录 一、数据库的基础操作1. 显示所有的仓库(数据库)2. 创建数据库注意(命名规范)&#xff1a; 3. 删除数据库4. 查看创建数据库的SQL5. 创建数据库时跟随字符编码6. 修改数据库的字符编码 二、表的基础操作1. 引入表的思维2. 引用数据库3. 查看该数据库下面的表4. 创建表…...

计算机毕业设计选题-基于python的企业人事管理系统【源码+文档+数据库】

&#x1f496;&#x1f525;作者主页&#xff1a;毕设木哥 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; 实战项目 文章目录 实战项目 一、基于python的企业人事管理系…...

科研绘图系列:R语言折线图(linechart plots)

文章目录 介绍加载R包导入数据数据预处理画图组合图形介绍 在R语言中,折线图(Line Plot)是一种常用的数据可视化类型,用于展示数据随时间或有序类别变化的趋势。折线图通过连接数据点来形成一条或多条线,这些线条可以清晰地表示数据的变化方向、速度和模式。 加载R包 k…...

Opencv中的直方图(5)计算EMD距离的函数EMD()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算两个加权点配置之间的“最小工作量”距离。 该函数计算地球搬运工距离&#xff08;Earth Mover’s Distance&#xff09;和/或两个加权点配…...

KDD 2024 时空数据(Spatio-temporal) ADS论文总结

2024 KDD&#xff08; ACM SIGKDD Conference on Knowledge Discovery and Data Mining, 知识发现和数据挖掘会议&#xff09;在2024年8月25日-29日在西班牙巴塞罗那举行。 本文总结了KDD2024有关时空数据(Spatial-temporal) 的相关论文&#xff0c;如有疏漏&#xff0c;欢迎大…...

uniapp+vue3实现小程序和h5解压线上压缩包以及如何访问解压后的视频地址

安装jszip插件 npm install jszip 对应功能实现和逻辑处理&#xff1a; <script setup>import { onMounted, reactive, ref } from vueimport { onHide, onUnload } from dcloudio/uni-appimport JSZip from jsziplet videoSrc ref() // 视频地址// 创建JSZip实例con…...

探索 Zed 编辑器:速度与协作的巅峰之作

Zed 是一款备受瞩目的代码编辑器,专为现代开发者打造。本文将深入介绍 Zed 的独特优势,以及如何快速上手使用这款编辑器,助你在编程工作中大幅提升效率。 一:Zed 编辑器的优势 Zed 是近年来崭露头角的一款代码编辑器,迅速赢得了众多开发者的青睐。以下是 Zed 的几大核心优…...

文心快码前端工程师观点分享:人机协同新模式的探索之路(三)

本系列视频来自百度工程效能部的前端研发经理杨经纬&#xff0c;她在由开源中国主办的“AI编程革新研发效能”OSC源创会杭州站105期线下沙龙活动上&#xff0c;从一款文心快码&#xff08;Baidu Comate&#xff09;前端工程师的角度&#xff0c;分享了关于智能研发工具本身的研…...

Qt基础类03-直线类QLine

Qt基础类03-直线类QLine 摘要基本信息成员函数程序全貌QLine::QLine()QLine::QLine(const QPoint &p1, const QPoint &p2)QLine::QLine(int x1, int y1, int x2, int y2)QPoint QLine::p1() constQPoint QLine::p2() constint QLine::x1() constint QLine::x2() consti…...

集成电路学习:什么是ARM先进精简指令集计算机

ARM&#xff1a;先进精简指令集计算机 ARM先进精简指令集计算机&#xff08;Advanced RISC Machine&#xff0c;简称ARM&#xff09;是一种基于精简指令集计算机&#xff08;RISC&#xff09;原则的计算机处理器架构&#xff0c;由英国的ARM公司开发。这种架构以其低功耗和高性…...

设计模式-行为型模式-迭代器模式

1.迭代器模式的定义 迭代器模式提供一种对容器对象中的各个元素进行访问的方法&#xff0c;而不需要暴露该对象的内部细节&#xff1b; 在软件系统中&#xff0c;容器对象有两个职责&#xff1a;一是存储数据&#xff0c;二是遍历数据&#xff1b;从依赖性上看&#xff0c;前者…...

FRP代理(QUIC通信)实验

访问关系与TCP实验相同&#xff0c;配置不一样 服务端配置 客户端配置 通信数据...

项目依赖拉不下来卡着不动怎么办,node又不支持cnpm

如果你的项目依赖在拉取时卡住&#xff0c;可以尝试以下步骤来解决问题&#xff1a; 检查网络&#xff1a;确保你的网络连接稳定。如果可能&#xff0c;尝试使用 VPN 或更换网络。 使用镜像源&#xff1a; 对于 yarn&#xff0c;可以使用淘宝镜像&#xff1a; yarn confi…...

ansible--role

简介 roles是ansible&#xff0c;playbooks的目录的组织结构&#xff0c;将代码或文件进行模块化&#xff0c;成为roles的文件目录组织结构。 易读&#xff0c;代码可冲哟美好&#xff0c;层次清晰 目录机构 mkdir roles/nginx/{files,handlers,tasks,templates,vars} -ptou…...

SpinalHDL之数据类型(一)

本文作为SpinalHDL学习笔记第五十四篇,介绍SpinalHDL的Bool数据类型。 SpinalHDL技术交流QQ群: Note: 1.本群是个人技术交流群,不是什么官方答疑群; 2.提问是你的权利,但回答不是别人的义务; 3.可以潜水,不能灌水; 4.请文明交流,做这行的都算高层次人才,希望你…...

Ansys Zemax | 什么是Sobol取样?

附件下载 联系工作人员获取附件 本文主要介绍了&#xff1a; 什么是Sobol取样&#xff1f; 和随机光线产生方法相比&#xff0c;Sobol取样有什么优点&#xff1f; Sobol取样有什么限制&#xff1f; 随机取样和Sobol取样模式 一个光源会在位置空间以及角度空间随机产生光…...

Unity 热更 之 【YooAsset 热更】Unity 可以进行热更的资源管理系统,并 【Android 端简单实现·案例热更】

Unity 热更 之 【YooAsset 热更】Unity 可以进行热更的资源管理系统&#xff0c;并 【Android 端简单实现案例热更】 目录 Unity 热更 之 【YooAsset 热更】Unity 可以进行热更的资源管理系统&#xff0c;并 【Android 端简单实现案例热更】 一、简单介绍 二、YooAsset 引…...

vue3写一个无限树形菜单,递归组件

原本使用element plus的el-tree&#xff0c;可是他的UI不匹配&#xff0c;狠难改成自己想要的&#xff0c;所以只能自己去写一个&#xff0c;做法&#xff1a;使用递归组件 效果 组件代码itemDir.vue // itemDir.vue<template><div><ul v-for"node in li…...

3D建模主要使用哪些软件?有什么特点?

3D建模主要使用的软件多种多样&#xff0c;每种软件都有其独特的优势和适用领域。以下是一些主流的3D建模软件&#xff1a; 1. Autodesk 3ds Max 概述&#xff1a;3ds Max是一款功能丰富的建模和动画软件&#xff0c;广泛用于电影、游戏和虚拟现实等领域。 特点&#xff1a;…...

Android Studio 加载多个FLutter项目

按顺序操作即可 选择工程 选择Modules, 导入 module 选中创建module 选择要导入的目录&#xff0c;只选择主目录&#xff0c;下面的文件不要选 添加完成&#xff0c;点击ok后&#xff0c;会进行导入 最终导入成功...

SealSuite 一站式 IT 管理与办公安全解决方案,助力出海企业夯实数字化底座

数字化办公时代&#xff0c;企业升级 IT 基础设施&#xff0c;已不再是选择题&#xff0c;而是必答题。 数字化办公时代&#xff0c;企业为何要升级 IT 基础设施&#xff1f; 随着时代变化与科技进步&#xff0c;人们的工作方式也发生了巨大变化。如今&#xff0c;远程办公、全…...

l超市售货管理系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;会员管理&#xff0c;供应商信息管理&#xff0c;商品管理&#xff0c;出入库管理&#xff0c;公告管理&#xff0c;轮播图信息 微信端账号功能包括&#xff1a;系统首页&#xff0c;公告&#xff0c;…...

systemverilog、verilog的部分常用内部函数

1. $ceil 作用&#xff1a;将给定的实数或浮点数向上取整。示例&#xff1a;$ceil(3.2) 返回 4。 2. $floor 作用&#xff1a;将给定的实数或浮点数向下取整。示例&#xff1a;$floor(3.9) 返回 3。 3. $value$plusargs 作用&#xff1a;从命令行读取传递给仿真器的参数。…...

Python趣味绘图案例

文章目录 系列文章趣味绘图案例1. 绘制简单的正方形2. 绘制五角星3. 绘制同心圆4. 绘制彩虹弧5. 绘制螺旋线6. 绘制六边形7. 绘制花形图案8. 绘制波浪线9. 绘制柱状图10. 绘制饼图 系列文章 序号直达链接表白系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Pyt…...

P3588 [POI2015] PUS

~~~~~ P3588 [POI2015] PUS ~~~~~ 总题单链接 思路 ~~~~~ 这道题的关键点在于线段树优化建图。 ~~~~~ 对每条限制新建一个虚电 p p p&#xff0c;将输入的 x 1 ∼ k x_{1\sim k} x1∼k​ 连向 p p p&#xff0c;再将 p p p 连向区间内单的其他点&#xff0c;建完图后拓扑排…...

指针(四)

指针和数组笔试题解析 一维数组 字符数组 &#xff08;没有\0&#xff09; 字符数组&#xff08;有\0&#xff09; 重点讲一下printf("%d\n", strlen(*p))&#xff1b; 这个strlen函数中是从地址开始寻找&#xff0c;而非元素本身&#xff1b;假设计算的是元素本…...

0902,DEQUE,LIST,VECTOR

目录 01_vector.cc 02_vector.cc 作业 01STL包括哪些组件&#xff1f;各自具有哪些特点&#xff1f; 02 序列式容器包括哪些&#xff1f;他们之间有哪些异同&#xff1f; 03 下面程序有什么错误&#xff1f; 04 创建和初始化vector的方法&#xff0c;每种都给出一个实例…...

LeetCode 每日一题 2024/9/2-2024/9/8

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 9/2 3153. 所有数对中数位不同之和9/3 2708. 一个小组的最大实力值9/4 2860. 让所有学生保持开心的分组方法数9/5 3174. 清除数字9/6 3176. 求出最长好子序列 I9/7 3177. 求…...