常用类库
包装类
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();
}
}
}
程序展示:
可能是我的输出流有问题,和书上输出结果不一样,试了网上的几个方法还是没解决。