java不允许重载操作符
初始化和清理
finalize()方法:
在一个对象生命结束之前会调用这个函数,可以用来检查一些操作,如是否满足终结条件,尽量别用
字符串
string对象是不可变的,可以加任意多引用
字符串相加的时候内部调用了stringbuilder stringbuilder内部有一个append函数来实现
StringBuilder res=new StringBuilder("[");
for(int i=0;i<25;i++){
res.append(rand.nextInt(100));
res.append("]");
}
eturn res.toString()
对一个对象直接输出this,会调用他的tostring函数,要输出这个对象所在的地址的话需要使用Object.toString;也就是需要调用super.toString
String对象的一些基本方法
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiNx8FesU2cfdGLwczX0xiRGZkRGZ0Xy9GbvNGLwIzXlpXazxySXpVNRJTY1YXY1UTcpxUN2lGc1Y1QvVTQClGVF5UMR9Fd4VGdsATNfd3bkFGazxycykFaKdkYzZUbapXNXlleSdVY2pESa9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLiFjNwIzYyUGM4EDM3UmYidTYyQjN3ImNkVjM3kjYzY2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
格式化的输出
printf()
System.out.printf("saew [%d %f]ds ",x,y)
format():可以用于PrintStream和PrintWriter对象
System.out.format("saew [%d %f]ds ",x,y)
println()
System.out.println("saew ["+x+y+ "]ds ")
Formatter类
可以看做是一个翻译器,将格式化字符串和数据翻译成需要的结果,创建Formatter对象的时候,需要向其构造其船体一些信息,告诉他最终的结果将向哪里输出
Formatter f=new Formatter(System.out);
Formatter转换
%h对于小数依然可以输出一个十六进制码
格式化说明符
%[argument_index$][flags][width][.precision]conversion
默认情况下数据是右对齐,可以通过“-”来改变对其方向
width指出域的最小尺寸,presion指明最大尺寸,presion用在String的时候表示的是打印出的String输出字符的最大数量,浮点数的时候表示小数位数(默认6位)
小题
格式化字符可以拆分开:
int a =3; printf("%"+a+“d”,value);
String.format()函数:格式化生成String对象
正则表达式
java中的反斜线处理和其他语言中的正则表达式不一样,对于\,其他语言中表达的是一个普通的\,但是对于java中他表示的是正则表达式的\,也就是说,在java中表示一个普通的反斜线,应该要写\\,不过对于换行和制表符只需要使用单反斜线:\n,\t
要表示一个或者多个之前的表达式,需要使用+:例子:-?\d+ (-?表示可能有-号)
正则表达式的使用
最简单途径,使用Strign类内建的功能,matches函数 :"-1234".matched("-?\d+") (return true)
非常有用的自带正则表达式工具–split()方法:将字符串从正则表达式匹配的地方切开
split切割会把分割的标志去掉,比如\W分割,会按照非字符对String进行分割,在分割的时候会把这个非字符也给去除掉
split函数还有一个重载的版本,允许限制字符串分割的次数
字符串替换,替换第一个匹配的子串或者替换所有能够匹配的地方 replaceFirst(),replaceAll()
部分常用的表达式 可以参考jdk中 java.util.regex.Pattern
Pattern和Matcher
需要导入java.util.regex包,用static Pattern.Compile()方法来编译正则表达式,他会根据输入的String类型的正则表达式生成一个Pattern对象,之后可以调用他的matcher()方法,生成一个Matcher对象,用replaceall()对所有的匹配进行替换
这个类的split方法
String[] pattern.compile("!!").split(input,int num); do the first num
替换操作
replaceall();replacefirst();
appendReplacement(String Buffer sbuf,String replacement) 渐进式替换
appendtail(stringbuffer sbuf)在执行了一次或者多次appendreplacement之后用这个方法把输入字符串余下的部分复制到sbuf中
matcher对象reset操作,将原来的matcher对象应用于一个新的字符序列
读入数据
input.readline();需要用split进行分解
Scanner类
可以通过useDelimiter()函数来设定定界符
类型信息
多派生中获取某一个特定的类
使用Class.forName()方法创建一个对象的引用的时候会自动初始化这个class对象
使用.class来创建对象的引用的时候 不会自动初始化该Class对象
他的初始化是在对静态方法(构造器隐式是静态的)或者是非常数静态域进行首次引用的时候才初始化
static final 是一个编译器的常量 这个值不需要对类进行初始化就可以被读取到,但是如果只是其中之一的修饰,那么就不足以确保这种行为
数组
数组的复制函数System.arrycopy(源数组,开始位置,目的数组,开始位置,复制的元素个数) 他的比较是基于内容的
另外Arrays类下面还有一些比较实用的方法:sort,fill(可以设置填充的位置,但是只能够填充一个值),equals(判断两个数组是否相等),binarySearch(有序数组中对目标元素的查找) 返回第一个大于查找对象的元素在数组中的位置
自定义的类要实现排序功能的话需要实现comparable接口,实现compareTo方法,
java容器
List
ArrayList:长于随机访问元素,但是在list的中间插入和移动元素是比较慢
LinkedList:较低代价进行插入和删除,随机访问能力较差,特性集比ArrayList大
Linkedlist添加了可以让他用作栈,队列或者双端队列的方法
fetFirst和element():返回列表第一个元素并且不移除他,如果是空,就抛出Nosuchelementexception 对比:peek()在空的时候返回的是null;
removefirst和remove 删除并返回列表的头 空的时候返回异常,poll函数在空的时候回返回null
addFirst,add(),addLast :如函数名
removeLast 移除最后一个元素
Stack
可以直接用泛型类内部套LinkedList来进行实现,
直接用java.util.Stack
Set
TreeSet 将元素存储在红黑树数据结构中
HashSet
LinkedHashSet 是用了链表来维护元素的插入顺序
如果要对结果进行排序,一种方式就是使用treeset来代替hashset
SortedSet<Integer> intset=new TreeSet<nteger>()
Queue
LinkedList提供了方法支持队列的行为,实现了queue接口,所以linkedlist可以用作queue的一种实现,可以像linkedList向上转型为queue
Queue =new LinkedList()
offer()添加元素 peek,element不移除返回队头 poll和remove移除并返回队头
PriorityQueue 优先队列
Map
使用
Map<Integer,Integer> m=new HashMap<Integer,Integer>()
put,get方法
containsKey(),containsValue()方法 kesSet(),values()
迭代器Iterator
ListIterator是一个更强大的Iterator的子类型,可以用作各类List的访问他,可以双向移动
可以用listIterator()创建一个指向list开始处的迭代器,也可以用listIterator(n)来创建一个指向列表索引为n的元素处的ListIterator
hasPrevious函数,it.previous访问像一个
I/O系统
File类
目录列表器
File path=new File(".");list=path.list()返回列表; or list=path.list(new FilenameFilter()) 参数为实现了这个接口的一个类,对文件进行过滤
输入输出
inputstream 用来表示从不同数据源(自解数组,string对象,文件,pipe,一个由其他是种类的流组成的序列,其他的数据源,如internet连接等)产生输入的类
从文件进行读入
多线程编程
线程驱动任务
一种描述任务的方式,可以用Runnable接口来提供。要定义任务就要实现Runnable接口并编写run()方法,使得这个任务可以执行你的命令
线程的协调
wait,notify,notifyAll
数字和日期:
数字的解析
Integer.parseInt(String) Float.parseFloat(String)
数字的格式化
java.text.NumberFormat(这个是一个抽象类)
java.text.DecimalFormat(具体实现,使用的时候不能直接new,需要调用NumberFormat的静态方法getInsance返回)
| 例子:NumberFormat nf=NumberFormat. getInstance(Locale.US)
| print(nf.format(123456))
集合
对象的比较和排序
java. lang. Comparable / Java. lang. Comparator接口
arrays. sort和服务对象之间有协议(comparable接口),因此对象需要实现这个接口的compareTo函数
arrays. sort(arr,实现了conpareto接口的类) ,或者arr中元素实现了comparable接口
properties类
主要用于读取java的配置文件