一、StringBuffer
频繁修改字符串时用
.append()
.indexOf()
.insert() 指定位置处加上指定支付串
.reverse() 内容反转
.replace()
.length()
.delete() 删除指定范围的字符串
.substring()
.toString()
二、Runtime
Runtime类是JVM的实例
.getRuntime() 取得runtime类的实例
.freeMemory() 返回Java虚拟机中空闲内存量
.maxMemory() 返回JVM最大内存量
.gc() 运行垃圾回收器
.exec() 执行本机命令
示例:
public static void main(String args[]) {
Runtime run = Runtime.getRuntime();
System.out.println("操作str前JVM最大内存:"+ run.maxMemory());
System.out.println("操作str前JVM空闲内存:"+ run.freeMemory());
String str = "hello"+"world"+"!!!"+"\t"+"welcome"+"to"+"here!";
for(int i=0;i<500;i++) {
str += i;
}
System.out.println("操作str后JVM空闲内存:"+ run.freeMemory());
run.gc();
System.out.println("垃圾回收后JVM空闲内存:"+ run.freeMemory());
}
Runtime类与Process类可以操控进程启动and停止:
public static void main(String args[]) {
Runtime run = Runtime.getRuntime();//实例化
Process pro = null;//声明一个Process对象,接收启动的进程
try {
pro = run.exec("notepad.exe");//运行笔记本程序,必须try...catch...
} catch (IOException e) {
e.printStackTrace();
}
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//线程存活5秒
pro.destroy();//结束进程
}
三、国际化程序
1.国际化程序的实现思路:
一个程序要求同时适应法语、英语、中文的显示,就得使用国际化。
使用到的类:
java.util.Locale(表示一个国家语言类)
java.util.ResourceBundle(用于访问资源文件)
java.text.MessageFormat(格式化资源文件的占位字符串)
示例:
三个资源文件:类似下例
main方法:
public static void main(String args[]) {
Locale zhLoc = new Locale("zh","CN");//表示中国地区
Locale enLoc = new Locale("en","US");
Locale frLoc = new Locale("fr","FR");
ResourceBundle zhrb = ResourceBundle.getBundle("Message",zhLoc);//找到中文的属性文件
ResourceBundle enrb = ResourceBundle.getBundle("Message",enLoc);
ResourceBundle frrb = ResourceBundle.getBundle("Message",frLoc);
System.out.println("中文版:"+zhrb.getString("info"));
System.out.println("英文版:"+enrb.getString("info"));
System.out.println("法文版:"+frrb.getString("info"));
}
其中: Locale类:构造一个国家的语言环境(各个国家都有对应的ISO编码,中国是zh-CN)
ResourceBundle类:读取属性文件
2.处理动态文本:
占位符:“{0}”,如果有更多占位符,依次用{1}、{2}...表示。
通过MessageFormat.format()方法设置动态文本内容。
示例:
三个资源文件:
main方法:
public static void main(String args[]) {
Locale zhLoc = new Locale("zh","CN");//表示中国地区
Locale enLoc = new Locale("en","US");
Locale frLoc = new Locale("fr","FR");
ResourceBundle zhrb = ResourceBundle.getBundle("Message",zhLoc);//找到中文的属性文件
ResourceBundle enrb = ResourceBundle.getBundle("Message",enLoc);
ResourceBundle frrb = ResourceBundle.getBundle("Message",frLoc);
String str1 = zhrb.getString("info");
String str2 = enrb.getString("info");
String str3 = frrb.getString("info");
System.out.println("中文版:"+MessageFormat.format(str1, "李兴华"));
System.out.println("英文版:"+MessageFormat.format(str2, "lixinghua"));
System.out.println("法文版:"+MessageFormat.format(str3, "LiXingHua"));
}
3.使用类代替资源文件:
很少使用,不看了。
四、System类
.exit() 参数为0,即系统退出
.gc()
.currentTimeMillis()
.arraycopy() 数组复制操作
.getProperties() 获得当前系统的全部属性
.getProperty(String key) 根据key取得属性的具体内容
五、日期操作类
1.Date类:
new Date() 得到当前系统日期
2.Calendar类:
Calendar是个抽象类,通常用其子类GregorianCalendar进行实例化
Calendar c = new GregorianCalendar();
c.get(Calendar.YEAR);//年
c.get(Calendar.MONTH);//月
c.get(Calendar.DAY_OF_MONTH);//日
c.get(Calendar.HOUR_OF_DAY);//时
c.get(Calendar.MINUTE);//分
c.get(Calendar.SECOND);//秒
c.get(Calendar.MILLISECOND);//毫秒
3.DateFormat类:
DateFormat df1 = DateFormat.getDateInstance();//取日期
DateFormat df2 = DateFormat.getDateTimeInstance();//取日期时间
DateFormat df3 = DateFormat.getDateInstance(DateFormat.YEAR_FIELD, new Locale("zh","CN"));//取格式化的日期
System.out.println(df1.format(new Date()));//2018-10-22
System.out.println(df2.format(new Date()));//2018-10-22 15:30:08
System.out.println(df3.format(new Date()));//2018年10月22日
4.SimpleDateFormat类:
日期转化类。常用于将String变为Date
要先定义一个完整的日期转化模板,在模板中通过特定的日期标记讲数字提取出来。
模板标记:年-yyyy 月-MM 日-dd 时-HH 分-mm 秒-ss 毫秒-SSS
常用方法:.parse() 包含日期的字符串解析为Date类型
.format() Date类型按照指定格式变成String类型
String oldDate = "2018-10-22 10:10:10.123";
//准备第一个模板,用于提取数字
String moudle1 = "yyyy-MM-dd HH:mm:ss.SSS";
//准备第二个模板,用于指定目标格式
String moudle2 = "yyyy年MM月dd日HH时mm分ss秒SSS毫秒";
SimpleDateFormat sdf1 = new SimpleDateFormat(moudle1);//实例化模板对象
SimpleDateFormat sdf2 = new SimpleDateFormat(moudle2);//实例化模板对象
Date d = null;
try {
d = sdf1.parse(oldDate);//解析oldDate
}catch(ParseException e) {
e.printStackTrace();
}
String newDate = sdf2.format(d);//格式化为newDate
六、Math类
Math类中的方法都是静态方法,可由类名直接调用。包括:绝对值/三角函数/平方根/最大最小值/四舍五入等。
七、Random类
public static void main(String args[]) {
Random r = new Random();
System.out.println(r.nextInt(10));
}
八、NumberFormat类
1.NumberFormat的基本使用
数字的格式化类。
NumberFormat nf = NumberFormat.getInstance();
System.out.println("格式化后的数字"+nf.format(1000000));
//输出结果:1,000,000
2.DecimalFormat类:
可自定义格式化数字。与SimpleDateFormat类似,自定义格式时需要指定模板。
九、BigInteger类
大整数。
.add() .subtract() .multiply() .divide()
.max() .min() .divideAndRemainder()---返回数组,第一个元素为商,第二个元素为余数
十、BigDecimal类
要求计算精度的时候用。
十一、对象克隆技术
实现Cloneablejiekou,覆写clone方法。
class Person implements Cloneable{
private String name;
public Person(String name) {
this.setName(name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "姓名:"+this.name;
}
//覆写clone方法
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
//main方法
public class PetShopDemo {
public static void main(String args[]) throws CloneNotSupportedException {
Person p1 = new Person("张三");
Person p2 = (Person) p1.clone();
System.out.println(p1);//姓名:张三
System.out.println(p2);//姓名:张三
}
}
十二、Arrays类
java.util包中,主要实现数组元素的查找,数组内容饿填充、排序等。
int temp[] = {2,3,5,8,1,9,4,8,3,2};
Arrays.sort(temp);//排序:[1, 2, 2, 3, 3, 4, 5, 8, 8, 9]
String str = Arrays.toString(temp);//以字符串输出数组:[1, 2, 2, 3, 3, 4, 5, 8, 8, 9]
int point = Arrays.binarySearch(temp, 3);//检索数据最后一次出现的位置:4
Arrays.fill(temp, 10);//填充数组:[10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
十三、Comparable类
1.比较器的基本应用:
使用Arrays.sort()可以对Object数组排序,但是该对象所在类必须先实现Comparable接口。
Comparable接口只有.compareTo()一个方法,返回int型数据,值为1(表示大于),0(等于),-1(小于)
//设计一个学生类,包含姓名、成绩、年龄,按成绩排序,成绩相同时按照年龄排序
public class PetShopDemo {
public static void main(String args[]){
Student stu[] = {new Student("aaa",99.0f,11),
new Student("bbb",77.0f,22),
new Student("ccc",88.0f,11),
new Student("ddd",88.0f,22)};
Arrays.sort(stu);
for(Student i: stu) {
System.out.println(i);
}
}
}
class Student implements Comparable<Student>{//必须实现该接口,不然报错
private String name;
private float score;
private int age;
public Student(String name,float score,int age) {
this.name = name;
this.score = score;
this.age = age;
}
public int compareTo(Student stu) {
if(stu.score >this.score) {
return 1;
}else if(stu.score<this.score){
return -1;
}else if(stu.age>this.age) {
return 1;
}else if(stu.age<this.age) {
return -1;
}else {
return 0;
}
}
@Override
public String toString() {
return name + "\t\t" + score + "\t\t" + age;
}
}
2.分析比较器的排序原理:
二叉树排序 + 中序遍历。
1) 二叉树:第一个内容作为根节点保存,如果后面的值比根节点小,就放左子树,否则右子树。
2) 中序遍历: 左子树→根节点→右子树
十四、另一种比较器Comparator
如果一个类已经开发完毕但是并没有实现Comparable接口,此时是无法进行对象排序的。为解决该问题,Java提供了另一个比较器的操作接口——Comparator。
示例:
一个没实现Comparable接口的学生类,包含姓名、年龄。现在将其对象按年龄由大到小排序。
public class PetShopDemo {
public static void main(String args[]){
Student stu[] = {new Student("aaa",11),
new Student("bbb",22),
new Student("ccc",33),
new Student("ddd",22)};
Arrays.sort(stu,new StudectComparator());//指定排序规则
for(Student i: stu) {
System.out.println(i);
}
}
}
class Student{
private String name;
private int age;
public Student(String name,int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return name + "\t\t" + age;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
//实现Comparator类进行排序
class StudectComparator implements Comparator<Student>{
public int compare(Student stu1, Student stu2) {
if(stu1.equals(stu2)) {
return 0;
}else if(stu1.getAge()>stu2.getAge()) {
return 1;
}else if(stu1.getAge()<stu2.getAge()) {
return -1;
}
return 0;
}
}
十五、正则表达式
1.认识正则:
^ 表示匹配字符串的开始位置
$ 表示匹配字符串的结束位置
* 表示匹配 零次到多次
+ 表示匹配 一次到多次 (至少有一次)
? 表示匹配零次或一次
. 表示匹配单个字符
| 表示为或者,两项中取一项
( ) 小括号表示匹配括号中全部字符
[ ] 中括号表示匹配括号中一个字符 范围描述 如[0-9 a-z A-Z]
{ } 大括号用于限定匹配次数 如 {n}表示匹配n个字符 {n,}表示至少匹配n个字符 {n,m}表示至少n,最多m
\ 转义字符 如上基本符号匹配都需要转义字符 如 \* 表示匹配*号
\w 表示英文字母和数字 \W 非字母和数字
\d 表示数字 \D 非数字
实际上正则表达式操作类是需要通过Pattern和Matcher两个类完成的。
2.Pattern和Matcher类
Pattern类的主要作用是进行正则规范的编写,Matcher类主要是执行规范,验证一个字符串是否符合其规范,
示例:
String str = "1999-12-03";
Pattern p = Pattern.compile("\\d{4}-\\d{2}-\\d{2}");//实例化Pattern对象,并定义正则
Matcher m = p.matcher(str);//实例化Matcher对象
if(m.matches()) {//验证匹配
System.out.println("ok");
}else {
System.out.println("not ok");
}
3.String类对正则表达式的支持:
String类中有3个方法支持正则操作:
.matches(String regex)
.replaceAll(String regex,String replacement)
.split(String regex)
十六、定时调度
1.Timer类:
2.TimerTask类:
3.范例——定时操作:定时打印系统当前时间
//建立TimerTask的子类
class MyTask extends TimerTask{
@Override
public void run() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
System.out.println("当前系统时间为:"+ sdf.format(new Date()));
}
}
//建立测试类,进行任务调度
public class PetShopDemo {
public static void main(String args[]){
Timer t = new Timer();//建立Timer类对象
MyTask mytask = new MyTask();//定义任务
t.schedule(mytask, 1000,2000);//设置任务执行,1秒后开始,每2秒重复一次
}
}