Arrays类、Calendar类以及System类的理解

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();这样是错误的)

它为特定瞬间与一组诸如 YEARMONTHDAY_OF_MONTHHOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法

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)设置日历字段 YEARMONTH 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]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值