本文已参与「新人创作礼」活动,一起开启掘金创作之路
Java常用类库学习总结
常用类库
包装类
Java中不能定义基本数据类型的对象,为了能将基本数据类型当作对象处理,包装类由此诞生! 概念: 将基本数据类型封装在包装类中,以便把这些基本数据类型转换为对象进行处理 包装类以及所对应的基本数据类型:
| 包装类 | 对应基本数据类型 |
|---|---|
| Byte | byte |
| Integer | int |
| Float | float |
| Character | char |
| Short | short |
| Long | long |
| Double | double |
| Boolean | boolean |
| 1.Integer类 | |
| 属于Number类的子类 | |
| 常用方法: | |
| 方法 | 功能 |
| -- | -- |
| valueOf(String str) | 返回保存指定的String值的Integer对象 |
| parseInt(String str) | 返回包含在由str指定的字符串中的数字的等价整数值 |
| toString() | 返回一个表示该 Integer 值的String对象(可以指定进制基数) |
| toBinaryString(int i) | 以二进制无符号整数形式返回一个整数参数的字符串表示形式 |
| toHexString(int i) | 以十六进制无符号整数形式返回一个整数参数的字符串表示形式 |
| toOctalString(int i) | 以八进制无符号整数形式返回一个整数参数的字符串表示形式 |
| equals(Object IntegerObj) | 比较此对象与指定的对象是否相等 |
| intValue() | 以int型返回此Integer对象 |
| shortValue() | 以short型返回此Integer对象 |
| byteValue() | 以 byte型返回此Integer对象 |
| compareTo(Integer anotherInteger) | 在数字上比较两个 Integer对象。如果这两个值相等,则返回0;如果调用对象的数值小于anotherInteger的数值,则返回负值;如果调用对象的数值大于anotherInteger的数值,则返回正值 |
Integer类提供的四个常量:
- MAX_VALUE:表示int类型可取的最大值(2^31-1)
- MIN_VALUE: 表示int类型可取的最大值(-2^31)
- SIZE:以二进制补码的形式表示int值的位数
- TYPE:表示基本类型int的Class实例
2.Double类 常用方法:
| 方法 | 功能 |
|---|---|
| valueOf(String str) | 返回保存用参数字符串 str表示的double值的Double对象 |
| parseDouble(String s) | 返回一个新的double值,该值被初始化为用指定String 表示的值,这与Double类的 valueOf方法一样 |
| doubleValue() | 以double形式返回此Double对象 |
| isNaN() | 如果此double值是非数字(NaN)值,则返回 true;否则返回false |
| intValue() | 以 int形式返回double值 |
| byteValue() | 以 byte形式返回Double对象值(通过强制转换) |
| longValue() | 以long形式返回此 double的值(通过强制转换为long 类型) |
| compareTo(Double d) | 对两个Double对象进行数值比较。如果两个值相等,则返回0;如果调用对象的数值小于d的数值,则返回负值;如果调用对象的数值大于d的值,则返回正值 |
| equals(Object obj) | 将此对象与指定的对象相比较 |
| toString() | 返回此Double对象的字符串表示形式 |
| toHexString(double d) | 返回double参数的十六进制字符串表示形式 |
| Double类提供的四个常量: |
- MAX_EXPONENT:返回int值,表示有限double变量可能具有的最大指数
- MIN_EXPONENT: 返回int值,表示有限double变量可能具有的最小指数
- NEGATIVE_INFINITY:返回double值,表示保存double类型的负无穷大值的常量
- POSITIVE_INFINITY:返回double值,表示保存double类型的正无穷大值的常量
3.Boolean类 常用方法:
| 方法 | 功能 |
|---|---|
| booleanValue() | 将 Boolean对象的值以对应的boolean值返回 |
| equals(Object obj) | 判断调用该方法的对象与obj 是否相等。当且仅当参数不是null,而且与调用该方法的对象一样都表示同一个boolean值的 Boolean对象时,才返回 true |
| parseBoolean(String s) | 将字符串参数解析为boolean值 |
| toString() | 返回表示该boolean值的String对象 |
| valueOf(String s) | 返回一个用指定的字符串表示的boolean值 |
| 4.Character类 | |
| 常用方法: | |
| 方法 | 功能 |
| -- | -- |
| valueOf(char a) | 返回保存指定char值的Character对象 |
| compareTo(Character anotherCharacter) | 根据数字比较两个 Character对象,若这两个对象相等则返回0 |
| equals(Object obj) | 将调用该方法的对象与指定的对象相比较 |
| toUpperCase(char ch) | 将字符参数转换为大写 |
| toLowerCase(char ch) | 将字符参数转换为小写 |
| toString() | 返回一个表示指定char值的String对象 |
| charValue() | 返回此Character对象的值 |
| isUpperCase(char ch) | 判断指定字符是否为大写字符 |
| isLowerCase(char ch) | 判断指定字符是否为小写字符 |
| isLetter(char ch) | 判断指定字符是否为字母 |
| isDigit(char ch) | 判断指定字符是否为数字 |
| Character类中表示特定字符的常量: |
- CONNECTOR_PUNCTUATION:返回byte型值,表示Unicode规范中的常规类别“Pc”
- UNASSIGNED:返回byte型值,表示Unicode规范中的常规类别“Cn”
- TITLECASE_LETTER:返回byte型值,表示Unicode规范中的常规类别“Lt”
5.Number类 是所有数值型的父类(抽象类) 数值型包装类的共有方法:
| 方法 | 功能 |
|---|---|
| byteValue() | 以 byte形式返回指定的数值 |
| intValue() | 以int形式返回指定的数值 |
| floatValue() | 以float形式返回指定的数值 |
| shortValue() | 以short形式返回指定的数值 |
| longValue() | 以long形式返回指定的数值 |
| doubleValue() | 以double 形式返回指定的数值 |
数字处理
Java中执行数学基本运算的Math类等 1.数字格式化 未格式化的数据遵循原则:
- 0.001 < |n| < 10000000,以常规小数形式表示
- (|n| < 0.001)&&(|n| > 10000000),使用科学记数法表示
格式化使用DecimalFormat类进行操作,它是NumberFormat类的子类 用处: 格式化十进制数字 DecimalFormat类中的特殊字符和说明:
| 字符 | 说明 |
|---|---|
| 0 | 表示阿拉伯数字,若该位无数字,显示0 |
| # | 表示阿拉伯数字,若该位无数字,就不显示,若有,则显示字符 |
| . | 小数或货币小数分隔符 |
| - | 负号 |
| , | 分组分隔符 |
| E | 分隔科学记数法的尾数和指数 |
| % | 放在数字的前缀或后缀,将数字乘100显示百分数 |
| \u2030 | 放在数字的前缀或后缀,将数字乘1000显示千分数 |
| \u00A4 | 放在数字的前缀或后缀,作为货币记号 |
| ' | 单引号,当上面特殊字符出现在数字中时应为特殊字符添加单引号,系统就会将此符号视为普通符号处理 |
| 2.Math类 | |
| 语法: |
Math.数学方法
1.三角函数方法:
- public static double sin(double num):返回角的三角正弦
- public static double cos(double num):返回角的三角余弦
- public static double tan(double num):返回角的三角正切
- public static double asin(double num):返回角的三角反正弦
- public static double acos(double num):返回角的三角反余弦
- public static double atan(double num):返回角的三角反正切
- public static double toRadians(double angdeg):将角度转换为弧度
- public static double toDegrees(double angrad):将弧度转换为角度
2.指数函数方法:
- public static double exp(double num):用于获取e的num次方
- public static double log(double num):用于取自然对数(ln num的值)
- public static double log10(double num):用于取底数为10的num的对数
- public static double sqrt(double num):用于取num的平方根
- public static double cbrt(double num):用于取num的立方根
- public static double pow(double num1,double num2):用于取num1的num2次方
3.取整函数方法:
- public static double ceil(double num):返回大于等于参数的最小整数
- public static double floor(double num):返回小于等于参数的最大整数
- public static double rint(double num):返回与参数最接近的整数,如果存在两个相同接近的整数,则结果取偶数
- public static int round(float num):将参数加上0.5后返回与参数最近的整数
- public static long round(double num):将参数加上0.5后返回与参数最近的整数,然后强制转换为长整型
4.取最大值,最小值,绝对值函数方法
- public static double max(double a,double b):取a,b中的最大值
- public static int min(int a,int b):取a,b中的最小值
- public static long min(long a,long b):取a,b中的最小值
- public static float min(float a,float b):取a,b中的最小值
- public static double min(double a,double b):取a,b中的最小值
- public static int abs(int a):取a的绝对值
- public static long abs(long a):取a的绝对值
- public static float abs(float a):取a的绝对值
- public static double abs(double a):取a的绝对值
Random类
语法:
Random r = new Random(seedvalue);
常见方法:
- public int nextInt():返回一个随机整数
- public int nextInt(int num):返回大于等于0且小于num的随机整数
- public long nextLong():返回一个随机长整数值
- public boolean nextBoolean():返回一个随机的布尔值
- public float nextFloat():返回一个随机单精度浮点型值
- public double nextDouble():返回一个随机双精度浮点型值
- public double nextGaussian():返回一个概率密度为高斯分布的双精度浮点型值
BigInteger类
Java中用BigInteger类来处理更大的数字,支持任意精度的整数,它可以准确地表示任何大小的整数值而不会丢失信息。 语法:
BigInteger num = new BigInteger("2");
例子:
public class biginteger_use {
public static void main(String[] args) {
BigInteger num1 = new BigInteger("37243827493278");
BigInteger num2 = new BigInteger("281618816626");
System.out.println(num1.add(num2));
}
}
常用方法:
- public BigInteger add(BigInteger val):加法运算
- public BigInteger subtract(BigInteger val):减法运算
- public BigInteger multiply(BigInteger val):乘法运算
- public BigInteger divide(BigInteger val):除法运算
- public BigInteger remainder(BigInteger val):取余操作
- public BigInteger[] divideAndRemainder(BigInteger val):用数组返回余数和商,结果数组中第一个值为商,第二个值为余数
- public BigInteger pow(int n):进行取参数的n次方操作
- public BigInteger negate():取相反数
- public BigInteger shiftLeft(int n):将数字左移n位,如果n为负数,做右移操作
- public BigInteger shiftRight(int n):将数字右移n位,如果n为负数,做左移操作
- public BigInteger and(BigInteger val):做与操作
- public BigInteger or(BigInteger val):做或操作
- public int compareTo(BigInteger val):做数字比较操作
- public boolean equals(Object x):当参数x是BigInteger类型的数字并且数值与对象实例的数值相等时,返回true
- public BigInteger min(BigInteger val):返回较小的数值
- public BigInteger max(BigInteger val):返回较大的数值
BigDecimal类
与BigInteger类都能进行大数字运算不同的是加入了小数的概念,它支持商业计算,任何精度的定点数,用来精确计算货币值。 构造方法:
- BigDecimal(double val):实例化时将双精度浮点型转换为BigDecimal类型
- BigDecimal(String val):实例化时将字符串形式转换为BigDecimal类型
常用方法:
- public BigDecimal add(BigDecimal val):加法运算
- public BigDecimal subtract(BigDecimal val):减法运算
- public BigDecimal multiply(BigDecimal val):乘法运算
- public BigDecimal divide(BigDecimal val,int scale,RoundingMode roundingMode):除法运算,方法中3个参数分别代表除数,商的小数点后的位数,近似处理模式
System类
属于JDk提供的系统类,被final修饰,不允许被继承,所有方法属于静态。 常用方法:
- currentTimeMills():返回以毫秒为单位的当前时间
- exit(int status):通过启动虚拟机的关闭序列,终止当前正在运行的Java虚拟子,该方法从不正常返回,可以将变量作为一个状态码,非零表示非正常终止,零表示正常
- Map<String,String> getenv():返回一个不能修改的当前系统环境的字符串映射视图
- getenv(String name):获取指定的环境变量值
- getProperties():确定当前的系统属性
- getProperty(String key):获取用指定键描述的系统属性
- setIn(InputStream in):重新分配标准输入流
1.控制台输出字符
- 不会换行的输出:
System.out.print("输出内容");
- 可以自动换行的输出:
System.out.println("输出内容");
快捷输入:sout+回车
2.计时 System.currentTimeMills()方法可以获取1970年1月1日零点至今的毫秒数,是最常见的方法,可以利用该方法来记录程序的运行时间。 语法(例子):
long start = System.currentTimeMillis();
……
long end = System.currentTimeMillis();
System.out.println("所用时间为"+(end-start)+"毫秒");
import java.math.BigInteger;
public class biginteger_use {
public static void main(String[] args) {
long start = System.currentTimeMillis();
BigInteger num1 = new BigInteger("37243827493278");
BigInteger num2 = new BigInteger("281618816626");
System.out.println(num1.add(num2));
System.out.println(num1.max(num2));
long end = System.currentTimeMillis();
System.out.println("所用时间为"+(end-start)+"毫秒");
}
}
程序展示:
Scanner类
使用Scanner类可以达到程序输入的目的。 常用方法:
- next():获取String输入并返回
- nextBoolean():获取Boolean输入并返回
- nextByte():获取值输入并返回Byte型
- nextDouble():获取值输入并返回double型
- nextFloat():获取值输入并返回float型
- nextInt():获取值输入并返回int型
- nextLine():获取值输入并返回String型
- nextLong():获取值输入并返回Long型
- nextShort():获取值输入并返回Short型
- close():关闭扫描器
语法:
Scanner sc = new Scanner(System.in);
System.out.println("请你输入成绩:");
int score = sc.nextInt();
例子:
import java.util.Scanner;
public class java_1 {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.println("请你输入成绩:");
int score = sc.nextInt();
if (score >= 90)
{
System.out.println("A");
}
else if (score >= 80)
{
System.out.println("B");
}
else if (score >= 70)
{
System.out.println("C");
}
else if (score >= 60)
{
System.out.println("D");
}
else
{
System.out.println("你挂科了准备重考吧");
}
}
}
程序展示:
日期时间类
1.Data类 构造方法:
- Date():分配Date对象并初始化对象,以表示分配时间(精确到毫秒) 语法:
Date time = new Date();
- Date(long date):分配Date对象并初始化对象,以表示自标准基准时间(即1970年1月1日 00:00:00GMT)起经过指定毫秒数date后的时间 语法:
long time = System.currentTimeMills();
Date date = new Date(time);
常用方法:
- after(Date when):测试当前日期是否在指定的日期之后
- before(date when):测试当前日期是否在指定的日期之前
- getTime():获得1970年1月1日 00:00:00GMT开始到现在所经过的毫秒数
- setTime(long time):设置当前Date对象所表示的日期时间值,该值用来表示1970年1月1日 00:00:00GMT以后time毫秒的时间点
2.日期时间格式化 使用DateFormat类实现日期时间的输出 格式化风格:
- SHORT:完全为数字
- MEDIUM:较长
- LONG:更长
- FULL:完全指定
使用DateFormat可以自定义日期时间格式 语法:
import java.text.DateFormat;
DateFormat df = DateFormat.getDateInstance();
getDateInstance()方法获取所在国家或地区的标准日期格式 常用方法:
- format(Date date):将一个Date对象实例格式化为日期/时间字符串
- getCalendar():获取与此日期/时间格式器关联的日历
- getDateInstance():获取日期格式器,该格式器具有默认语言环境的默认格式化风格
- getDateTimeInstance():获取日期/时间格式器,该格式器具有默认语言环境的默认格式化风格
- getInstance():获取为日期和时间使用SHORT风格的默认日期/时间格式器
- getTimeInstance():获取时间格式器,该格式器具有默认语言环境的默认格式化风格
- parse(String source):将字符串解析成一个日期,并返回这个日期的Date对象
例子:
import java.text.DateFormat;
import java.util.Date;
public class get_date_use {
public static void main(String[] args) {
DateFormat date = DateFormat.getInstance();
System.out.println(date.format(new Date()));
DateFormat date2 = DateFormat.getDateInstance(DateFormat.LONG);
System.out.println(date2.format(new Date()));
DateFormat date3 = DateFormat.getTimeInstance(DateFormat.LONG);
System.out.println(date3.format(new Date()));
DateFormat date4 = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.SHORT);
System.out.println(date4.format(new Date()));
}
}
程序展示:
SimpleDateFormat类提供了19个格式化字符,让开发者自由编写
SimpleDateFormat的格式化字符:
| 字母 | 日期或时间元素 | 类型 |
|---|---|---|
| G | Era 标识符 | Text |
| y | 年 | Year |
| M | 年中的月份 | Month |
| w | 年中的周数 | Number |
| W | 月中的周数 | Number |
| D | 年中的天数 | Number |
| d | 月份中的天数 | Number |
| F | 月份中的星期 | Number |
| E | 星期中的天数 | Text |
| a | AM,PM标记 | Text |
| H | 一天中的小时数(0~23) | Number |
| h | AM,PM中的小时数(1~12) | Number |
| k | 一天中的小时数(1~24) | Number |
| K | AM,PM中的小时数 (0~11) | Number |
| m | 小时中的分钟数 | Number |
| s | 分钟中的秒数 | Number |
| S | 毫秒数 | Number |
| z | 时区 | General time zone |
| Z | 时区 | RFC 822 time zone |
| 常用时间格式: | ||
| 日期时间 | 对应的格式 | |
| -- | -- | |
| 2021/01/01 | yyyy/MM/dd | |
| 2021.01.01 | yyyy.MM.dd | |
| 2021-01-01 01:01:01 | yyyy-MM-dd HH:mm:ss | |
| 2021年01月01日 01时01分01秒 星期一 | yyyy年MM月dd日 HH时mm分ss秒 EEEE | |
| 下午3时 | ah时 | |
| 今年已过去了1天 | 今年已过去了D天 | |
| 例子: |
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class get_date_use {
public static void main(String[] args) {
DateFormat date = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 EEEE");
System.out.println(date.format(new Date()));
}
}
程序展示:
Calendar类
由于在Date类的设计没有考虑到国际化,所以大部分方法都不被使用,而且很多方法也无法满足用户需求,因此JDK提供了Calendar日历类 其操作日历字段,这些字段和方法都被定义为protected 语法:
Calendar now = Calendar.getInstance();
Calendar类提供的常用字段及说明
| 字段名 | 说明 |
|---|---|
| DATE | get和set的字段数字,指示一个月中的某天 |
| DAY_OF_MONTH | get和set的字段数字,指示一个月中的某天 |
| DAY_OF_WEEK | get和set的字段数字,指示一个星期中的某天 |
| DAY_OF_WEEK_IN_MONTH | get和set的字段数字,指示当前月中的第几个星期 |
| DAY_OF_YEAR | get和set的字段数字,指示当前年中的天数 |
| HOUR | get和set的字段数字,指示上午或下午的小时 |
| HOUR_OF_DAY | get和set的字段数字,指示一天中的小时 |
| MILLISECOND | get和set的字段数字,指示一秒中的毫秒 |
| MINUTE | get和set的字段数字,指示一小时中的分钟 |
| MONTH | 指示月份的get和set的字段数字 |
| SECOND | get和set的字段数字,指示一分钟中的秒 |
| time | 日历的当前设置时间,以毫秒为单位,表示自格林威治标准时间1970年1月1日 00:00:00后经过的时间 |
| WEEK_OF_MONTH | get和set的字段数字,指示当前月中的星期数 |
| WEEK_OF_YEAR | get和set的字段数字,指示当前年中的星期数 |
| YEAR | 指示年的get和set的字段数字 |
Calendar类的常用方法:
- add(int field,int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量
- after(Objecrt when):判断此Calendar对象表示的时间是否在指定Object表示的时间之后,返回判断结果
- before(Object when):判断此Calendar对象表示的时间是否在指定Object表示的时间之前,返回判断结果
- get(int field):返回给定日历字段的值
- getInstance():使用默认时区和语言环境获得的一个日历
- getTime():返回一个表示此Calendar对象时间值(从历元至现在的毫秒偏移量)的Date对象
- getTimeInMills():返回此Calendar对象的时间值,以毫秒为单位
- roll(int field,boolean up):在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段
- set(int field,int value):将给定的日历字段设置为给定值
- set(int year,int month,int date):设置日历字段YEAR,MONTH,DAY_OF_MONTH的值
- set(int year,int month,int date,int hourofday,int minute):设置日历字段YEAR,MONTH,DAY_OF_MONTH,HOUR_OF_DAY,MINUTE的值
- set(int year,int month,int date,int hourofday,int minute,int second):设置日历字段YEAR,MONTH,DAY_OF_MONTH,HOUR_OF_DAY,MINUTE,SECOND的值
- setTime(Date date):使用给定的Date对象设置此Calendar对象的时间
- setTimeInMills(long mills):使用给定的long值设置此Calendar对象的当前时间值 例子:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class get_date_use {
public static void main(String[] args) {
System.out.println("\t-----中华人民共和国成立72周年倒计时-----\t");
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
String today = sdf.format(date);
System.out.println("今天是:"+today);
long time_1970 = date.getTime();
Calendar c = Calendar.getInstance();
//月是从0开始算的
c.set(2021,10-1,1);
long time_use = c.getTimeInMillis();
//计算相差的天数
long day = (time_use-time_1970)/(1000*60*60*24);
System.out.println("距离2021年10月1日还有:"+day+"天");
}
}
程序展示:
Runtime类
Runtime是JDK提供的运行时类,可以用来获取运行时间。 常用方法:
- getRuntime():返回与当前Java应用程序相关的运行时对象
- exec(String command):在单独的进程中执行指定的字符串命令
- exec(String[] cmdarray):在单独的进程中执行指定命令和指令参数
- totalMemory():返回Java虚拟机中的内存总量
- freeMemory():返回Java虚拟机中的空闲内存量
- load(String filename):加载作为动态库的指定文件名
- loadLibrary(String libname):加载具有指定库名的动态库
执行本地命令 本地命令指操作系统的命令 Runtime类的exec()方法重载形式:
- exec(String command)
- exec(String[] cmdarray)
command:要执行的系统命令 cmdarray:要执行的命令和相应的命令参数 第一种重载方式的代码:
Runtime.getRuntime().exec("java hello.java");
第二种重载方式的代码:
String command[] = {"javac","hello.java"};
Runtime.getRuntime().exec(command);
开发可以使用getInputStream()方法获取进程返回的信息 Process类常用方法:
- destroy():结束进程
- getErrorStream():获取进程的错误流
- getInputStream():获取进程的输入流
- getOutputStream():获取进程的输入流
例子(让windows系统执行help命令): P205页例子
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class work5 {
public static void main(String[] args) {
Runtime r = Runtime.getRuntime();
try {
Process p = r.exec("help");
InputStream is = p.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String str = null;
while ((str = br.readLine()) != null) {
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
程序展示:
可能是我的输出流有问题,和书上输出结果不一样,试了网上的几个方法还是没解决。