Java.util.Arrays工具类:
·所有的方法是由static修饰,都是静态的,直接使用Arrays类名调用即可;
·而常用的Arrays方法为排序,以及二分法查找,使用可参考文档;
常用工具类:
·String
·StringBuffer
·基础类型对应的8个包装类
·日期相关类
·数字相关类
·Random
·Enum
在java中,使用双引号括起来的字符串是不可变的;且字符串数据是存储在方法区的“字符串常量池”当中;
new对象时,一定会在堆内存中开辟空间;
字符串通常有两种声明方式:
第一种是直接使用等号“=”赋值的方式,
(该方式存储字符串,会直接把数据存储在字符串常量池当中,先在栈中,压栈,然后内存地址会指向字符串常量池)
第二种是使用new的方式;
(首先然后new对象,就一定会在堆内存中开辟空间,该方法是先会在栈中压栈,然后再在堆内存new对象,然后再把内存地址指向“字符串常量池”)
注意:垃圾回收器是不会释放常量的;
字符串在比较时,双等号比较是变量中保存的内存地址,而不是值;
·在实际开发中,字符串比较一般采用的是equals()方法;但是java中最原始的equals()方法比较依然是内存地址,所以equals()方法需要重写,String类已经重写了方法;
·数字,可用使用运算符号进行比较,但是字符串之间进行比较需要使用compareTo()方法
·contains() 判断是否包含某个字符串;
·endSWith() 判断是否以某个字符串结尾;
·startsWith() 判断是否以某个字符串开始;
·toCharArray() 将字符串转化为char数组;
·toLowerCase() 将字符串转化为小写;
·toUpperCase() 将字符串转换为大写;
在String中,只有一个方法(valueOf())是静态的,不用new对象的;
·valueOf() 将不是字符串的数据。转化为字符串;当该方法转化的是一个对象时,并且对象没有重写toString时,valueOf()会把对象转换成一个内存地址;但如果重写了 toString()方法,则会把重写的内容转换为字符串;
StringBuffer:
·在实际开发中,每次使用+号拼接字符串,都会产生一个新的字符串,而这样则会在方法去的字符串常量池中,占用大量的内存空间;导致内存空间的浪费;而怎么做才不会造成 内存浪费呢,这个时候,就可以选择使用StringBuffer或者StringBuilder;
这两选择其中一个即可;
·StringBuffer底层实际是一个byte[] 数组;往StringBuffer中存储数据,实际上是存储在byte[]数组当中;
·StringBuffer的初始化容量是16;
然而在进行字符串拼接时,StringBuffer已经不是使用+号进行拼接了,而是使用append(),追加字符串;
append()方法底层在进行追加的时候,如果byte数组满了,会自动扩容;
如何给StringBuffer做性能优化?
·在创建StringBuffer的时候,最好先预定一个合适的初始值,可以提高程序的执行效率,这样可以减少byte[]数组的扩容次数,从而达到性能的优化;
StringBuffer和StringBuilder的区别:
·StringBuffer的源代码有synchronized关键字修饰,它是线程安全的;在多线程的环境下运行,它是安全的;
·StringBuilder的源代码中,没有synchronized关键字修饰,它是非线程安全的,表示,在多线程环境下运行,它是不安全的;
java定时器的作用:
·间隔特定的时间,去执行特定的程序;
·在实际开发中,每隔一段时间执行一段特定的代码;这种需求是很常见的;
那么其实在Java中是可以有多种方式实现的;
第一种:
可以使用sleep方法;睡眠,设置睡眠时间,每到这个时间点醒来,执行任务,但这种方法是最原始的定时器;
第二种:
在Java的类库中,已经写好了一个定时器,Java.util.Timer;可以直接拿来用,不过,这种方式在实际的开发中,也很少使用,因为现在有很多的高级框架都是支持定时任务的;
第三种:
在实际开发中,目前使用最多的是spring框架提供的springTask框架;在这个框架中,只要进行简单的配置,就可以完成定时器的任务;
定时器的实现方法:
首先new 一个Timer();
语法:
Timer timer=new Timer(); 在括号内写上ture,为开启定时守护;
使用schedule()方法;方法内有三个参数;
第一个参数为:需要执行的程序;
第二个参数为:第一次执行程序的时间;
第三个参数为:每隔多长时间执行程序;
Timer.schedule();