一、replace()和repalceAll()
(1)replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换。
(2)replaceAll的参数是regex,即基于规则表达式的替换。比如,可以通过replaceAll(“\d”, “*”)把一个字符串所有的数字字符都换成星号。
相同点:都是全部替换,如果只想替换第一次出现的,可以使用replaceFirst(),这个方法也是基于规则表达式的替换。
如果replaceAll()和replaceFirst()所用的参数据不是基于规则表达式的,则与replace()替换字符串的效果是一样的。
执行了替换操作后,源字符串的内容是没有发生改变的。(替换后返回新的字符串,原来的不变)
二、字符串equals()和==
equals()判断字面是否相同(对象->类型->长度->逐个),==判断是不是同一个对象引用。
三、定时任务
1.简介
(1)在java中一个完整定时任务需要由Timer、TimerTask两个类来配合完成。
(2)Timer:一种工具,线程用其安排以后再后台线程中执行的任务。
(3)TimerTask:Timer把TimerTask安排为一次执行或重复执行的任务。(继承TimerTask的子类要实现run()方法)
2.Timer类
(1)Timer是线程安全的,理解为要获得Timer对象的“key”才能使用这个对象。
(2)Timer的计时器?
(3)schedule方法:
①schedule(TimerTask task, Date time):安排在指定的时间执行指定的任务。
②schedule(TimerTask task, Date firstTime, long period) :安排指定的任务在指定的时间开始进行重复的固定延迟执行。
③schedule(TimerTask task, long delay) :安排在指定延迟后执行指定的任务。
④schedule(TimerTask task, long delay, long period) :安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。
(4)scheduleAtFixedRate方法:
①scheduleAtFixedRate(TimerTask task, Date firstTime, long period):安排指定的任务在指定的时间开始进行重复的固定速率执行。
②scheduleAtFixedRate(TimerTask task, long delay, long period):安排指定的任务在指定的延迟后开始进行重复的固定速率执行。
3.TimerTask类:TimerTask是一个抽象类,每一个具体的任务类都必须继承TimerTask,然后重写run()方法。
4.使用实例
public class TimerTest01 {
Timer timer;
public TimerTest01(int time){
timer = new Timer();
timer.schedule(new TimerTaskTest01(), time * 1000);
}
public static void main(String[] args) {
System.out.println("timer begin....");
new TimerTest01(3);
}
}
public class TimerTaskTest01 extends TimerTask{
public void run() {
System.out.println("Time's up!!!!");
}
}
5.Timer缺陷
(1)首先Timer对调度的支持是基于绝对时间的,而不是相对时间,所以它对系统时间的改变非常敏感。
(2)Timer线程是不会捕获异常的,如果TimerTask抛出的了未检查异常则会导致Timer线程终止,同时Timer也不会重新恢复线程的执行,他会错误的认为整个Timer线程都会取消。同时,已经被安排单尚未执行的TimerTask也不会再执行了,新的任务也不能被调度。
6.用ScheduledExecutorService代替Timer
ScheduledExecutorService scheduExec = Executors.newScheduledThreadPool(2);