首先,学会查阅API文档并合理利用浏览器搜索是快速进步的一种方式。
下文有几个Java中常用的API
一、Scanner 类
通过 Scanner 类来获取用户的输入:
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// 从键盘接收数据
// next方式接收字符串
System.out.println("next方式接收:");
// 判断是否还有输入
if (scan.hasNext()) {
String str1 = scan.next();
String str2 = scan.nextLine();
System.out.println("输入的数据为:" + str1);
System.out.println("输入的数据为:" + str2);
}
scan.close();
}
}
$ javac ScannerDemo.java
$ java ScannerDemo
next方式接收:
runoob com
输入的数据为:runoob
输入的数据为:runoob com
思考在实例化一个String类型对象str1后,是否可以举一反三实例化一个int类型的对象?
此时考虑到存在方法的重载,直接将String改为int,发现IDEA标红不通过。
接着查看“ scan. ”,发现此实例化对象还可以使用nextInt()方法,且返回值为int类型。
Ctrl点击此方法查看源码,可以通过代码文档注释理解用法,同样也可以在浏览器查询此方法来理解一个新了解到的方法。
发现默认时使用的是十进制,可以通过方法中参数添加将其更改为二进制传递。
int str1 = scan.nextInt(2);
这就是我们举一反三学习一个类中新方法的操作。
二、Number类
当需要使用数字的时候,我们通常使用内置数据类型,如:byte、int、long、double 等。
然而,在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包装类 (Integer、Long、Byte、Double、Float、Short),它们都是抽象类 Number 的子类。
Number类显然是抽象类。
由编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类。
相似的,编译器也可以把一个对象拆箱为内置类型。Number 类属于 java.lang 包。
三、Math类
Math类被定义为final类,类中方法都被定义为静态(static)方法,目的是在静态main函数里面直接使用。
编写工具类时,其中方法可以定义成static方法,方便直接使用。
四、Random类
Random random = new Random(long seed);
int i = random.nextInt(bound:10);
// bound是设置的随机数界限
System.out.println(i);
随机数生成算法中存在“种子”
当不手动指定种子时,Random默认使用时间戳作为种子
五、ThreadLocalRandom类
Random类中提供的Random.nextDouble()和Random.nextFloat()只保证0.0~1.0的界限。
如果我们想限制随机数生成的界限时,除了使用“加减乘除”的方式,还可以直接使用Random的子类ThreadLocalRandom类。
double i = ThreadLocalRandom.current().nextDouble(origin:0.9, bound:1.5);
// origin和bound是设置的随机数界限
System.out.println(i);
ThreadLocalRandom类多线程随机数生成,性能较Random相比更高。
六、Date类
返回系统当前时间:
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
Date date1 = new Date();
// Unix时间戳,以毫秒为准,需要乘以1000转换为秒
Date date2 = new Date(1L*1000);
System.out.println(date1.toString());
System.out.println(date2.toString());
// 获取当前时间的时间戳
System.out.println(new Date().getTime());
}
}
Tue Mar 22 19:07:07 CST 2022
Thu Jan 01 08:00:01 CST 1970
1647947227518
七、DateFormat类和SimpleDateFormat类
Data类中很多方式都已经过时(Deprecated)
我们通常使用DateFormat类来对时间进行格式化操作
DateFormat类是一个abstract(抽象类)
SimpleDateFormat类则是此抽象类的子类
用SimpleDateFormat类实例化一个规定格式的对象
不论Date值如何改变,都使其以规定的格式输出
/**
(查看API文档)
SimpleDateFormat函数语法:
G 年代标志符
y 年
M 月
d 日
h 时 在上午或下午 (1~12)
H 时 在一天中 (0~23)
m 分
s 秒
S 毫秒
E 星期
D 一年中的第几天
F 一月中第几个星期几
w 一年中第几个星期
W 一月中第几个星期
a 上午 / 下午 标记符
k 时 在一天中 (1~24)
K 时 在上午或下午 (0~11)
z 时区
*/
import java.util.Date;
import java.util.DateFormat;
import java.util.SimpleDateFormat;
public class SimpleDateFormatDemo {
public static void main(String[] args) {
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// format()方法将给定日期格式化为Date/Time字符串。
System.out.println(simpleDateFormat.format(date));
}
}
2022-03-22 19:20:46
将规定格式的字符串转换为Date标准输出格式
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String[] args) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String nowTime = "2022-03-22 19:20:46";
// parse: 按指定的源格式把String转换为Date对象
Date date = simpleDateFormat.parse(nowTime);
System.out.println(date);
// format: 按指定的目标格式把Date对象转换为String
System.out.println(simpleDateFormat.format(date));
}
}
Tue Mar 22 19:20:46 CST 2022
2022-03-22 19:20:46
八、Calendar类
推荐使用日期类
Calendar并非单例模式
常量:
import java.util.Calendar;
Calendar calendar = Calendar.getInstance();
calendar.get(Calendar.DATE);//-----------------------
calendar.get(Calendar.DAY_OF_MONTH);//---------------某月中当天为第几天
calendar.get(Calendar.DAY_OF_WEEK);//----------------从星期天开始计算,如果今天星期二,则返回3
calendar.get(Calendar.DAY_OF_YEAR);//----------------
calendar.get(Calendar.HOUR);//-----------------------12小时制
calendar.get(Calendar.HOUR_OF_DAY);//----------------24小时制,一般使用此属性赋值
calendar.get(Calendar.MILLISECOND);//----------------
calendar.get(Calendar.MINUTE);//---------------------
calendar.get(Calendar.SECOND);//---------------------
calendar.get(Calendar.WEEK_OF_MONTH);//--------------
calendar.get(Calendar.WEEK_OF_YEAR);//---------------
calendar.get(Calendar.MONTH);//-----------------------月份获取需要 +1,赋值时需要 -1
// 赋值时,week 与 month 是很值得注意的,week 需要指定 setFirstDayOfWeek , 然而,月份则需要加减 1。我们一般采用 年 月 日 时 分 秒( Calendar.YEAR 、Calendar.MONTH 、Calendar.DAY_OF_MONTH、 Calendar.HOUR_OF_DAY 、Calendar.MINUTE、 Calendar.SECOND )
赋值:
Calendar.set(Calendar.XXX, VVVV);//--------------------- 对以上每个字段(field)进行赋值
Calendar.set(year,month,date,hour,minute,second);//----- 分别对字段(field)进行赋值,效率高
九、System类
系统级别的,性能可能更高
final定义的类,可以直接使用
获取当前时间戳:
public class Main {
public static void main(String[] args) {
System.out.println(System.currentTimeMillis());
}
}
1647954226672