Java常用包

作者:gqk;


 本节目标:

  1、 掌握 StringBuffer 的使用

  2、 掌握正则表达式、大数操作、日期格式化、Random 类的使用

  3、 理解 System、Runtime、Process、Math、Calendar 类的使用

StringBuffer(重点):

在程序中可以使用 String表示一个字符串的操作,但是 String本身有如下特点:
 两 种 声明的方式,而且比较的时候靠equals()比较内容   ·
 一个字符串的内容声明之后则不可改变  实际上 String最要命的一个问题就是内容无法改变,但是这种功能在实际的开发中又不可能避免掉,此时就可以依靠 StringBuffer 类来完成这种功能。当字符串的内容需要被改变的时候就使用 StringBuffer。

 StringBuffer 是 java.lang提供的一个开发包,类的定义如下:

 

如果现在需要将一个 StringBuffer 的类型变成 String的话,则必须依靠 toString()方法完成

根据 StringBuffer 的特点实际上就可以发现,对于需要经常改变内容的字符串肯定要使用 StringBuffer,而相反,如果 某些内容不需要随时改变的话,那么使用 String就够了。

1、 字符串反转  · 方法:public StringBuffer reverse()

2、 字符串替换  · 在 String类中依靠replaceAll()方法完成替换  · 方法:public StringBuffer replace(int start,int end,String str)

 


Runtime(理解)

 Runtime 表示的是运行时的状态对象,即:每当有一个 JVM 进程产生的时候都会自动生成一个 Runtime 类的对象。 但是在此类的定义中发现并没有构造方法的声明,很明显构造方法被私有化了,那么一旦构造方法被私有化,则内部一定 会存在一个方法,可以取得本类的实例化对象:public static Runtime getRuntime()。

取得系统信息

在 Runtime 类中定义了如下的三个方法,这些方法可以取得系统的内存使用情况:
 总 共可以使用的内存:public long totalMemory() 
 取得最大可用的内存:public long maxMemory()  
 取得当前空余的内存:public long freeMemory()

package com.xkrj.gqk;

public class HelloWorld {
public static void main(String[] args) {
	Runtime run = Runtime.getRuntime();
	run.gc();
	System.out.println("最大的内存空间:"+run.maxMemory());
	System.out.println("总共可以使用的空间:"+run.totalMemory());
	System.out.println("当前的空余空间:"+run.freeMemory());
	String str = "";
	for (int i = 0; i < 10000; i++) {//产生垃圾
		str+=i;
	}
	
	System.out.println("===========产生垃圾后==========");
	System.out.println("最大的内存空间:"+run.maxMemory());
	System.out.println("总共可以使用的空间:"+run.totalMemory());
	System.out.println("当前的空余空间:"+run.freeMemory());
}
}

 由于本程序中产生大量的垃圾,所以当操作完成之后,freeMemory()的空间明显减少。

在 Java 中对于垃圾收集实际上存在两种形式:   ·
 手工回收:public void gc()   ·
 自动回收:由系统完成 


 

System 类(理解)

System.out.println()代码一直在使用着,根据之前学习到的知识,可以发现,System 肯定是一个类,而 out 是一个静 态属性,而 println()是 out 对象所提供的一个方法。

package com.xkrj.gqk;

public class HelloWorld {
public static void main(String[] args) {
	long beginTime = System.currentTimeMillis();
	String str = "";
	for (int i = 0; i < 10000; i++) {//产生垃圾
		str+=i;
	}
	long endTime = System.currentTimeMillis();
	System.out.println("===========产生垃圾后==========");
	System.out.println("花费的时间为:"+(endTime-beginTime));
}
}

垃圾回收与对象生命周期(重点)  

 在 System 类中定义了如下的方法:public static void gc()。

当调用此方法的时候实际上就等同于调用了 Runtime 类中提供的 gc()方法,两个是一样的。

 

package com.xkrj.gqk;

public class HelloWorld {
public static void main(String[] args) {
	Person p = new Person();
	p = null;
	System.gc();
}
}
class Person{
	public Person(){
		System.out.println("我出生了......");
	}
	@Override
	protected void finalize() throws Throwable {
		System.out.println("我完了,我被回收了......");
	}
}

一般一个对象都要经历以下的生命周期:
 加载   初始化   使用   回收   卸载  


Math 类

Math 类本身表示的是数学的操作类,里面提供了各种各样的数学操作方法

方法:public static long round(double a),四舍五入

这个四舍五入是将小数点之后的内容全部进行了省略,那么如果要想进行准确的四舍五入的话,最早的做法是通过 BigDecimal 类完成的,这个类也称为大数操作类

大数操作类

现在如果假设有两个数字非常的大,那么如果进行相乘的话,则肯定数字的会更大,此时,传统的数据类型已经无 法装下了(Infinity 无穷大)

package com.xkrj.gqk;

public class HelloWorld {
public static void main(String[] args) {
	 double d1 = Double.MAX_VALUE;
	 double d2 = Double.MAX_VALUE;
	 System.out.println(d1 * d2);
}
}

所以在Java 中为了解决这种大数的操作,提供了两个类:BigInteger、BigDecimal 

大整数操作类:BigInteger

 

package com.xkrj.gqk;

import java.math.BigInteger;

public class HelloWorld {
public static void main(String[] args) {
	BigInteger bi1 = new BigInteger(Long.MAX_VALUE+"");
	BigInteger bi2 = new BigInteger(Long.MAX_VALUE+"");
	System.out.println("加法:"+bi1.add(bi2));
	 System.out.println("减法:" + bi1.subtract(bi2)); 
	 System.out.println("乘法:" + bi1.multiply(bi2));
	 System.out.println("除法:" + bi1.multiply(new BigInteger("333"))); 
	 BigInteger res[] = bi1.divideAndRemainder(new BigInteger("333")) ;
	 System.out.println("整数部分:" + res[0]) ;
	 System.out.println("小数部分:" + res[1]) ; 
}
}

 随机数

在 java.util.Random 类中主要的功能是用于产生随机数的。

产生 10 个数字,都不大于 100

package com.xkrj.gqk;

import java.util.Random;

public class HelloWorld {
public static void main(String[] args) {
	Random r = new Random();
	for (int i = 0; i < 10; i++) {
		System.out.println(r.nextInt(10));
	}
}
}

日期操作(重点)  

Date 类

java.util.Date 类是一个专门取得日期的操作类,本身的使用非常的简单,直接实例化对象输出即可。

获得系统当前的时间

package com.xkrj.gqk;

import java.util.Date;

public class HelloWorld {
public static void main(String[] args) {
	System.out.println(new Date());
}
}

  确实是取得了一个日期,但是这个日期的格式并不符合于中国的习惯。

Calendar 类

Calendar 类是采用手工的方式取得日期,可以通过此类精确到毫秒,此类的定义如下:

public abstract class Calendar extends Object implements Serializable, Cloneable, Comparable<Calendar> 

这个类本身是一个抽象类,抽象类要想实例化肯定使用子类:GregorianCalendar

package com.xkrj.gqk;

import java.util.Calendar;
import java.util.GregorianCalendar;

public class HelloWorld {
public static void main(String[] args) {
	Calendar calender = new GregorianCalendar();
	System.out.println("年:"+calender.get(Calendar.YEAR));
	System.out.println("月:"+(calender.get(Calendar.MONTH)+1));
	System.out.println("日:"+calender.get(Calendar.DATE));
	System.out.println("时:"+calender.get(Calendar.HOUR_OF_DAY));
	System.out.println("分:"+calender.get(Calendar.MINUTE));
	System.out.println("秒:"+calender.get(Calendar.SECOND));
	System.out.println("毫秒:"+calender.get(Calendar.MILLISECOND));
}
}

 作业: //封装获取 xxxx年xx月xx日 xx时xx分xx秒的方法;

SimpleDateFormat 类(绝对重点)可以对时间进行格式化,也可以和Date和字符串之间转换

 Date 本身提供的数据已经属于一个完整的日期时间了,但是其显示的效果并不完整,所以如果现在需要将显示的日 期进行格式化的话,就可以通过 java.text.SimpleDateFormat 类完成功能。  但是如果要进行格式化的话,有一点必须注意的是,需要指定一个格式化日期的模板:   ·
 年 ( yyyy)、 月 ( MM)、日(dd)、 时 ( HH)、 分 ( mm)、 秒 ( ss)、 毫秒(SSS)

package com.xkrj.gqk;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class HelloWorld {
public static void main(String[] args) throws ParseException {
	String str = "2018-08-08";
	SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
	Date date = sf.parse(str);
	System.out.println(date);
	System.out.println(sf.format(date));
}
}

Arrays 类(操作数组的类)

package com.xkrj.gqk;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

public class HelloWorld {
public static void main(String[] args) throws ParseException {
	 int temp[] = { 50, 45, 8, 9, 1, 23, 4, 5, 23, 21, 324 }; 
	 Arrays.sort(temp); //数组的排序
	 System.out.println(Arrays.toString(temp)); 
	 Arrays.fill(temp, 2); //将指定的int型数据分配给temp的每个元素
	 System.out.println(Arrays.toString(temp)); 
}
}

  但是在这个类的sort()方法中有一个以下的排序操作:public static void sort(Object[] a)

对数组对象进行排序

package com.xkrj.gqk;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

public class Person {
	private String name;
	private int age; 
	
public static void main(String[] args) throws ParseException {
	Person per[] = { new Person("张三", 20), new Person("李四", 19), new Person("王五", 23) };   
	 Arrays.sort(per); 
	 for (int i = 0; i < per.length; i++) {
		System.out.println(per[i]);
	}
}

public Person(String name, int age) {
	super();
	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 "Person [name=" + name + ", age=" + age + "]";
}

}

 报错:

此时提示的是一个类转换异常:Person 类的对象不能向 Comparable 转换。

比较器(绝对重点)

Comparable(重点) 

 Comparable 接口中只存在了一个 compareTo()的方法,此方法的主要功能是编写比较规则的,此方法返回一个 int 型 的数据,此值会返回三种结果:  

· 0:两个对象相等  

· 1:大于  

· -1:小于 

如果要使用 Arrays.sort()进行排序的话,则肯定要在对象所在的类中进行编写比较器的操作。

package com.xkrj.gqk;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

public class Person implements Comparable<Person> {
	private String name;
	private int age; 
	
public static void main(String[] args) throws ParseException {
	Person per[] = { new Person("张三", 20), new Person("李四", 19), new Person("王五", 23) };   
	 Arrays.sort(per); 
	 for (int i = 0; i < per.length; i++) {
		System.out.println(per[i]);
	}
}

public Person(String name, int age) {
	super();
	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 "Person [name=" + name + ", age=" + age + "]";
}

@Override
public int compareTo(Person o) {
	if(this.age>o.age){
		return 1;
	}else if(this.age<o.age){
		return -1;
	}else{
		return 0;
	}
	
}

}

  

  

 

posted @ 2018-09-17 15:44  少侠gqk  阅读(555)  评论(0编辑  收藏  举报