Java 1.3 基础API
lang是language的缩写。
只有java.lang包内不需要导包,别的包内都需要导。
Scanner:Util
因为Scanner是Util包(utility)所以需要import
import java.util.Scanner;
Scanner的重载中没有无参构造方法。
一般使用system.in 代表从键盘输入:
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
String str = sc.next(); //String是next方法
scanner.next();以空白字符结束的String:’ ‘,’\t’,’\f’,’\r’,’\n’
可以使用nextLine读取输入,包括单词之间的空格和除回车以外的所有符号 。
在文件读取时,使用nextLine收尾,因为win10是以\r\n结尾的,nextline可以丢弃当前的输入行。
Random:Util
需要导入
计算的是左闭右开区间,[0,1)
public class DemoRandom{
public static void main(String[] args){
Random r = new Random();
int num = r.nextInt(3);//[0,3),即0到2三个数
}
}
Scanner,Random猜数:
package api;
import java.util.Random;
import java.util.Scanner;
public class scan {
public static void main(String[] args) {
Random r = new Random();
int randomNum = r.nextInt(100)+1;
System.out.println("please guess");
Scanner sc = new Scanner(System.in);
int i = 0;
while(true){
i++;
int guessNum = sc.nextInt();
if(guessNum > randomNum){
System.out.println("大了");
}else if (guessNum < randomNum){
System.out.println("小了");
}else{
System.out.println("game over");
System.out.println("try"+i+"times");
break;
}
}
}
}
Math工具类:
public static double abs(double num);//获取绝对值。有多种重载。
public static double ceil(double num);//向上取整。
public static double floor(double num);//向下取整。
public static long round(double num);//四舍五入。
Math.pow(a,b)//a的b次方
Math.max.min.abs()等;
DATE类:
很多都过时了。
import java.util.Date;
public class Demo01Date {
public static void main(String[] args) {
// 创建日期对象,把当前的时间
System.out.println(new Date()); // Tue Jan 16 14:37:35 CST 2018
// 创建日期对象,把当前的毫秒值转成日期对象
System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970
}
}
public long getTime()
把日期对象转换成对应的时间毫秒值。
DateFormat类:
抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat
。
SimpleDateFormat子类可以使用构造方法:
public SimpleDateFormat(String pattern)
常用的格式规则为:
标识字母(区分大小写) | 含义 |
---|---|
y | 年 |
M | 月 |
d | 日 |
H | 时 |
m | 分 |
s | 秒 |
如:DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
常用方法:
public String format(Date date)
:将Date对象格式化为字符串。public Date parse(String source)
:将字符串解析为Date对象。
Calendar类:
在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。
Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象。
Calendar cal = Calendar.getInstance();
常用方法:
-
public int get(int field)
:返回给定日历字段的值。 -
public void set(int field, int value)
:将给定的日历字段设置为给定值。其中在Calendar类中,月份的表示是以0-11代表1-12月。 -
public abstract void add(int field, int amount)
:根据日历的规则,为给定的日历字段添加或减去指定的时间量。 -
public Date getTime()
:返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。// 使用add方法 cal.add(Calendar.DAY_OF_MONTH, 2); // 加2天 cal.add(Calendar.YEAR, -3); // 减3年
Calendar cal = Calendar.getInstance(); Date date = cal.getTime(); System.out.println(date); // Tue Jan 16 00:00:00 CST 2020
System类:
获取程序运行时间
毫秒级
long startTime = System.currentTimeMillis(); //获取开始时间
doSomething(); //测试的代码段
long endTime = System.currentTimeMillis(); //获取结束时间
System.out.println("程序运行时间:" + (endTime - startTime) + "ms");
第二种是以纳秒为单位计算的。
long startTime=System.nanoTime(); //获取开始时间
doSomeThing(); //测试的代码段
long endTime=System.nanoTime(); //获取结束时间
System.out.println("程序运行时间: "+(endTime-startTime)+"ns");
arraycopy方法
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
:将数组中指定的数据拷贝到另一个数组中。
数组的拷贝动作是系统级的,性能很高。System.arraycopy方法具有5个参数,含义分别为:
参数序号 | 参数名称 | 参数类型 | 参数含义 |
---|---|---|---|
1 | src | Object | 源数组 |
2 | srcPos | int | 源数组索引起始位置 |
3 | dest | Object | 目标数组 |
4 | destPos | int | 目标数组索引起始位置 |
5 | length | int | 复制元素个数 |
应用:
显示当前时间,并输出花费时间
long time = System.currentTimeMillis();
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf=new SimpleDateFormat("HH:mm:ss");
-doing something
System.out.println(sdf.format(cal.getTime())+", 用时:" + (System.currentTimeMillis() - time)/1000);