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

文章目录

接口

接口就是一种规则

接口的定义与使用

  • 接口用关键字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类就被称为内部类

java 复制代码
public class Outer {
    public class Inner{
        
    }
}
java 复制代码
public class Test{
    public static void main(String[] args){
        
    }
}

内部类的访问特点

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

分类

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

成员内部类

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

获取成员内部类对象

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

静态内部类

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

举例:

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

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

局部内部类

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

匿名内部类

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

格式

java 复制代码
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:文本匹配器,作用按照正则表达式的规则去读取字符串,从头开始读取。在大串中去找符合匹配规则的子串。

  • 获取正则表达式的对象

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

已经到底啦!!

相关推荐
路在脚下@32 分钟前
spring boot的配置文件属性注入到类的静态属性
java·spring boot·sql
森屿Serien35 分钟前
Spring Boot常用注解
java·spring boot·后端
轻口味1 小时前
命名空间与模块化概述
开发语言·前端·javascript
吉大一菜鸡1 小时前
FPGA学习(基于小梅哥Xilinx FPGA)学习笔记
笔记·学习·fpga开发
苹果醋32 小时前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
晓纪同学2 小时前
QT-简单视觉框架代码
开发语言·qt
威桑2 小时前
Qt SizePolicy详解:minimum 与 minimumExpanding 的区别
开发语言·qt·扩张策略
Hello.Reader2 小时前
深入解析 Apache APISIX
java·apache
飞飞-躺着更舒服2 小时前
【QT】实现电子飞行显示器(简易版)
开发语言·qt
明月看潮生2 小时前
青少年编程与数学 02-004 Go语言Web编程 16课题、并发编程
开发语言·青少年编程·并发编程·编程与数学·goweb