2023/7/3
Java的特性
编译、解释并运行
一次编译,处处运行
新的语言特性能够接纳、兼容和运行其他程序语言产生的字节码。
JCP、JDK
Java Specification
Java Community Process 掌管Java规范
Java Development Kit 实现Java规范
面向对象语言特点
识认性
类别性
多态性
继承性
2023/7/4
class类
类成员变量
一个文件只能有一个public class
基本类型
boolean
byte 1byte = 8bits -128~127
short/int/long
char 2bytes
方法
方法重载:函数名相同,形参不同
面向对象
OO 面向对象 OP面向过程
类命名要大写
基本类型为形参 函数传值
其余传引用
对象不会凭空产生或消失
变量
成员变量有默认值,局部变量没有。
局部变量优先级高于成员变量。
局部变量的作用域只在大括号内。
2023/7/5
构造函数
一个变量的生命周期:只能存储在离它最近的一个大括号内
当变量被创建时,变量将占据内存;当变量消亡时,系统将回收内存。
Java编译器会自动为没有显式定义空的无形参构造函数。
每个构造函数第一句话,如果不手动写super(),都会默认自动调用且仅调用一次super()(无参)。
this
this(,)调用相应的构造函数。
this指代当前对象。
子类构造函数第一句话一定是super(),如果父类没有空构造函数却实现了带形参的构造函数,并且子类构造函数没有显式调用该构造函数,则报错。
继承
一个Java类只能单一继承父类,但可以实现多个接口。
抽象类
子类继承于抽象类,需要实现父类所有的abstract方法。
一个类只能继承一个抽象类,实现多个接口,接口可以继承多个接口。
抽象类可以有方法被实现,接口所有方法不能有实现。
转型
子类可以转换成父类,而父类一般不可以转为子类。
重写/重写
override/overwrite 重写 子类重写父类方法
overload 重载方法
多态
解耦
子类转型为父类后,调用普通方法,如果子类进行了覆写,依旧是子类的方法。
2023/7/6
static
static变量只依赖于类存在,不依赖于对象存在
static block > anonymous block > constructor function
一个静态块代码在整个生命周期只会被执行一次
单例模式Singleton
类A内:
private A a = new A();
public A getInstance(){return a;}
final
final变量如果在类里面则必须初始化,如果只是函数局部变量且未被访问则不需要。
final类没有子类,final方法不能被子类改写,final变量不可变,final对象不能变更指针
常量池
Float Double没有常量池
常量赋值(栈内存)和new(堆内存)创建的不是同一个对象
编译器只会优化常量
不可变对象
八个基本类型封装对象+String、Big Decimal、BigInteger
2023/7/7
数字类
BigInteger/BigDecimal
Random nextInt(x) [0,x) nextDouble() [0,1] = Math.random()
String类
String 不可变对象
StringBuffer 同步 效率快
StringBuilder 异步 效率更快
String
charAt()找第几个
concat()连接两个字符串
contains()是否包含
endsWith()以…结尾 startsWith()以…开始
equals()相等
equalsIgnoreCase()忽略大小写
hashCode()哈希码
indexOf(char)查找字符或字符串第一次出现的位置
length()长度
matches(regex)是否匹配正则表达式
replace(char,char),replace(charSequence,charSequence),replace(regex,string)替换
replaceAll(regex,string)替换每个匹配子串
split(regex)分开成字符串数组
subString(int,int)截取begin-end子串
trim()去除前导和后置空格
valueOf(…)将…转换为String
StringBuffer/StringBuilder
append()
insert()
delete()
replace()
substring()
时间类
Date
Calendar
Calendar c = Calendar.getInstance() / = new GregorianCalendar();
get(int field)获取对应的年月日时分秒
getTime()返回当前的Date对象
getTimeInMillis()返回1970年以来的毫秒数
set()设置Calendar为指定年月日
add(int field,int amount)/roll()增加减少时间,roll不进行时间进位
其他
LocalDate日期类
LocalTime时间类
LocalDateTime = 前两个加起来
Instant时间戳
格式化类
数字格式化
NumberFormat -> DecimalFormat
df = new DecimalFormat(格式)
df.format(int toBeFormatted)
#可有可无
0必须有
以E0结尾:用科学计数法
字符串格式化
MessageFormat
MessageFormat.format(格式,填充数组)
时间格式化
DateFormat -> SimpleDateFormatter
df = new SimpleDateFormatter(格式)
Date d = df.parse(待转换时间字串)
String s = df.format(d)转换为新的格式
2023/7/10
访问权限
异常
处理异常
try…catch…finally
一个异常只会进入一个catch块里
覆写的方法不能抛出更多的异常或者异常的子类
throw 抛出异常
checked exception必须做出处理
unchecked exception不必须处理
2023/7/11
数组
数组的插入删除较慢
JCF
List
ArrayList 重点
非同步
快速访问,用于查询
add(num)
add(index,num)
get()
remove()
LinkedList
非同步
addFirst()
双向链表实现,适合经常变化的数据。
Vector
同步
性能差于ArrayList
Set
set中只能存储对象
HashSet 重点
无序
add()
clear()
contains()
remove()
retainAll()取交集
判断重复先判断HashCode是否一样,然后再判断equals方法
LinkedHashSet
可排序的,用双向链表来维护set
判断重复与HashSet一样
TreeSet
可排序的
不可以加null
进行比较的元素需要实现Comparable接口实现比较两个元素的compareTo方法
Map
map中键值都只能为对象
HashTable
无序
同步,数据量小
put()
contains()
containsValue()
containsKey()
get()
remove()
size()
HashMap 重点
无序
LinkedHashMap
基于双向链表维护插入顺序
TreeMap
基于红黑树的map
可以根据key自然排序
或者实现compareTo方法来进行排序
Properties
继承于HashTable
可以存储为文件
load()
store()
getProperty()
setProperty()
遍历
for循环
foreach: for (Type t : collection)
iterator遍历
Iterator it = collection.iterator();
while(it.hasNext()){
it.next();
}
Enumeration遍历
for(Enumeration e = collection.element();e.hasMoreElements()😉{
e.nextElement();
}
工具类 重点
Arrays类 处理数组
Arrays.sort(array)
Arrays.binarySearch(array,num)
copyOf()
fill()
equals()
Collections类 处理List
sort()
binarySearch()
fill()
max()
min()
reverse()
对象比较
大于返回1,等于返回0,小于返回-1。
实现Comparable接口——实现compareTo方法,直接调用sort()。
实现Comparator——实现compare方法,需要作为对象传入sort()第二个参数。
文件
File
分隔符:windows:\ Linux/Unix: /
createNewFile()
delete()
exists()
getAbsolutePath()
getName()
getParent()
getPath()
isDirectory()
isFile()
length()
listFiles()
mkdir()
mkdirs()
Files.move()
Path
Path p = file.toPath() / Paths.get(address,name)
DirectoryStream
Attribute
BasicFileAttribute bfa = Files.readAttributes(path,class)
字节/字符
字节:byte,8btis
字符:由字节形成
IO
字节:InputStream,OutputStream
FileInputStream,FileOutputStream
字符:Reader,Writer
FileReader,FileWriter
文本文件读写
try-source语句:
写:
try(BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(address)))){
bw.write();
…
}catch(IOException e){
e,printStackTrace();
}
读:
try(BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(address)))){
String line;
while((line = in.readLine()) != null){
System.out.println(line);
}
}catch(IOException e){
e.printStackTrace();
}
二进制文件读写
读:
try(DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(addtress)))){
String a,b;
a = readUTF();
b = readUtF();
int c ;
c = readInt();
}catch(IOException e){
e.printStackTrace();
}
写:
try(DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(address)))){
dos.writeUTF(“”);
dos.writeInt(1);
}catch(IOException e){
e.printStackTrace();
}
压缩解压缩
ZipInputStream,ZipOutputStream压缩文件输入输出流
ZipEntry压缩项
压缩过程:打开zip文件,添加ZipEntry,打开输入文件,读数据,向ZipEntry写数据,保存。
解压缩过程:打开输入的zip,获取下一个ZipEntry,新建目标文件,读取Zip数据,写入目标文件,保存。
2023暑假
Maven
框架
JUnit
使用前需要先导入maven依赖
文本处理
字符编码
GB18030>GBK>GB2312
UTF-8 变长 兼容ascii
读写文件时,转化类对象第二个参数传入编码字符串
国际化编程
java.util.ResourceBundle 加载一个语言_国家语言包
java.util.Locale 定义一个语言_国家
locale
语言 zh en
国家/地区 CN US
getDefault()
getAvailableLocales()
语言文件:properties文件 k-v对
如message.properties message_zh_CN.properties
ResourceBundle
根据locale要求加载properties文件
getString(String key)返回对应的value
正则表达式
Pattern正则表达式的编译表示
compile编译一个正则表达式为pattern对象
matcher用pattern对象匹配一个字符串
Matcher
用于匹配
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(string);
String.join() 拼接字符串元素
StringEscapeUtils.escapeJava(string)将字符串根据不同语言来转义
Guava库
Splitter.on(regex)拆分字符串并忽略空串
CaseFormat可以格式化字符串为驼峰型等等
Scanner
Scanner s = new Scanner(System.in);
s.setDelimiter(regex)设置分隔符
while(s.hasNext()){
…
}
InputStream in = IOUtils.toInputStream(string,charset)
System.setIn(in);
重定位输入流为字符串
文件处理
XML
可拓展标记语言
任何一个起始标签都有一个结束标签
所有的特性都必须有值,值必须带引号
<转义为<
注释为
DTD
XSD
XSL 等同于CSS作用于HTML
DOM 适合读小规模XML,写XML
SAX/Stax 适合读大规模XML
JDOM DOM4j
DOM
SAX
Stax
JSON
图形图像
BufferedImage bi = ImageIO.read(file)
ImageIO.write(BufferedImage,pattern,FileOutputStream)
条形码Barcode
一般容纳30个字母/数字
二维码QRcode
可存储几十KB字符
Zxing
Barcode4j
//生成二维码
public static void generateQRCode(File file, String content) f
//定义二维码参数
Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, “utf-8”);//设置编e
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);//设置容错等级
hints.put(EncodeHintType.MARGIN, 2);//设置边距默认是5
try {
BitMatrix bitMatrix = new MultiFormatwriter().encode(content, BarcodeFormat.QR_CODE, wIDTH, HEIGHT, hints);
Path path = file.toPath();
MatrixToImagewriter.writeToPath(bitMatrix, FORMAT, path);//写到指定路径下
} catch (Exception e) {
e.printStackTrace();
}
//读取二维码
public static void readQrCode(File file) {
MultiFormatReader reader = new MultiFormatReader();
try {
BufferedImage image = ImageIO.read(file);
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));
Map<DecodeHintType, Object> hints = new HashMap<>();
hints.put(DecodeHintType.CHARACTER_SET, “utf-8”);//设置编码
Result result = reader.decode(binaryBitmap, hints);
System.out.println(“解析结果:” + result.tostring());
System.out.println(“二维码格式:” + result.getBarcodeFormat());
System.out.println(“二维码文木内容:”+result.getText());
} catch (Exception e) {
e.printStackTrace();
}
Docx
XWPFDocument
读写段落
读写表格
Xls/Xlsx/CSV
解析表格
写入表格
多线程
创建
一般实现Runnable接口
变量共享
普通变量不共享
static变量所有线程共享
线程的变量依赖于工作缓存,而主线程则依赖于主存。
主线程只修改主存,加上volatile的变量可以被主线程修改。
volatile——线程共享的
synchronized——只允许一个线程同时访问的
setDaemon(true)设置当前线程为守护线程,与主线程同时结束,
Executor
Fork-join
并发数据结构
Thread t = new Thread(new Runnable(){
@Override
public void run(){}
});
Lock
Semaphore
Latch
Barrier
Phaser
Exchanger
定时任务
网络编程
基础
UDP
ds初始实例化传入端口,不写则随机。
ds.receive(dp)
ds.send(dp)
TCP
ServerSocket ss = new ServerSocket(port);
Socket s = ss.accept();
HTTP
NIO
AIO
Netty
第三方网络编程库,优化原有JDK包
ServerSocketChannel用于接受请求
SocketChannel用于接受数据交换
Mina
Apache开发
邮件
数据库
JDBC
连接池
混合编程
Java
RMI
C
JNI
声明native方法,并给出C语言实现
JavaScript
Nashorn
Python
Jython
WebService
命令行
语法糖
foreach
enum
构造函数一般为private
不定参数
静态导入
自动拆箱
异常
接口
定义default方法的接口,可以通过lambda表达式进行实例化。
try…with resource
Var
Switch
泛型
自定义
限定
[外链图片转存中…(img-Kni1PqQH-1715054705518)]
自动拆箱
[外链图片转存中…(img-zLWLGlUs-1715054705518)]
异常
[外链图片转存中…(img-3G0CU5Em-1715054705518)]
[外链图片转存中…(img-qDUq54t4-1715054705519)]
[外链图片转存中…(img-zR8CxtxD-1715054705519)]
接口
[外链图片转存中…(img-e6344eVA-1715054705519)]
定义default方法的接口,可以通过lambda表达式进行实例化。
[外链图片转存中…(img-srM5ihBY-1715054705519)]
[外链图片转存中…(img-JFEEQ2B7-1715054705527)]
[外链图片转存中…(img-OPhN4lCo-1715054705527)]
[外链图片转存中…(img-OUCNUxyG-1715054705527)]
try…with resource
[外链图片转存中…(img-C0UTDo51-1715054705527)]
[外链图片转存中…(img-VJUiIHFF-1715054705528)]
Var
[外链图片转存中…(img-ZMSq0Wn0-1715054705528)]
[外链图片转存中…(img-HCULUvnY-1715054705528)]
Switch
[外链图片转存中…(img-TUGUMZMG-1715054705528)]
[外链图片转存中…(img-imdsJdEs-1715054705528)]
[外链图片转存中…(img-G4jCAAwp-1715054705529)]
泛型
自定义
[外链图片转存中…(img-Ks5Ib6OR-1715054705529)]
[外链图片转存中…(img-hucj6A8U-1715054705529)]
限定
[外链图片转存中…(img-WNSFoGKE-1715054705529)]
[外链图片转存中…(img-pM4TqMgL-1715054705529)]
[外链图片转存中…(img-WJ40Cupj-1715054705529)]
[外链图片转存中…(img-lgTBOavo-1715054705530)]
[外链图片转存中…(img-mAMF8e3i-1715054705530)]