《java开发实战经典》李兴华——C11. 常用Java类库

一、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秒重复一次
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值