目录
BigInteger类和BigDecimal(***):java中针对大数的处理,提供了大整数和大小数,提升大小精度丢失的问题
1、Math类
1、Math类的常量和常用方法
Math 类提供了一序列基本数学运算和几何函数的方法。
Math类是final类,并且它的所有成员变量和成员方法都是静态的。
2、静态导入(了解)
当使用一个类里面的静态方法或者静态变量时,每次都需要写类名。如果不想写类名,想直接写方法名或者变量名,则可以考虑使用静态导入
语法:import static 类名.*; //导入该类下的所有静态方法和常量
例如:import static Math.*; //导入Math下的所有方法和变量(包括常量),则代码中可以直接使用方法和变量名,而不需要前缀Math。
如:max(3,4);
//未静态导入
public class TestStatic {
public static void main(String[] args) {
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.toHexString(42 ));
}
}
//静态导入
import static java.lang.System.out;
import static java.lang.Integer.*;
public class TestStaticImport {
public static void main(String[] args) {
out.println(MAX_VALUE);
out.println(toHexString(42 ));
}
}
2、Random类
1、创建Random对象
此类用于生成随机数:
两种构造方法
1.Random(); 创建一个新的随机数生成器
2.Random(long seed); 使用单个 long 种子创建一个新随机数生成器
2、Random的常用方法
3、System类
System类代表当前java程序的运行平台,程序不能自己创建System类的对象。
1、 System类提供了一些静态属性和方法,允许通过类名直接调用。
2、 System类提供了代表标准输入、标准输出、错误输出的类属性。
3、 System类提供了一些静态方法用于访问环境变量、系统属性的方法。
4、 System类还提供了加载文件和动态链接库的方法。
1、System类属性
2、System类方法
1.public static void exit(intstatus) 退出当前虚拟机
2.public static long currentTimeMillis() 获得当前系统的毫秒值(与1970 年 1 月 1 日午夜之间的时间差)
4、Runtime类
Runtime类代表java程序的运行时环境,每个程序都有一个与之关联的Runtime实例,应用程序通过该对象与运行时环境相连。
应用程序不能自己创建Runtime对象,可以通过Runtime的静态方法getRuntime()获得Runtime对象。
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Test {
public static void main(String[] args) throws Exception{
Runtime rt=Runtime.getRuntime(); //获取Runtime的实例
System.out.println(rt.freeMemory());//返回Java虚拟机中的可用内存量
System.out.println(rt.availableProcessors()); //返回可用于Java虚拟机的处理器数量
System.out.println(rt.totalMemory());//返回Java虚拟机中的内存总量。
System.out.println(rt.maxMemory()); //返回Java虚拟机将尝试使用的最大内存量。
}
}
2、Runtime可以直接启动一条进程来运行操作系统的命令
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
Runtime rt=Runtime.getRuntime();
//打开记事本
rt.exec("notepad.exe");
}
}
5、Date类
java.util.Date类表示特定的瞬间。
常用构造方法
Date() 使用系统当前的时间创建 一个Date实例
内部就是使用System. currentTimeMillis()获取系统当前时间的毫秒数来创建Date对象
Date(long dt) 使用自1970年1月1日00:00:00 GMT以来的指定毫秒数创建 一个Date实例
常用方法
getTime() 返回自 1970 年 1 月 1 日 00:00:00GMT 以来此 Date 对象表示的毫秒数。
toString() 把此 Date 对象转换为以下形式的 String:
dowmon dd hh:mm:ss zzz yyyy :星期月 日 时:分:秒 时区 年
Date类中的方法API不易于实现国际化,大部分被废弃了。
6、SimpleDateFormat类
SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。
它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
例如:
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDateFormat {
public static void main(String[] args) {
//new 一个date对象
Date date = new Date();
//格式化对象
SimpleDateFormat formater = new SimpleDateFormat();
//调用格式化方法
System.out.println(formater.format(date));
//使用特定格式化的对象
SimpleDateFormat formater2 = new SimpleDateFormat("yyyy年MM月dd日 EEE HH:mm:ss");
//调用格式化方法
System.out.println(formater2.format(date));
try {
Date date2 = formater2.parse("2008年08月08日 星期一 08:08:08");
System.out.println(date2.toString());
} catch (ParseException e) {
e.printStackTrace();
}
}
}
常见的日期格式字符串:
7、Calendar类
Calendar类(日历)是一个抽象基类,主要用于完成日期字段之间相互操作的功能。即可以设置和获取日期数据的特定部分。
获取Calendar类的实例的方法:
1、使用 Calendar.getInstance();
2、调用它的子类GregorianCalendar的构造方法
一个Calendar的实例是系统时间的抽象表示,可以通过这个实例上的get(int field)方法来取得您想要的时间信息。
publicint get(int field) 根据给定的日历字段获得当前时间中相应字段的值。
例如:
package cn.sz.gl.test02;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Test2 {
public static void main(String[] args) {
// Calendar objCalendar = Calendar.getInstance();
Calendar objCalendar = new GregorianCalendar();
// 显示 Date 和 Time 的各个组成部分
System.out.println("Date 和 Time 的各个组成部分: ");
System.out.println("年: " + objCalendar.get(Calendar.YEAR));
// 一年中的第一个月是JANUARY,它为0
System.out.println("月: " + (objCalendar.get(Calendar.MONTH)));
System.out.println("日: " + objCalendar.get(Calendar.DATE));
// Calendar的星期常数从星期日Calendar.SUNDAY是1,
//到星期六Calendar.SATURDAY是7
System.out.println("星期: " + (objCalendar.get(Calendar.DAY_OF_WEEK)));
System.out.println("小时: " + objCalendar.get(Calendar.HOUR_OF_DAY));
System.out.println("分钟: " + objCalendar.get(Calendar.MINUTE));
System.out.println("秒: " + objCalendar.get(Calendar.SECOND));
}
}
8、枚举(***)
枚举是JDK1.5版本新增的特性,有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便。但是我们也可以使用常量来表示,那这两者有什么区别呢?
枚举类更加直观,类型安全。使用常量会有以下几个缺陷:
-
类型不安全。若一个方法中要求传入季节这个参数,用常量的话,形参就是int类型,开发者传入任意类型的int类型值就行,但是如果是枚举类型的话,就只能传入枚举类中包含的对象。
-
没有命名空间。开发者要在命名的时候以SEASON_开头,这样另外一个开发者再看这段代码的时候,才知道这四个常量分别代表季节。
-
基本应用,先定义:
package enumcase;
public enum SeasonEnum {
SPRING,SUMMER,FALL,WINTER;
}
1.enum和class、interface的地位一样
2.使用enum定义的枚举类默认继承了java.lang.Enum,而不是继承Object类。枚举类可以实现一个或多个接口。
3.枚举类的所有实例都必须放在第一行展示,不需使用new 关键字,不需显式调用构造器。自动添加public static final修饰。
4.使用enum定义、非抽象的枚举类默认使用final修饰,不可以被继承。
5.枚举类的构造器只能是私有的。
定义后的调用:
public class EnumTest {
public static void main(String[] args) {
System.out.println(SeasonEnum.SPRING);
}
}
进一步的应用:
也是先定义一个枚举:
package cn.sz.gl.test02;
public enum Sex {
MALE("男"),FE_MALE("女");
private String mysex;
private Sex(String mysex){
this.mysex = mysex;
}
@Override
public String toString() {
return this.mysex;
}
}
调用:
public class Test2 {
public static void main(String[] args) {
System.out.println(Sex.FE_MALE);
}
}
例2:
package enumcase;
public enum SeasonEnum {
SPRING,SUMMER,FALL,WINTER;
}
季节需要传入的值是固定的,但是使用int类型(1,2,3,4)就无法达到目的,就需要用枚举来定义,
传入方法的时候就是特定的值.
public static void main(String[] args) {
show(Season.WINTER);
}
public static void show(Season season){
if (season==Season.SPRING){
System.out.println("春游");
}else if (season==Season.SUMMER){
System.out.println("游泳");
}else if (season==Season.AUTUMN){
System.out.println("吃");
}else if (season==Season.WINTER){
System.out.println("家里蹲");
}
}
注意:
1. 实际上在第一行写枚举类实例的时候,默认是调用了构造器的,所以此处需要传入参数,因为没有显式申明无参构造器,只能调用有参数的构造器。
2.构造器需定义成私有的,这样就不能在别处申明此类的对象了。枚举类通常应该设计成不可变类,它的Field不应该被改变,这样会更安全,而且代码更加简洁。所以我们将Field用private final修饰。
9、BigInteger类和BigDecimal(***)
java中针对大数的处理,提供了大整数和大小数
BigInteger叫做大整数,使用如下:
System.out.println(0.09+0.01);
System.out.println(1.0-0.32);
System.out.println(1.015*100);
System.out.println(1.301/100);
输出内容:
0.09999999999999999
0.6799999999999999
101.49999999999999
0.013009999999999999
会出现精度丢失的问题,修改就需要使用到BigDecimal类进行小数的精度保证。
add():加 subtract():减 multiply():乘 divide():除
BigDecimal a1 = new BigDecimal("1.301");
BigDecimal b1 = new BigDecimal("100");
// BigDecimal r = a1.add(b1);
// BigDecimal r1 = a1.subtract(b1);
// BigDecimal r2 = a1.multiply(b1);
BigDecimal r3 = a1.divide(b1);
System.out.println(r3.doubleValue());
package cn.sz.gl.test02;
import java.math.BigDecimal;
import java.math.BigInteger;
public class Test2 {
public static void main(String[] args) {
BigInteger bi1 = new BigInteger("2343243535353");
BigInteger bi2 = new BigInteger("1111111111111");
System.out.println("加法运算:"+bi1.add(bi2));
System.out.println("减法运算:"+bi1.subtract(bi2));
System.out.println("乘法运算:"+bi1.multiply(bi2));
System.out.println("除法运算:"+bi1.divide(bi2));
System.out.println("求余运算:"+bi1.remainder(bi2));
//大小数
double f = 111231.5585;
BigDecimal bd = new BigDecimal(f);
System.out.println("加法运算:"+bd.add(bd));
System.out.println("减法运算:"+bd.subtract(bd));
System.out.println("乘法运算:"+bd.multiply(bd));
System.out.println("除法运算:"+bd.divide(bd));
System.out.println("求余运算:"+bd.remainder(bd));
}
}
1、四舍五入
提供几种四舍五入的方法,如下:
package cn.sz.gl.test02; import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public class Test2 { public static void main(String[] args) { // 大小数 double f = 111231.5585; BigDecimal bd = new BigDecimal(f); // 这里可以做四舍五入,假定小数点后面要保留2位有效数字 double res = bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); System.out.println("res:" + res); // 第二种四舍五入方法 // 这里的参数, // #表示任意位数的数字,也可以改为000,三个0表示至少有三位,不足的,就补0 // 后面的点表示小数点, // 00表示小数点后面保留两位有效数字 DecimalFormat df = new DecimalFormat("#.00"); System.out.println("第二种方式:" + df.format(f)); // 第三种 System.out.println("第三种:" + String.format("%.3f", f)); // 第四种 NumberFormat nf = NumberFormat.getNumberInstance(); nf.setMaximumFractionDigits(3); System.out.println("第四种:" + nf.format(f)); } }
注意:在实际开发中,关于金钱方面的,不会使用double类型,而是使用java.math.DigDecimal类型。
10、总结
Math类:取整
Random类:随机数
System类:输入输出流
Date类:当前时间
SimpleDateFormat类:格式化
枚举(***)
BigInteger类和BigDecimal(***):java中针对大数的处理,提供了大整数和大小数,提升大小精度丢失的问题
11、建议采纳
如有建议或者错误请私信我进行修改,感谢!!!