Arrays类
Arrays类主要是针对数组操作的工具类
Arrays类的一些方法:
public static String toString(int[] a):可以将int类型的数组转换成字符串 ([元素1,元素2,元素3...])
public static void sort(int[] a)对指定的 int 型数组按数字升序进行排序
public static int binarySearch(int[] a,int key):二分搜索法: 在int类型的数组中查找key元素的索引
例如:
package TextDome;
import java.util.Arrays;
public class AarrysDome {
public static void main(String[] args) {
int[] arr= {23,34,45,21,35,65};
String str=Arrays.toString(arr);
System.out.println(str);
System.out.println("------------------");
//这个不用像数组遍历一样(String str=Arrays.toString(arr);)返回String值去输出,直接调用就行,否则会编译出错
Arrays.sort(arr);
String str1=Arrays.toString(arr);
System.out.println(str1);
System.out.println("-----------------");
//运用这个二分查找法,前提也必须数组是有序的,才可以去调用
int index=Arrays.binarySearch(arr, 65);
System.out.println(index);
}
}
运行结果:
遍历后的数组是:[23, 34, 45, 21, 35, 65]
------------------
排序后的数组是:[21, 23, 34, 35, 45, 65]
-----------------
这个数的索引是:5
Calendar类(日历类)
Calendar类是一个抽象类,不能创建对象。(例如:Calendar c=new Calendar();这样是错误的)
它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法
public static Calendar getInstance() :通过一个静态功能来创建日历了对象
以下是获取当前时间的日期
例如:
package TextDome;
import java.util.Calendar;
public class getInstenceDome {
public static void main(String[] args) {
// 通过调用静态getInstance方法创建对象
Calendar ca=Calendar.getInstance();
// 获取年份
int year=ca.get(Calendar.YEAR);
// 获取月份,这里的月份是从0开始的,所以在输出的时候需要给月份上+1
int month=ca.get(Calendar.MONTH);
// 获取日份
int date=ca.get(Calendar.DATE);
System.out.println(year+"年"+(month+1)+"月"+date+"日");
}
}
运行结果:
2018年5月2日
Calendar中的两个常用方法:
public abstract void add(int field,int amount)根据日历的规则,为给定的日历字段添加或减去指定的时间量 (这个方法常用)
public final void set(int year, int month,int date)设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
例如:
package TextDome;
import java.util.Calendar;
public class addDome {
public static void main(String[] args) {
Calendar c=Calendar.getInstance();
int year=c.get(Calendar.YEAR);
int month=c.get(Calendar.MONTH);
int date=c.get(Calendar.DATE);
System.out.println(year+"年"+(month+1)+"月"+date+"日");
System.out.println("-------------------");
//设置成三年前的七天前
c.add(Calendar.YEAR, -3);
c.add(Calendar.DATE, -7);
year=c.get(Calendar.YEAR);
date=c.get(Calendar.DATE);
System.out.println(year+"年"+(month+1)+"月"+date+"日");
System.out.println("-----------------");
Calendar c1=Calendar.getInstance();
c1.set(2023, 6,3);
int year1=c1.get(Calendar.YEAR);
int month1=c1.get(Calendar.MONTH);
int date1=c1.get(Calendar.DATE);
System.out.println(year1+"年"+(month1+1)+"月"+date1+"日");
}
}
运行结果:
2018年5月2日
-------------------
2015年5月25日
-----------------
2023年7月3日
根据上述例子解决例题:
获取任意一年的二月有多少天 (改进:键盘录入一个年份)
//思路:只需要将月份固定成2月,然后将日期通过add()方法-1即可求出
package TextDome;
import java.util.Calendar;
//获取任意一年的二月有多少天?
import java.util.Scanner;
public class addTextDome {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请您输入一个年份:");
int year=sc.nextInt();
Calendar ca=Calendar.getInstance();
//因为这里实际是三月一日,上例中提到输出时月份都得+1,因为月份是从0开始记起的
ca.set(year, 2,1);
ca.add(Calendar.DATE, -1);
int date=ca.get(Calendar.DATE);
System.out.println(year+"年的2月有"+date+"天");
}
}
System类
System类被final修饰,不能被继承,也不能实例化
System 类包含一些有用的类字段和方法。它不能被实例化。
常用的方法:
public static void gc()运行垃圾回收器。
例如:
package TextDome;
//public static void gc()运行垃圾回收器。
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;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
@Override
protected void finalize() throws Throwable {
System.out.println("gc()垃圾回收走的是finalize方法,"+this);
super.finalize();
}
}
public class SystemDome {
public static void main(String[] args) {
Person p=new Person("迪丽热巴",27);
System.out.println(p);
p=null;//这里的p将不再指向堆内存了,回收的是堆内存的成员变量
System.gc(); //这里的垃圾回收实质走的是finalize方法
}
}
运行结果:
Person [name=迪丽热巴, age=27]
gc()垃圾回收走的是finalize方法,Person [name=迪丽热巴, age=27]
友情提示:这里建议将Person类与主类分开写,为了方便观看我才写在一起,由上例可以看出gc()方法走的是重写finalize方法
public static void exit(int status)终止当前正在运行的 Java 虚拟机。参数用作状态码; 一般情况,需要终止
Jvm,那么参数为0
例如:
import javax.swing.plaf.synth.SynthSpinnerUI;
/*
public static void exit(int status)终止当前正在运行的 Java 虚拟机。参数用作状态码; 一般情况,需要终止
Jvm,那么参数为0
public static long currentTimeMillis()返回以毫秒为单位的当前时间
*/
public class SystemDome1 {
public static void main(String[] args) {
System.out.println("迪丽热巴最美");
System.exit(0);
System.out.println("高雯也很美");
System.out.println("大家美才是真的美");
}
}
运行结果:
迪丽热巴最美
由上例可以看出,不管在exit()方法后面输出多少,在控制台他只是输出第一句,所以当这个方法被调用时,后面输出再多都将没有意义。
public static long currentTimeMillis()返回以毫秒为单位的当前时间
例如:
package TextDome;
/*
public static void exit(int status)终止当前正在运行的 Java 虚拟机。参数用作状态码; 一般情况,需要终止
Jvm,那么参数为0
public static long currentTimeMillis()返回以毫秒为单位的当前时间
*/
public class SystemDome1 {
public static void main(String[] args) {
long l=System.currentTimeMillis();//返回的是long类型的值
//输出的值是把当前的时间返回成毫秒值,而且单独使用时没有任何意义
System.out.println(l);
System.out.println("-------------------");
//它还可以这样用,用来检测执行一段代码的执行效率
long oldtime=System.currentTimeMillis();
int sum=0;
for(int x=1;x<=100000;x++) {
sum+=x;
}
System.out.println(“sum:”+sum);
long newtime=System.currentTimeMillis();
long time=(newtime-oldtime);
System.out.println("运行这个循环共耗时"+time+"毫秒");
}
}
运行结果:
1525257135450
-------------------
Sum:705082704
运行这个循环共耗时1毫秒
public static void arraycopy(Object src,int srcPos, Object dest,int destPos, int length)
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束
src:原数组
dest:目标数组
srcPos :从原数组的哪个位置开始
destPos:到目标数组的哪个位置结束
length:长度
例如:
package TextDome;
import java.util.Arrays;
public class SystemDome2 {
public static void main(String[] args) {
int[] arr1= {23,34,45,56,67};
int[] arr2= {11,22,33,44,55};
System.out.println("arr:"+Arrays.toString(arr1));
System.out.println("arr2:"+Arrays.toString(arr2));
System.out.println("-------------");
//这个方法就是将数组arr1中1对应的元素往后的三个元素替换数组arr2中2对应的元素往后的三个元素
System.arraycopy(arr1, 1, arr2, 2,3);
System.out.println("arr1:"+Arrays.toString(arr1));
System.out.println("arr2:"+Arrays.toString(arr2));
}
}
运行结果:
arr:[23, 34, 45, 56, 67]
arr2:[11, 22, 33, 44, 55]
-------------------------
arr1:[23, 34, 45, 56, 67]
arr2:[11, 22, 34, 45, 56]