重生之我要精通JAVA--第四周笔记

2024-05-12 22:20
文章标签 java 精通 笔记 四周 重生

本文主要是介绍重生之我要精通JAVA--第四周笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 接口
      • 接口的定义与使用
      • 接口中成员的特点
      • 接口和类之间的关系
    • JDK9新增的方法
    • 适配器设计模式
  • 内部类
    • 什么是内部类?
    • 内部类的访问特点
    • 分类
    • 成员内部类
      • 获取成员内部类对象
    • 静态内部类
    • 局部内部类
    • 匿名内部类
      • 格式
      • 细节
      • 使用场景
  • API
    • Math
      • Math常用方法
    • System
    • Runtime
    • Object
      • 构造方法
      • 成员方法
    • 对象克隆
      • 细节
    • Objects
      • 成员方法
      • equals使用细节(Objects.equals(s1,s2))
    • BigInteger和BigDecimal
      • BigInteger
        • 构造方法
        • 常见成员方法
      • BigDecimal
        • 细节
        • 使用
        • 进位
    • 正则表达式
      • 作用
      • 格式
      • 爬虫
      • 正则表达式在字符串方法中的使用
    • 分组
      • 捕获分组
      • 非捕获分组

接口

接口就是一种规则

接口的定义与使用

  • 接口用关键字interface来定义

    public interface 接口名 {}

  • 接口不能实例化

  • 接口和类之间是实现关系,通过implements关键字表示

    public class 类名 implements 接口名 {}

  • 接口的子类(实现类)

    要么重写接口中所有的抽象方法

    要么是抽象类

注意1:接口和类的实现关系,可以单实现,也可以多实现:public class 类名 implements 接口名1,接口名2{}

注意2:实现类还可以在继承一个类的同时实现多个接口:public class 类名 extends 父类 implements 接口名1,接口名2{}

接口中成员的特点

  • 成员变量

    只能是常量

    默认修饰符:public static final

  • 构造方法

    没有

  • 成员方法

    只能是抽象方法

    默认修饰符:public abstract

  • JDK7以前:接口中只能定义抽象方法。

接口和类之间的关系

  • 类和类的关系
    继承关系,只能单继承,不能多继承,但是可以多层继承
  • 类和接口的关系
    实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
  • 接口和接口的关系
    继承关系,可以单继承,也可以多继承

JDK9新增的方法

接口中私有方法的定义格式:

  • 格式1:private返回值类型 方法名(参数列表){}

  • 范例1:private void show(){}

  • 格式2:private static 返回值类型 方法名(参数列表){}

  • 范例2:private static void method(){ }

  1. JDK7以前:接口中只能定义抽象方法。
  2. JDK8:接口中可以定义有方法体的方法。(默认、静态)
  3. JDK9:接口中可以定义私有方法。
  4. 私有方法分为两种:普通的私有方法,静态的私有方法

适配器设计模式

  • 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
    使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。

    简单理解:设计模式就是各种套路。

  • 适配器设计模式:解决接口与接口实现类之间的矛盾问题

内部类

类的五大成员:属性方法构造方法代码块内部类

什么是内部类?

在一个类里面再定义一个类。

例子:在A类的内部定义B类,B类就被称为内部类

public class Outer {public class Inner{}
}
public class Test{public static void main(String[] args){}
}

内部类的访问特点

  • 内部类可以直接访问外部类的成员,包括私有
  • 外部类要访问内部类的成员,必须创建对象

分类

  • 成员内部类
  • 静态内部类
  • 局部内部类
  • 匿名内部类

成员内部类

  • 写在成员位置的,属于外部类的成员

获取成员内部类对象

  1. 在外部类中编写方法,对外提供内部类的对象
  2. 直接创建格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象

静态内部类

静态内部类只能访问外部类中的静态变量和静态方法,如果想要访问非静态的需要创建对象。

举例:

public class car {//外部类String carName;int carAge;int carcolor;static(出错) class Engine{//静态内部类String engineName;int engineAge;}
}

创建静态内部类对象的格式:外部类名.内部类名 对象名 = new 外部类名.内部类名();
调用非静态方法的格式:先创建对象,用对象调用
调用静态方法的格式:外部类名.内部类名.方法名();

局部内部类

  1. 将内部类定义在方法里面就叫做局部内部类,类似于方法里面的局部变量。
  2. 外界是无法直接使用,需要在方法内部创建对象并使用。
  3. 该类可以直接访问外部类的成员,也可以访问方法内的局部变量。

匿名内部类

匿名内部类本质上就是隐藏了名字的内部类,可以卸载成员位置,也可以写在局部位置。

格式

new 类名或者接口名(){重写方法;
};

细节

包含了继承或实现,方法重写,创建对象。

整体就是一个类的子类对象或者接口的实现类对象

使用场景

当方法的参数是接口或者类时,
以接口为例,可以传递这个接口的实现类对象,
如果实现类只要使用一次,就可以用匿名内部类简化代码。

