常用类_3_其他类

目录

1、Math类

1、Math类的常量和常用方法

2、静态导入(了解)

2、Random类

1、创建Random对象

2、Random的常用方法

3、System类

1、System类属性

2、System类方法

4、Runtime类

5、Date类

6、SimpleDateFormat类

7、Calendar类

8、枚举(***)

9、BigInteger类和BigDecimal(***)

1、四舍五入

10、总结

Math类:取整

Random类:随机数

System类:输入输出流

Date类:当前时间

SimpleDateFormat类:格式化

枚举(***)

BigInteger类和BigDecimal(***):java中针对大数的处理,提供了大整数和大小数,提升大小精度丢失的问题

11、建议采纳

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版本新增的特性,有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便。但是我们也可以使用常量来表示,那这两者有什么区别呢?

枚举类更加直观,类型安全。使用常量会有以下几个缺陷:

  1. 类型不安全。若一个方法中要求传入季节这个参数,用常量的话,形参就是int类型,开发者传入任意类型的int类型值就行,但是如果是枚举类型的话,就只能传入枚举类中包含的对象。

    1. 没有命名空间。开发者要在命名的时候以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、建议采纳

如有建议或者错误请私信我进行修改,感谢!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值