一.引言
Java入门-CSDN博客
前接Java入门课,该课属于Java进阶阶段
二.API的定义与用途
三.Scanner(普通类)
我们在Java入门中讲到了Scanner类,这里是进阶;
看不懂英语可以翻译,如果还是不懂可以,拷贝public Boolean hasNextInt(int radix)上Google问一问,翻译与搜索得出两个nextInt一个表示十进制,一个表示自定义进制;
四. Number(包装类)
Number
类是使用面向对象的思想重新定义了数据类型,将全部的数字数据类型变成一个对象,并且全部继承Number
类中,对这些数据类型进行维护,并且为这些数据类型提供相应的方法;
可以看出Double类继承Number类,我们点进Number类看看
从上面可以看出基本类型变量中的数字类型变量,全部以面向对象的思想重写了一遍;
Double arrOne = 33.33;
double arrTwo = 22.22;
从上可以看出Double定义的arrOne是一个对象可以使用一些写好的方法,而double定义的arrTwo不是一个对象,是一个变量;
接下来我们要说Number称为包装类的原因;
// 这种由编译器特别支持的包装称为装箱;
// 所以当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类。
Double str = 2.1; // str装箱,拿来赋值
// 相似的,编译器也可以把一个对象拆箱为内置类型。Number 类属于 java.lang 包。
str = str + 11.1; // str拆箱,拿出来用
System.out.println("str = " + str);
方法
Java Number & Math 类 | 菜鸟教程 (runoob.com)
1.xxxValue() 方法用于将 Number 对象转换为 xxx 数据类型的值并返回。
Integer x = 5;
// 返回 byte 原生数据类型
System.out.println( x.byteValue() );
// 返回 short 原生数据类型
System.out.println( x.shortValue());
// 返回 long 原生数据类型
System.out.println( x.longValue() );
// 返回 float 原生数据类型
System.out.println(x.floatValue());
// 返回 double 原生数据类型
System.out.println(x.doubleValue());
2.equals() 方法用于判断 Number 对象与方法的参数进是否相等。
Integer number1 = 3;
Integer number2 = 3;
Double number3 = 3.00D;
Short number4 = 3;
System.out.println(number1.equals(number2));
System.out.println(number1.equals(number3));
System.out.println(number1.equals(number4));
五.Math(工具类)
Java 的 Math
包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数
Math
类在使用时不用new一个对象,只要Math.方法
就可以使用这个方法,Math
的方法都被定义为 static
形式,通过 Math
类可以在主函数中直接调用;
Java Number & Math 类 | 菜鸟教程 (runoob.com)例如,取大的值函数为Math.max()
,就是一个螺丝刀(Math
)拧螺丝(max()
),没有必要每一次拧螺丝的时候都买一把新刀:
Java Number & Math 类 | 菜鸟教程 (runoob.com)
1.abs() 返回参数的绝对值。参数可以是 int, float, long, double, short, byte类型
int number1 = -22;
double number2 = 33.22D;
Integer number3 = -3;
Double number4 = -33D;
System.out.println(Math.abs(number1));
System.out.println(Math.abs(number2));
System.out.println(Math.abs(number3));
System.out.println(Math.abs(number4));
2.ceil() 返回大于等于( >= )给定参数的的最小整数,类型为双精度浮点型。
floor() 返回小于等于(<=)给定参数的最大整数 。
double number1 = 11.65D;
double number2 = -30.40D;
System.out.println(Math.ceil(number1));
System.out.println(Math.ceil(number2));
System.out.println(Math.floor(number1));
System.out.println(Math.floor(number2));
3.它表示四舍五入,算法为 Math.floor(x+0.5),即将原来的数字加上 0.5 后再向下取整,所以,Math.round(11.5) 的结果为12,Math.round(-11.5) 的结果为-11。
double number1 = 11.65D;
double number2 = -30.40D;
System.out.println(Math.round(number1));
System.out.println(Math.round(number2));
4. min() 返回两个参数中的最小值。 max() 返回两个参数中的最大值。
System.out.println(Math.min(-33.11,99933));
System.out.println(Math.max(-33.11,99933));
5. random() 返回一个随机数。
System.out.println(Math.random());
System.out.println(Math.random());
6.关于三角函数
package com.google.apl;
public class Main {
public static void main(String[] args) {
System.out.println("90 度的正弦值:" + Math.sin(Math.PI/2));
System.out.println("0度的余弦值:" + Math.cos(0));
System.out.println("60度的正切值:" + Math.tan(Math.PI/3));
System.out.println("1的反正切值: " + Math.atan(1));
System.out.println("π/2的角度值:" + Math.toDegrees(Math.PI/2));
System.out.println(Math.PI);
}
}
7. 指数、对数、平方根
自己去菜鸟看 Java Number & Math 类 | 菜鸟教程 (runoob.com)
六.Random(随机数类)
我們在上面Math工具类,说过random()方法,但是存在精度问题,在这里我们会详细描述random类;
1.他有两个构造方法
// 实例化random类
Random random = new Random();
创建一个新的随机数生成器,种子为时间戳,使用这个的比较多;
// 实例化random类
Random random = new Random(3333333);
科普时间戳与种子:什么是时间戳?时间戳有什么用?(适合新人)_时间戳是什么意思_莫参商的博客-CSDN博客
Random 中的种子怎么理解 - 爱学习的小象 - 博客园 (cnblogs.com)
2. 如何使用与限定范围
整数类型
// 实例化random类
Random random = new Random();
// 生成随机数赋值给fuck
int fuck = random.nextInt();
// 输出fuck
System.out.println(fuck);
// 实例化random类
Random random = new Random();
// 生成随机数介于0到100之间,赋值给fuck
int fuck = random.nextInt(100);
// 输出fuck
System.out.println(fuck);
接下来我们试一试double类型
// 实例化random类
Random random = new Random();
// 生成随机数赋值给fuck
double fuck = random.nextDouble();
// 输出fuck
System.out.println(fuck);
我们应该这么办,于是我看到了,random还有两个子类
我点进子类ThreadLocalRandom,发现这个子类可以限制double类型的范围,甚至完善了int类型的范围;
3.子类ThreadLocalRandom
jdk文档:Random (Java Platform SE 8 ) (oracle.com)
从jdk文档中可以看出ThreadLocalRandom与父类random不同,相对于Random的功能更全面和高效,同时线程安全,在使用的过程中也与时间戳有关,用于并发操作;
使用方法:它提供了一个current方法;
七.Date(时间类)
可以看出Data类的构造方法好多都弃用了,那我们讲讲没有弃用的两个构造方法
1.Data()
// 使用方法一
Date date = new Date();
System.out.println("当前时间 : " + date);
// 使用方法二,推荐,使用匿名方法
System.out.println(new Date());
CST是时区简称, 表示中国东八区时间(北京时间)
全球时区 简称 缩写 简介 PST EST GMT CST EDT UTC 等_时区缩写_whatday的博客-CSDN博客
2.Data(long date)
是以Unix时间为基准,Unix时间以毫秒为单位,1秒 = 1000毫秒
获取现在的Unix时间:时间戳 |时间戳转换 |Unix 时间戳 (shijianchuo.net)
System.out.println(new Date(1694024639L * 1000));
可以看出很多都弃用了
1.getTime()
换算成Unix时间
八.
Format(格式化类)
由于Date类弃用了非常多构造方法与方法,可以我们还想使用,这时可以使用它的衍生类:
DataFormat
用于对时间格式化,使用的过程中需要使用它的子类SimpleDataFormat;
从jdk文档查看java.
text.Format
我们可以看出它有一个子类DataFormat可以对时间进行格式化(转换),我们点进去
可以看出它是一个抽象类,无法实例化,所有我们要使用它的子类 SimpleDataFormat
我们这里只说最常用的构造方法与方法
构造方法:SimpleDateFormat(String pattern) 使用给定模式
方法一: format(Date date, StringBuffer toAppendTo, FieldPosition pos) 将给定的 Date成日期/时间字符串,并将结果追加到给定的 StringBuffer 。
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) {
// 要格式化的话,那必须有格式化对象
Date date = new Date();
// 格式化,并制定时间格式:年-月-日 时:分:秒
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 使用format方法输出
System.out.println(dateFormat.format(date));
}
}
也可以自己制定自己喜欢的格式 :
项目 | 含义 | 表示 | 示例 |
y | 年 | Year | 2023 |
M | 年中的月份 | Month | 11 |
D | 年中的天数 | Number | 301 |
d | 月份中的天数 | Number | 28 |
E | 星期 | Text | Tuesday; Tue |
H | 一天中的小时数(0-23) | Number | 16 |
h | am/pm中的小时数(1-12) | Number | 11 |
m | 分钟数 | Number | 21 |
s | 秒数 | Number | 33 |
S | 毫秒数 | Number | 777 |
方法二:parse(String text, ParsePosition pos) 从字符串中解析文本以产生一个 Date 。
package com.google.apl; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Main { public static void main(String[] args) throws ParseException { // 格式化,并制定时间格式:年-月-日 时:分:秒 DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 当前时间 String nowTime = "2023-9-16 14:11:11"; // 使用parse方法,转换成Date格式时间,并抛出异常,后面会讲异常
Date date = dateFormat.parse(nowTime); // 输出Date格式时间 System.out.println(date); } }
后面会讲抛出异常
九.Calendar(日期类)
Calendar
类是对日期和时间进行控制的,在这个类中有许多的字段,可以直接当作工具类进行使用,在社交软件中我们可以用这个来计算年龄;
可以从上面可以看出Calendar是一个抽象类,无法new(实例化),但是它提供了一个Static单例:
1.get获取日期
// static单例设计
Calendar calendar = Calendar.getInstance();
// 获取年,并赋给year
int year = calendar.get(calendar.YEAR);
// 获取月,并赋给month,注意:国外的月份是从零月开始
int month = calendar.get(calendar.MONTH);
// 获取日,并赋给dayofmonth,注意表示日的字段是DAY_OF_MONTH
int dayofmonth = calendar.get(calendar.DAY_OF_MONTH);
// 获取星期几,并赋给dayofweek,注意表示星期几的字段是DAY_OF_WEEK
// 注意:外国的星期是从星期日开始
int dayofweek = calendar.get(calendar.DAY_OF_WEEK);
// 输出
System.out.print(year+"-"+month+"-"+dayofmonth+"\t"+dayofweek);
如何使用中国日期,月份加一,星期几减一;
// static单例设计
Calendar calendar = Calendar.getInstance();
// 获取年,并赋给year
int year = calendar.get(calendar.YEAR);
// 获取月,并赋给month,注意:国外的月份是从零月开始
int month = calendar.get(calendar.MONTH) +1;
// 获取日,并赋给dayofmonth,注意表示日的字段是DAY_OF_MONTH
int dayofmonth = calendar.get(calendar.DAY_OF_MONTH);
// 获取星期几,并赋给dayofweek,注意表示星期几的字段是DAY_OF_WEEK
// 注意:外国的星期是从星期日开始
int dayofweek = calendar.get(calendar.DAY_OF_WEEK) -1;
// 输出
System.out.print(year+"-"+month+"-"+dayofmonth+"\t"+dayofweek);
没有设置的会获取当前时间信息;
十.System(系统类)
可以看出这是一个最终类,自己在把文档看一看可以看出它的方法都是静态的;
成员变量
1.PrintStream out
标准输出流。此流已打开并准备接收输出数据。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。
2.InputStream in
标准输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。
3.PrintStream err
标准的错误输出流。其语法与 System.out 类似,不需要提供参数就可输出错误信息。也可以用来输出用户指定的其他信息,包括变量的值。
方法
2.arraycopy() 方法
该方法的作用是数组复制,即从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
int[] number1 = {1,2,3,4,5};
int[] number2 = {6,7,8,9,10};
// number2从下标 1 开始的数据复制到数组 number2 从下标 1 开始的位置,总共复制3个
System.arraycopy(number1,1,number2,1,3);
for (int one:number1) {
System.out.print(one+"\t");
}
System.out.println();
for (int two:number2) {
System.out.print(two+"\t");
}
3. exit() 方法
该方法的作用是终止当前正在运行的 Java 虚拟机。
public class ExitExample {
public static void main(String[] args) {
System.out.println("程序开始执行...");
// 在这里写下你的代码
System.out.println("程序即将终止...");
System.exit(0);
// 0 表示正常终止,非零值表示非正常终止
}
}
4.gc() 方法
该方法的作用是请求系统进行垃圾回收,完成内存中的垃圾清除。至于系统是否立刻回收,取决于系统中垃圾回收算法的实现以及系统执行时的情况。
System.gc();
5.getProperty() 方法
String version = System.getProperty("java.version");
String name = System.getProperty("os.name");
String user = System.getProperty("user.name");
System.out.println("Java 运行时环境版本:"+version);
System.out.println("当前操作系统是:"+name);
System.out.println("当前用户是:"+user);