API

Math

  • 是一个帮助我们用于进行数学计算的工具类
  • 私有化构造方法,所有的方法都是静态的

Math常用方法

方法名说明
public static int abs(int a)获取参数绝对值
public static double ceil(double a)向上取整
public static double floor(double a)向下取整
public static int round(float a)四舍五入
public static int max(int a,int b)取较大值
public static double pow(double a,double b)返回a的b词幂的值
public static double random()返回值为double的随机值,范围[0.0,1.0)

System

方法名说明
public static void exit(int status)终止当前运行的 Java 虚拟机
public static long currentTimeMillis()返回当前系统的时间毫秒值形式
public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数)数组拷贝

Runtime

方法名说明
public static Runtime getRuntime()当前系统的运行环境对象
public void exit(int status)停止虚拟机
public int availableProcessors()获得CPU的线程数
public long maxMemory()JVM能从系统中获取总内存大小(单位byte)
public long totalMemory()JVM已经从系统中获取总内存大小(单位byte)
public long freeMemory()JVM剩余内存大小(单位byte)
public process exec(String command)运行cmd命令

Object

  • Object是Java中的顶级父类。所有的类都直接或间接的继承于0bject类。
  • Object类中的方法可以被所有子类访问,所以我们要学习0bject类和其中的方法

构造方法

方法名说明
public Object()空参构造

成员方法

方法名说明
public string tostring()返回对象的字符串表示形式
public boolean equals(object obj)比较两个对象是否相等
protected object clone(int a)对象克隆

当我们打印一个对象的时候,底层会调用对象的toString方法,把对象变成字符串。
然后再打印在控制台上,打印完毕换行处理。

默认情况下,因为object类中的toString方法返回的是地址值
所以,默认情况下,打印一个对象打印的就是地址值

对象克隆

把A对象的属性值完全拷贝给B对象,也叫对象拷贝,对象复制

细节

方法在底层会帮我们创建一个对象,并把原对象中的数据拷贝过去。

  1. 重写object中的clone方法
  2. 让javabean类实现cloneable接口
  3. 创建原对象并调用c1one就可以了

深克隆:不管对象内部的属性是基本数据类型还是引用数据类型,都完全拷贝过来。

浅克隆:基本数据类型拷贝过来,字符串复用,引用数据类型会重新创建新的。

Objects

Objects是一个工具类,提供了一些方法去完成一些功能。

成员方法

方法名说明
public static boolean equals(object a, object b)先做非空判断,比较两个对象
public static boolean isNull(object obj)判断对象是否为Null,为Null返回true,反之
public static boolean nonNull(object obj)判断对象是否为Null,跟isNull的结果相反

equals使用细节(Objects.equals(s1,s2))

  1. 方法的底层会判断s1是否为nu11,如果为nu11,直接返回false
  2. 如果s1不为nu11,那么就利用s1再次调用equals方法
  3. 此时s1是student类型,所以最终还是会调用student中的equals方法。
  4. 如果没有重写,比较地址值,如果重写了,就比较属性值。

BigInteger和BigDecimal

BigInteger

构造方法
方法名说明
public BigInteger(int num,Random rnd)获取随机大整数,范围:[0~2的num次方-1]
public BigInteger(string val)获取指定的大整数
public BigInteger(String val,int radix)获取指定进制的大整数
public static BigInteger valueOf(long val)静态方法获取BigInteger的对象,内部有优化
  1. 如果BigInteger表示的数字没有超出long的范围,可以用静态方法获取
  2. 如果BigInteger表示的超出long的范围,可以用构造方法获取
  3. 对象一旦创建,BigInteger内部记录的值不能发生改变
  4. 只要进行计算都会产生一个新的BigInteger对象
常见成员方法
方法名说明
public BigInteger add(BigInteger val)加法
public BigInteger subtract(BigInteger val)减法
public BigInteger multiply(BigInteger val)乘法
public BigInteger divide(BigInteger val)除法,获取商
public BigInteger[] divideAndRemainder(BigInteger val)除法,获取商和余数
public boolean equals(Object x)比较是否相同
public BigInteger pow(int exponent)次幂
public BigInteger max/min(BigInteger val)返回较大值/较小值
public int intValue(BigInteger val)转为int类型整数
超出范围数据有误

BigDecimal

  • 用于小数的精确计算
  • 用来表示很大的数
  1. 通过传递double类型的小数来创建对象
  2. 通过传递字符串的小数来创建对象
  3. 通过静态方法获取对象
细节
  1. 如果要表示的数字不大,没有超出double的取值范围,建议使用静态方法
  2. 如果要表示的数字比较大,超出了double的取值范围,建议使用构造方法
  3. 如果我们传递的是8~10之间的整数,包含8,包含10,那么方法会返回己经创建好的对象,不会重新new
