面向对象总结
类 属性 方法 类变量 最终类 继承 父类extends 子类 重写(覆盖) 重载 构造方法 重载构造方
法 抽象类 抽象方法 接口 内部类 静态程序段 静态成员 静态方法 静态导入 初始化程序段 包
java1.8 接口 static实现方法 default实现方法,函数式接口
static
final
private public protected
this
super
extends
implements
interface default
abstract
package org.beiyou.oa;
@Override 注解
instanceof
实例化 new 方法 形参 实参 返回值 return 6;
结束void方法return;递归方法 装箱 拆箱 对象 基本类型相互转换
1.record extends java.lang.Record 类
public record User(int id,String name){
}
2.enum extends java.lang.Enum 类
对象的实例个是固定的,自动实例化,构造器默认 只能是private
3.面向对象 oop
package 包;
类
- 属性
- 方法 方法名 形参 实参 返回值 return; return 16; void
- 入口方法
- 构造方法
- 递归方法
- 重载方法
- 重写方法在继承时子类可以重写方法
- 初始块 在执行构造前,会自动所有初始化代码
- 静态程序块 在第一次实例化使用时执行所有静态程序块
- 成员内部类
//保存A.java
public class A{
}
对象 - 就是实例对象 new 出来
A a = new A();
继承 extends final 类不允许被继承,没有子类
public class MyStr extends String{}//错误
-
super(16,“lisi”);
-
this 类自身对象
-
super 类的父类,存在重写的情况下会使用到
在子类的构造方法第一行也会使用super();
- 重载
- 重写 覆盖
Parent p = new Son();
Son p = new Son();
抽象类 abstract class{} 使用的抽象类子类
抽象类 = 类 + 抽象方法
jdk体系 io - InputStream is = new FileInputStream();
//抽象方法
public abstract int square(int i);
//作用:
//抽象中的抽象方法,和子类继承关系,是一种编程规范。
spring 框架体系
接口 interface 使用的是接口的实现类,如果只有一个抽象方法,可以使用lambda表达来使用
接口 = 常量 + 抽象方法… + static 实现方法… + default实现方法…
接口可以多继承接口
interface A{}
interface B{}
interface C extends A,B{}
class D extends F implements A,B{
}
A d1 = new D();
//JAVA 是单继承多实现
//接口是多继承
声明接口的实现类
JDK 体系 集合 List Set Collection Map
jdbc 体系 全是接口 Java.sql.Connection;
(用interface 的规范来约束我们的实现类)
api-应用程序接口
枚举
enum Color{}
值类型
record Book(int id,String name){
}
面试题
计算1+2+3+…+100 = ?(不能使用循环语句,不能使用递归,不能直接写结果公式)
IntStream interface java 1.8新技术 流技术
int sum = IntStream.rangeClosed(1,100).sum();
System.out.println("1+2+3+...+100="+sum);
其中,求偶数和
int sum = IntStream.rangeClosed(1,100).filter(e->e%2==0).sum();
System.out.println("2+4+6+...+100="+sum);
字符串正则表达式
正则表达式,又称规则表达式,(Regular Expression,简写为regex、regexp或RE),一种文本模式,包括普通字符(eg. a 到 z 之间的字母)和特殊字符(称为"元字符"),是计算机科学的一个概念.
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。
在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开来的,后来在广泛运用于Scala 、PHP、C# 、Java、C++ 、Objective-c、Perl 、Swift、VBScript 、Javascript、Ruby 以及Python等等。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen.
6.1 String类
在java语言,是固定长度
String str = "hello";
str+=",java";
""
char c = 'a';
String d = "a";
字符串转义符
String s1 = "ok";
String s2 = "ok";
System.out.println(s1 == s2);
String s1 =new String("ok");
String s2 =new String("ok");
System.out.println(s1 == s2);
.concat() 相当于 + 字符串连接
System.out.println(s1.equals(s2));
System.out.println(s1.equalsIgnoreCase(s2));
System.out.println("hello中国".length());//7 字符数
//utf-8 编码下一个汉字占用三个字节
System.out.println("hello中国".getBytes().length);// 字节数
不可变的字符串对象,尽量少使用+=操作 ⭐
- 字符串转义符号为 \
- 常见的转义字符
转移字符对应的英文是escape character , 转义字符串(Escape Sequence),
字母前面加上捺斜线""来表示常见的那些不能显示的ASCII字符,称为转义字符.
如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。
常用方法
- length() 字符个数
- equals equalsIgnoreCase方法
- trim方法
- substring方法
- concat()方法用于将指定的字符串参数连接到字符串上。
- contains() 判断是否包括某字符串,返回的是true 或false
- indexOf()返回子串的位置索引,没有返回-1
- lastIndexOf() 返回子串的位置索引,没有返回-1
- replace()替换返回
- split()拆分为String[]
- toLowerCase() toUpperCase()转换小写大写
转义字符
转义字符 | 意义 | ASCII值(十进制) |
---|---|---|
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 |
\t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\ | 代表一个反斜线字符’‘’ | 092 |
’ | 代表一个单引号(撇号)字符 | 039 |
‘’ | 代表一个双引号字符 | 034 |
\0 | 空字符(NULL) | 000 |
\ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
\uhhhh | 三位八进制1到2位十六进制所代表的任意字符 | 二位十六进制 |
文本块text block
文字块(text blocks)这个特性,首先在 JDK 13 中以预览版的形式发布。在 JDK 14 中,改进的文字块再次以预览版的形式发布。最后,文字块在 JDK 15 正式发布。
package cn.practice3;
public class TextBlock {
public static void main(String[] args) {
String htmlString = """
<!DOCTYPE html>
<html>
<body>
<h1>"Hello World!"</h1>
</body>
</html>
""";
System.out.println(htmlString);
}
}
使用三个双引号引起来的文本,就是我们所说的文字块语法了,“所见即所得”,不再有特殊字符了。
- 仅当文本块可以提高代码的清晰度时才使用文本块,特别是对于多行字符串。
- 如果字符串适合用例,则始终首选使用字符串。它们更有利于应用程序性能。
- 要保持所需的缩进,请始终使用相对于内容上最后一行的位置关闭三重引号的位置。
- 避免在复杂表达式(如 lambda 表达式或流操作)中使用内联文本块,以保持可读性。考虑重构为局部变量或静态最终字段。
- 仅使用空格或仅使用制表符来缩进文本块。混合空格将导致不规则缩进的结果。
面试题
1.将一个字符串数组进行分组输出,每组中的字符串都由相同的字符组成。
举个例子:输入[“eat”,”tea”,”tan”,”ate”,”nat”,”bat”]
输出[[“ate”,”eat”,”tea”],[“nat”,”tan”],[“bat”]]
package cn.practice3;
import java.util.Arrays;
public class StringGrouping {
public static void main(String[] args) {
//将一个字符串数组进行分组输出,每组中的字符串都由相同的字符组成。
//举个例子:输入[“eat”,”tea”,”tan”,”ate”,”nat”,”bat”]
//输出[[“ate”,”eat”,”tea”],[“nat”,”tan”],[“bat”]]
String[] ls = new String[]{"age", "eat", "tea", "tan", "ate", "nat", "bat", "book", "bkoo"};
System.out.println(Arrays.toString(ls));
for (int n = 0; n < ls.length; n++) {
String t = ls[n];
if ("-".equals(t)) continue;
for (int i = n + 1; i < ls.length; i++) {
if (is(t, ls[i])) {
ls[n] += "-" + ls[i];
ls[i] = "";
}
}
}
System.out.println(Arrays.deepToString(ls));
String ok = "";
for (String t : ls) {
if ("".equals(t) || "-".equals(t)) continue;
ok += "," + t;
}
String[] oo = ok.substring(1).split(",");
System.out.println(Arrays.toString(oo));
StringBuilder su = new StringBuilder("[");
for(String s : oo){
String[] t = s.split("-");
su.append(Arrays.toString(t)+",");
}
su.replace(su.lastIndexOf(","),su.lastIndexOf(",")+1,"]");
System.out.println(su);
}
public static boolean is(String a, String b) {
boolean f = false;
if (a.length() == b.length()) {
var aa = a.toCharArray();
Arrays.sort(aa);
var bb = b.toCharArray();
Arrays.sort(bb);
f = new String(aa).equalsIgnoreCase(new String(bb));
}
return f;
}
public static boolean isSame(String a, String b) {
boolean f = true;
if (a.length() == b.length()) {
for (int i = 0; i < a.length(); i++) {
if (b.indexOf(a.charAt(i)) == -1) {
f = false;
break;
}
}
for (int i = 0; i < a.length(); i++) {
if (a.indexOf(b.charAt(i)) == -1) {
f = false;
break;
}
}
}
return f;
}
}
java11 字符串新特性方法
package cn.practice3;
import java.io.File;
import java.util.UUID;
public class StrNewCharacteristic {
public static void main(String[] args) {
String p = "d:/xxx/user/user_abc.jpg";
System.out.println(p);//d:/xxx/user/user_abc.jpg
//File.separator 是根据系统返回相关的符号 linux / windows \ \\
String fc = File.separator;
fc = !p.contains(fc) ? "/" : fc;
System.out.println(fc);// /
String path = p.substring(0, p.lastIndexOf(fc)).concat(fc);
System.out.println(path);//d:/xxx/user/
String name = p.substring(p.lastIndexOf(fc) + 1);
System.out.println(name);//user_abc.jpg
String ext = name.lastIndexOf(".") == -1 ? "" : name.substring(name.lastIndexOf(".") + 1);
System.out.println(ext);//jpg
UUID uuid = UUID.randomUUID();
String newp = String.format("%s%s.%s", path, uuid, ext);
System.out.println(newp);//d:/xxx/user/86f2a496-2248-4608-a16c-07d9d3d1cb33.jpg
}
}
java 11 string api
// 判断字符串是否为空白
" ".isBlank(); // true
// 去除首尾空格 .trim()
" Javastack ".strip(); // "Javastack"
// 去除尾部空格
" Javastack ".stripTrailing(); // " Javastack"
// 去除首部空格
" Javastack ".stripLeading(); // "Javastack "
// 复制字符串
"Java".repeat(3); // "JavaJavaJava"
// 行数统计
"A\nB\nC".lines().count(); // 3
package cn.practice3;
public class StrApi {
public static void main(String[] args) {
String str = "Java";
// System.out.println(str.repeat(-2));// 小于0:java.lang.IllegalArgumentException
System.out.println(str.repeat(0)); // 等于0:空白串("")
System.out.println(str.repeat(3));//JavaJavaJava
// System.out.println(str.repeat(Integer.MAX_VALUE));// java.lang.OutOfMemoryError
System.out.println("A\nB\nC\rD".lines().count());// 4
String s1 = " hello java 1.8 ";
System.out.println(s1);// hello java 1.8
//.concat() 方法相当于 + 属性字符串连接
System.out.println("hello".concat(" ".repeat(30)).concat("java19"));//hello java19
System.out.println("hello" + "\s".repeat(30) + "java19");//hello java19
//\s 相当于空格 现在不推荐使用
//清除首尾连续空格
System.out.println(s1.trim());//hello java 1.8
System.out.println(s1.strip());
System.out.println(s1.stripLeading());
System.out.println(s1.stripTrailing());
//清除所有空格
System.out.println(s1.replace(" ",""));
System.out.println("------------");
System.out.println("".isBlank());
System.out.println("".isEmpty());
System.out.println(" ".isBlank());//true
System.out.println(" ".isEmpty());//false
System.out.println(" ".trim().length() == 0 ? "空字符串" : "正确");
System.out.println(" ".isBlank() ? "空字符串" : "正确");
System.out.println("*".repeat(60));
System.out.println("------------");
//求字符串中行数
System.out.println("hello\njava\nok\n123\nmysql");
System.out.println("hello\njava\nok\n123\nmysql".lines().count());
}
}
package cn.practice3;
import java.util.Calendar;
public class StrApi1 {
public static void main(String[] args) {
String str = "日一二三四五六";
//toCharArray()
char[] chars = str.toCharArray();
System.out.println(chars[0]);//日
//charAt(0)
System.out.println(str.charAt(0));//日
Calendar c = Calendar.getInstance();
int w = c.get(Calendar.DAY_OF_WEEK);
System.out.println("星期"+str.charAt(w-1));//星期二
System.out.println("星期"+chars[w-1]);//星期二
}
}
package cn.practice3;
import java.io.File;
public class StrFile {
public static void main(String[] args) {
//Linux
String path = "c:\\users\\oa\\goods\\imag\\xxsf24.jpg";
//window
path = "c:/users/oa/goods/imag/xxsf24.jpg";
//trim() 清楚左边 右边连接空格
System.out.println(" hello world ".trim());//hello world
//replace() 是查找替换方法,查找空格,替换为"" 功能是清除所有的空格
System.out.println(" hello world ".replace(" ",""));//helloworld
//字符串截取操作
System.out.println("hello, java17".substring(6));// java17
String path1 = "c:/users/oa/goods/imag/xxsf24.jpg";
//取出文件类型 jpg
String ext = path1.substring(path1.lastIndexOf(".")+1);
System.out.println(ext);//jpg
System.out.println(System.getProperty("os.name"));//Windows 10
//取出文件名 xxsf24.jpg
String name = path1.substring(path1.lastIndexOf("/")+1);
System.out.println(name);//xxsf24.jpg
//File.separator linux 返回 / windows \\
String name1 = File.separator.equals("/")?path.substring(path.lastIndexOf("/")+1):path.substring(path.lastIndexOf("\\")+1);
System.out.println(name1);//c:/users/oa/goods/imag/xxsf24.jpg
//取出文件路径 c:/users/oa/goods/imag
}
}