JavaSE——day11Arrays、Calendar、System、Date、Math、Random类

Arrays类

   以下内容来自JDK1.6.0!
       Arrays类包为java.util.Arrays 继承自 java.long.Object。Arrays类中的方法都是静态方法。
    此类包含用来处理数组的各种方法(包括二分查找法、复制指定数组、判断两个数组是否相等、快速排序、返回字符串形式、基于指定数组的内容返回哈希码、将指定的 boolean 值分配给指定 boolean 型数组的每个元素)。此类还包含一个允许将数组作为列表来查看的静态工厂。
    此类是 Java Collections Framework 的成员。

    二分查找法

  方法摘要:      
static int binarySearch(byte[] a, byte key)
          使用二分搜索法来搜索指定的 byte 型数组,以获得指定的值。
static int binarySearch(byte[] a, int fromIndex, int toIndex, byte key)
          使用二分搜索法来搜索指定的 byte 型数组的范围,以获得指定的值。

    关于二分查找:
        Arrays类中的二分查找法只有这两种格式,但是查找的数组不仅仅是byte[]型,还有char[],double[],float[],int[],long[],short[],Object[],以及泛型T。

     toString方法

    toString方法继承自   long包下的 Object类。
方法摘要:

    

static String toString(int[] a)
          返回指定数组内容的字符串表示形式。
     关于toString:
                此方法的形式参数还可以是:boolean[],float[],double[],char[],byte[],Object[],long[],short[],返回是一个String字符串。

      sort快速排序方法

   方法摘要:
        
static void sort(byte[] a)
          对指定的 byte 型数组按数字升序进行排序。
static void sort(byte[] a, int fromIndex, int toIndex)
          对指定 byte 型数组的指定范围按数字升序进行排序。
      关于sort:
                Arrays类中的快速排序方法只有这两种格式,适用于7种常用类型+泛型+Object类型做形式参数。

       


其他方法:


     equals方法适用于7种+Object类型数组的相等判断,因为源码重写了toString方法,所以比较的是数组元素。方法摘要:

            

static boolean equals(int[] a, int[] a2)
          如果两个指定的 int 型数组彼此相等,则返回 true
    fill方法是用来将数组中所有元素或者指定范围元素来用一个值替换,这个值可以是7种+Object类型,替换值必须和数组类型一致。方法摘要:
static void fill(boolean[] a, boolean val)
          将指定的 boolean 值分配给指定 boolean 型数组的每个元素。
static void fill(boolean[] a, int fromIndex, int toIndex, boolean val)
          将指定的 boolean 值分配给指定 boolean 型数组指定范围中的每个元素。

      hashcode方法摘要:
static int hashCode(boolean[] a)
          基于指定数组的内容返回哈希码。
例子:
import java.util.Arrays;

public class Test {
	
	public static void main(String[] args) {
		int[] arr = {21,32,14,56,32,10};
		
		//toString 方法
		String str = Arrays.toString(arr);
		System.out.println("String:"+str);
		
		//二分查找法
		int index = Arrays.binarySearch(arr, 32);
		System.out.println("index:"+index);
		
		//sort快速排序
		Arrays.sort(arr);//快速排序返回值为void,结果不能被接收!!
		printArray(arr);
		
		//fill替换方法
		Arrays.fill(arr, 32);//将全部元素用32替代
		printArray(arr);
		
		//hashcode方法
		int hash = Arrays.hashCode(arr);
		System.out.println("hashcode: "+hash);
		
		//equals方法
		int arr2[] = {21,32,14,56,32,10};
		System.out.println(Arrays.equals(arr, arr2));//因为sort和fill方法都是直接改变了arr[]的值,所以不相等了
		int arr3[] = {32, 32, 32, 32, 32, 32};
		System.out.println(Arrays.equals(arr, arr3));
	}
	//遍历
	public static void printArray(int[] arr) {
		
		System.out.print("result:[");
		for(int x = 0 ;x <arr.length ; x++) {
			if(x == arr.length-1) {
				System.out.println(arr[x] + "]");
			}else {
				System.out.print(arr[x]+", ");
			}
		}
	}

}

Calendar类

    Calendar类是一个抽象类(public abstract class Calendar extends Object),它为特定瞬间与一组诸如 YEARMONTHDAY_OF_MONTHHOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

static Calendar getInstance() 
          使用默认时区和语言环境获得一个日历。 
static Calendar getInstance(Locale aLocale) 
          使用默认时区和指定语言环境获得一个日历。 
static Calendar getInstance(TimeZone zone) 
          使用指定时区和默认语言环境获得一个日历。 
static Calendar getInstance(TimeZone zone, Locale aLocale) 
          使用指定时区和语言环境获得一个日历。 

        Calendar类的构造方法都是被protected修饰的,所以只能对子类进行实例化。因为Calendar是一个抽象类,所以不能实例化。那么如何实例化呢?Calendar类中提供了一个静态方法:getInstance(),此方法返回的是一个Calendar对象。
 int get(int field)
          返回给定日历字段的值。

        要使用字段得到当前日期的话必须得使用get方法得到字段的值。


 
 
 
import java.util.Calendar;

public class Test2 {
	public static void main(String[] args) {
		
		//set up Calendar Object
		Calendar calendar = Calendar.getInstance(); 
		
		//get year,month,day
		int year = calendar.get(Calendar.YEAR);
		int month = calendar.get(Calendar.MONTH);
		int day = calendar.get(Calendar.DATE);
		System.out.println(year+"-"+(month+1)+"-"+day);
		
		//Calendar change:add method
		calendar.add(Calendar.YEAR, 2);
		year = calendar.get(Calendar.YEAR);
		calendar.add(Calendar.DATE,2);
		day = calendar.get(Calendar.DATE);

		System.out.println(year+"-"+(month+1)+"-"+day);
	}
}

Calendar中的两个常用方法:
 public abstract void add(int field,int amount)根据日历的规则,为给定的日历字段添加或减去指定的时间量 (这个方法常用) public final void set(int year, int month,int date)设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
import java.util.Calendar;

public class Test3 {
	public static void main(String[] args) {
		Calendar c = Calendar.getInstance();
		c.set(2018, 8, 8);
		
		//因为set方法返回值为void,故只能分别获取年月日
		int year = c.get(Calendar.YEAR);
		int month  = c.get(Calendar.MONTH);
		int date  = c.get(Calendar.DATE);
		System.out.println(year+"-"+month+"-"+date);
	}
}
例子:
import java.util.Calendar;
import java.util.Scanner;

/**
 * 需求:获取任意一年的二月有多少天  (改进:键盘录入一个年份)
 */
public class Test4 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		System.out.println("输入年份:");
		int year = sc.nextInt();
		
		Calendar c = Calendar.getInstance();
		c.set(year, 2, 1);//实际是2月1日
		c.add(Calendar.DATE, -1);
		System.out.println("2月有 " + c.get(Calendar.DATE)+ "天");
	}

}

注意:
        1、java中通过类调用字段得到的并不是字段的值,需要得到字段值的话只能通过get()这个静态方法。
        2、java中关于月份计算,一月对应的是0,所以需要得到实际的月分的话需要给字段MONTH值+1 。

System类
    

    System类是一个抽象类,这个类中有一些有用的 字段和方法,不能被实例化。
    在 System 类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。
字段摘要
static PrintStream err
          “标准”错误输出流。
static InputStream in
          “标准”输入流。
static PrintStream out
          “标准”输出流。
可以知道in这个字段在我们键盘录入的时候经常会用到,out字段在我们打印的时候也会经常用到。


常用方法:

public static void gc() 运行垃圾回收器
public static void exit(int status) 终止当前正在运行的 Java 虚拟机。参数用作状态码;  一般情况,需要终止
    Jvm,那么参数0
public static long currentTimeMillis() 返回以毫秒为单位的当前时间
public static void arraycopy(Object src,int srcPos, Object dest,int destPos, int length)  从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束
 src:原数组
 dest:目标数组
 srcPos :从原数组的哪个位置开始
 destPos:到目标数组的哪个位置结束
 length:长度
例子:( currentTimeMillis()gc()


   
   
   
 
 
public class Test1 {public static void main(String[] args) {//返回以毫秒为单位的当前时间,返回值为long型long ct = System.currentTimeMillis();System.out.println("time: "+ct +" ms");//这样用的意义不大
public class Test1 {public static void main(String[] args) {//返回以毫秒为单位的当前时间,返回值为long型long ct = System.currentTimeMillis();System.out.println("time: "+ct +" ms");//这样用的意义不大
                //可以用来计算运行一段代码的耗时,只需将代码放在两个时刻中间,然后计算两个时刻之间的时间即可求出。//gc()方法:用来回收不用的对象//先创建一个对象Person p = new Person("aloha", 22);System.out.println("回收前: "+p);//回收前: Person [name=aloha, age=22],因为p这个对象并不是无用对象。System.out.println("---------------------");//将p1空掉(不指定堆内存)Person p1 = new Person("alohaq", 221);p1 = null ;System.gc();System.out.println(p1);System.out.println(p);}}//这里写一个实体类:person 符合javabean规范的类就叫做实体类,类中变量、方法与sql存在对应关系。class Person{private String name ;private int age ;public Person() {super();}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;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + "]";}@Overrideprotected void finalize() throws Throwable {//重写垃圾回收器看看时候时候调用了这个方法System.out.println("不用这个对象了"+ this);super.finalize();}//有成员,有构造方法,有setget方法,有重写toString方法}

                //可以用来计算运行一段代码的耗时,只需将代码放在两个时刻中间,然后计算两个时刻之间的时间即可求出。//gc()方法:用来回收不用的对象//先创建一个对象Person p = new Person("aloha", 22);System.out.println("回收前: "+p);//回收前: Person [name=aloha, age=22],因为p这个对象并不是无用对象。System.out.println("---------------------");//将p1空掉(不指定堆内存)Person p1 = new Person("alohaq", 221);p1 = null ;System.gc();System.out.println(p1);System.out.println(p);}}//这里写一个实体类:person 符合javabean规范的类就叫做实体类,类中变量、方法与sql存在对应关系。class Person{private String name ;private int age ;public Person() {super();}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;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + "]";}@Overrideprotected void finalize() throws Throwable {//重写垃圾回收器看看时候时候调用了这个方法System.out.println("不用这个对象了"+ this);super.finalize();}//有成员,有构造方法,有setget方法,有重写toString方法}

打印结果:

    可以看到:System类中的currentTimeMillis()方法得到的值确实是以ms为单位的当前时间与1970年1月1日的差。对于gc()方法,它只会回收无用的对象,比如上例中我们创建了p,p1两个对象,我们把p1对象指向null,即不给它分配堆内存,那么p1对象就是我们垃圾回收器的回收对象。如何观察gc()方法调用了垃圾回收器finalize()方法?我们覆写了finalize()这个方法,在其中打印了一句话,就可以看到什么时候调用了垃圾回收器。
        exit(int status):可以结束死循环。status为0表示正常终止,不为0表示异常终止。

该方法调用 Runtime 类中的 exit 方法。该方法永远不会正常返回。 这个方法和finally有关系。

调用 System.exit(n) 实际上等效于调用:

 Runtime.getRuntime().exit(n)
       
         public static void arraycopy(Object src,int srcPos, Object dest,int destPos, int length):将src对象的srcPos开始的length长度的组复制覆盖到dest对象的destPos开始的组中。
例子:
import java.util.Arrays;

public class Test2 {
	
	public static void main(String[] args) {
		
		//System类中的数组复制方法
		int[] arr1 = {22,31,34,12,41,11};
		int[] arr2 = {11,23,42,543,63,22,234};
		System.out.println(Arrays.toString(arr1));
		System.out.println(Arrays.toString(arr2));
		
		System.arraycopy(arr1, 2, arr2, 2, 2);
		System.out.println(Arrays.toString(arr1));
		System.out.println(Arrays.toString(arr2));
	}
		
}
结果
 

Date类

    Date类虽然有很多方法已经过时,但是Date类中存在我们可以用来实现时间的格式化和解析的方法。可以实现在String和 Date类型之间进行转换 。另外,我们创建一个Date对象,那么输出这个对象会发现,这个对象是当前时间,精确到毫秒。
d对象的例子:
import java.util.Date;

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

        DateFormat是日期/时间格式化的抽象类,它以与语言无关的方式格式化并解析日期时间。我们可以用DateFormat类的直接子类SimpleDateFormat这个类来实现Date与String类之间的转换,并且,在SimpleDateFormat这个类中有对日期时间格式的说明。
日期格式化为Date——>String。解析相反。例子:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test3 {
	public static void main(String[] args) throws ParseException {
		Date d = new Date();
		System.out.println(d);
		//创建一个Date对象
		Date d1 = new Date();
		/**
		 * 格式化
		 */
		//创建sdf对象
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		//格式化
		String str = sdf.format(d1);
		System.out.println(str);
		/**
		 * 解析
		 */
		String strt  = "2018-05-03" ;
		SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
		Date d2 = sdf1.parse(strt);
		System.out.println(d2);
		
	}
}

练习例子:

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

/**
 *键盘录入你的出生年月日,算一下你来到这个世界多少天? 
 *
 *分析:
 *		1)创建键盘录入对象,录入一个数据出生年月日
 *		2)1990-xx-xx
 *		3)将文本格式的数据解析成日期对象
 *		4)getTime() ; 获取出生所在日期的时间毫秒值
 *		5)获取当前系统时间毫秒值
 *		(6) 5)-4) =  long time
 *
 *		6)换算
 *		
 *
 */
public class Test4 {
	
	public static void main(String[] args) throws ParseException {
		
		Scanner sc = new Scanner(System.in);
		System.out.println("按这个格式输入生日:yyyyMMdd");
		String birth = sc.nextLine();
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
		Date bi = sdf.parse(birth);
		long t = bi.getTime();
		
		Date d = new Date();
		long nt = d.getTime();

		long t1 = (nt - t) /1000 /60 /60 /24;
		System.out.println("你来到这个世界:"+t1+"天");
	}
}

Math类

常用方法:
  public static int abs(int a):绝对值
  public static double ceil(double a):向上取整
  public static double floor(double a):向下取整
  public static int max(int a,int b):求最大值
  public static int min(int a,int b):求最小值
  public static double pow(double a,double b):a的b次幂
  public static double random()返回带正号的 double 值,该值大于等于 0.0 且小于 1.0
  public static int round(float a):四舍五入
  public static double sqrt(double a):一个数的正平方根

Random类

Random:是一个可以获取随机数的类

 public Random():无参构造方法
 public Random(long seed) :指定long类型的数据进行构造随机数类对象
 
 public int nextInt():获取随机数,它的范围是在int类型范围之内
 
 public int nextInt(int n):获取随机数,它的范围是在[0,n)之间

猜你喜欢

转载自blog.csdn.net/weixin_38930706/article/details/80166533