使用
方法名说明
public static BigDecimal valueOf(double val)获取对象
public BigDecimal add(BigDecimal val)加法
public BigDecimal subtract(BigDecimal val)减法
public BigDecimal multiply(BigDecimal val)乘法
public BigDecimal divide(BigDecimal val)除法
public BigDecimal divide(BigDecimal val,精确几位,舍入模式)除法
进位
  1. UP:远离零方向舍入的舍入模式
  2. DOWN:向零方向舍入的舍入模式
  3. CEILING:向正无限大方向舍入的舍入模式
  4. FLOOR:向负无限大方向舍入的舍入模式

正则表达式

name.startsWith(字符串);//用来判断name字符串是否以括号内的字符串开头

作用

作用一:校验字符串是否满足规则

作用二:在一段文本中查找满足要求的内容

格式

!!!!一个中括号只能匹配一次!!!!

用法注释
[abc]只能是a,b,或c
[^abc]除了a,b,c之外的任何字符
[a-zA-Z]a到z A到Z,包括(范围)
[a-d[m-p]]a到d,或m到p
[a-z&&[def]]a-z和def的交集。为:d,e,f
[a-z&&[ ^bc ]]a-z和非bc的交集。(等同于[ad-z])
[a-z&&[ ^m-p ]a到z和除了m到p的交集。(等同于[a-lq-z])

!!!!一个符号只能匹配一次!!!!

用法注释
.任何字符
\d一个数字:[0-9]
\D非数字:[ ^0-9]
\s一个空白字符:[\t\n\x0B\f\r]
\S非空白字符:[ ^\s]
\w[a-zA-Z_0-9]英文、数字、下划线
\W[^\w]一个非单词字符

数量词

用法注释
X?X,一次或0次
X*X,0次或多次
X+X,一次或多次
X{n}X,正好n次
X{n,}X,至少n次
X{n,m}X,至少n但不超过m次

(?i)abc----------可以忽略abc的大小写

a(?i)bc----------可以忽略bc的大小写

a((?i)b)c--------只忽略b的大小写

(Java)(?=8|11|17)----------?理解为前面的数据Java;=表示Java后米娜要跟随的数据;获取时只获取前半部分。

(Java)(?:8|11|17)----------用:则表示要取整体。

(Java)(?!8|11|17)----------用!表示不要后半部分。

爬虫

  • Pattern:表示正则表达式

  • Matcher:文本匹配器,作用按照正则表达式的规则去读取字符串,从头开始读取。在大串中去找符合匹配规则的子串。

  • 获取正则表达式的对象

Pattern p = Pattern.compile("Java\\d{0,2}");
  • 获取文本匹配器的对象
  • m:文本匹配器的对象
  • str:大串
  • p:规则
  • m要在str中找符合p规则的小串
Matcher m = p.matcher(str);
  • 拿着文本匹配器从头开始读取,寻找是否有满足规则的子串
  • 如果没有,方法返回false
  • 如果有,返回true。在底层记录子串的起始索引和结束索引+1
boolean b = m.find();//当后面没有东西了会返回false
  • 方法底层会根据find方法记录的索引进行字符串的截取
  • substring(起始索引,结束索引);包头不包尾
  • (0,4)但是不包含4索引
  • 会把截取的小串进行返回。
String s1 = m.group();
System.out.println(s1);

正则表达式在字符串方法中的使用

方法名说明
public String[] matches(String regex)判断字符串是否满足正则表达式的规则
public String replaceAll(String regex,String newStr)按照正则表达式的规则进行替换
public String[] split(String regex)按照正则表达式的规则切割字符串

分组

每组是有组号的,也就是序号
规则1:从1开始,连续不间断。
规则2:以左括号为基准,最左边的是第一组,其次为第二组,以此类推

捕获分组

  • 后续还要继续使用本组的数据。
  • 正则内部使用:\\组号
  • 正则外部使用:$组号

非捕获分组

分组之后不需要再用本组数据,仅仅是把数据括起来。

符号含义举例
(?:正则)获取所有Java(?:8|11|17)
(?=正则)获取前面部分Java(?=8|11|17)
(?!正则)获取不是指定内容的前面部分Java(?!8|11|17)

已经到底啦!!

这篇关于重生之我要精通JAVA--第四周笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/983900

相关文章

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

最新Spring Security的基于内存用户认证方式

《最新SpringSecurity的基于内存用户认证方式》本文讲解SpringSecurity内存认证配置,适用于开发、测试等场景,通过代码创建用户及权限管理,支持密码加密,虽简单但不持久化,生产环... 目录1. 前言2. 因何选择内存认证?3. 基础配置实战❶ 创建Spring Security配置文件

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

Spring AI使用tool Calling和MCP的示例详解

《SpringAI使用toolCalling和MCP的示例详解》SpringAI1.0.0.M6引入ToolCalling与MCP协议,提升AI与工具交互的扩展性与标准化,支持信息检索、行动执行等... 目录深入探索 Spring AI聊天接口示例Function CallingMCPSTDIOSSE结束语

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat