Java——System类、BigInteger()-BigInteger()大数值运算类、常用枚举

文章详细介绍了Java中的System类,包括系统标准的输入输出流,获取时间戳,退出虚拟机的方法。同时,讲解了BigInteger和BigDecimal两大数值运算类,用于处理大整数和高精度小数的运算,避免精度损失。最后,文章阐述了枚举类的使用,包括如何创建枚举和枚举类的常见操作,展示了枚举在定义固定数量对象时的优势。
摘要由CSDN通过智能技术生成

SyStem类

System(系统类) - 提供的属性

系统标准的输入流(方向:控制台—> 程序)

InputStream in = System.in;
Scanner scan = new Scanner(in);
String str = scan.next();

系统标准的输出流(方向:程序—>控制台)

String str = "系统标准的输出流";
PrintStream out = System.out;
out.println(str);//系统标准的输出流

System(系统类) - 提供的方法

eg:

System.currentTimeMillis();//获取毫秒
System.nanoTime();//获取纳秒

//退出当前虚拟机(参数为0-正常退出;参数为其它数字-非正常退出)
System.exit(0);

//获取系统参数
Properties properties = System.getProperties();
System.out.println(properties);

//通过key获取value
String property = System.getProperty("os.name");
System.out.println(property);//Windows 10--打印的是操作系统

//将指定源数组中的数组从指定位置复制到目标数组的指定位置--拷贝数组
int[] is = {1,2,3,4,5,6,7,8,9};
int[] newIs = {0,0,0,0,0,0,0,0,0,0,0};
System.arraycopy(is, 2, newIs, 8, 3);//参数对应的含义(源数组,起始下标,目标数组,起始下标,拷贝长度)
System.out.println(Arrays.toString(newIs));//[0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 5]
	
//将指定源数组中的数组从指定位置复制到目标数组的指定位置--删除数组
//利用该方法可以达到删除数组里面数据的效果
String[] names = {"aaa","bbb","ccc","ddd","eee","fff","ggg"};
System.arraycopy(names, 3, names, 2, 7-3);//参数:原数组,要删除数据的索引,目标数组,拷贝的长度
names[names.length-1] = null;
System.out.println(Arrays.toString(names));//[aaa, bbb, ddd, eee, fff, ggg, null]
		
		

BigInteger()-整数大数值运算类

Integer为整型数据,一般情况下它的取值范围从 -2147483648到2147483647

BigInteger 类型的数字范围比较Integer类型的数字范围要大的多 ,BigInteger 支持任意精度的整数,在运算中 BigInteger 类型可以准确地表示任何大小的整数值,因此可以避免使用Integer类型数字超出范围时带来的影响。

BigInteger 中的一些运算方法:

		BigInteger big1 = new BigInteger("12345678901");
		BigInteger big2 = new BigInteger("12345678901");
		
		BigInteger add = big1.add(big2);
		System.out.println("加法:" + add);//24691357802
		
		BigInteger subtract = big1.subtract(big2);
		System.out.println("减法:" + subtract);//0
		
		BigInteger multiply = big1.multiply(big2);
		System.out.println("乘法:" + multiply);//152415787526596567801
		
		BigInteger divide = big1.divide(big2);
		System.out.println("除法:" + divide);//1

BigDecimal()-小数大数值运算类

小数大数值运算类的优点:

当使用double/float类型的小数数值进行运算时可能会存在精度的丢失:

double x = 0.7;
double y = 0.8;
System.out.println(x+y);//控制台输出结果为:0.8999999999999999

BigDecimal big1 = new BigDecimal("0.7");
BigDecimal big2 = new BigDecimal("0.2");
		
BigDecimal add = big1.add(big2);//加法
System.out.println(add);//输出结果为:0.9

因此,使用**BigDecimal()**可以提高计算中的精度,支持任何精度的定点数,可以用它来精确计算货币值。

ps: java-api官方文档还提供了许多大数值运算类的运算方法,需要时可以查阅官方文档

枚举类

枚举类的应用场景:

​ 一个类只能有固定的几个对象时,就使用枚举替代

编写一个枚举类:

需求:编写季节类(Sesson),该类只有(Spring,summer,autumn,winter)四个对象

public enum Season{
	
	//注意:枚举类的第一行必须声明对象
	//默认使用public static final Season修饰
	spring("春天","春雨绵绵"),
	summer("夏天","烈日炎炎"),
	autumn("秋天","硕果累累"),
	winter("冬天","银装素裹");

	private String name;
	private String info;
	
	private Season() {
	}

	private Season(String name, String info) {
		this.name = name;
		this.info = info;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getInfo() {
		return info;
	}

	public void setInfo(String info) {
		this.info = info;
	}
	
	@Override
	public String toString() {
		return name + " -- " + info;
	}
}

创建测试类:

调用枚举类Sesson中的方法:

public class Test {
	/**
	 * 知识点:枚举类的常用方法
	 */
	public static void main(String[] args) {
		
		//通过字符串找到枚举类中的对象
		Season spring1 = Enum.valueOf(Season.class, "spring");
		System.out.println(spring1);//春天 -- 春雨绵绵
		
		//通过字符串找到枚举类中的对象
		Season spring2 = Season.valueOf("spring");
		System.out.println(spring2);//春天 -- 春雨绵绵
		
		System.out.println("--------");
		
		//获取枚举类中所有的对象
		Season[] seasons = Season.values();
		for (Season season : seasons) {
			System.out.println(season.name());
            //spring summer autumn winter
		}
	}
}

组织枚举:

一个类/接口中存在多个枚举类:

public interface Code {
	enum AddCode {
		
		ERR_A(-1,"添加失败 -- 学生信息不合法"),
		ERR_B(-2,"添加失败 -- 已有该学生"),
		OK(1,"添加成功");

		private int code;
		private String message;

		private AddCode() {
		}

		private AddCode(int code, String message) {
			this.code = code;
			this.message = message;
		}

		public int getCode() {
			return code;
		}

		public void setCode(int code) {
			this.code = code;
		}

		public String getMessage() {
			return message;
		}

		public void setMessage(String message) {
			this.message = message;
		}

		@Override
		public String toString() {
			return code + " -- " + message;
		}	
	}

	enum DeleteCode {
		
		ERR_A(-1,"删除失败 -- 学生信息不合法"),
		ERR_B(-2,"删除失败 -- 没有该学生"),
		OK(1,"删除成功");

		private int code;
		private String message;

		private DeleteCode() {
		}

		private DeleteCode(int code, String message) {
			this.code = code;
			this.message = message;
		}

		public int getCode() {
			return code;
		}

		public void setCode(int code) {
			this.code = code;
		}

		public String getMessage() {
			return message;
		}

		public void setMessage(String message) {
			this.message = message;
		}

		@Override
		public String toString() {
			return code + " -- " + message;
		}	
	}

}

创建测试类:

public class Test {
	public static void main(String[] args) {
        
		//调用Code接口中的枚举打印错误码以及对应的错误信息
		System.out.println(Code.AddCode.ERR_A);
		
		System.out.println(Code.DeleteCode.ERR_A);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值