14.常用类

Date

表示特定的瞬间,精确到毫秒。Date类中的大部分方法都已经被Calendar类中的方法所取代。

Date类中的构造方法:

方法名描述
Date()分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
Date(long date)分配Date对象并初始化此对象,以表示自从标准 基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。

Date类中的成员方法:

​ 1.获取时间

		Date date = new Date();
		long l = date.getTime();//返回自1970年1月1日以来,由此 Date对象表示的00:00:00 GMT的毫秒 数 

​ 2.修改时间

		Date date = new Date();
		date.setTime(1000);//设置此 Date对象以表示1970年1月1日00:00:00 GMT后的 time毫秒的时间点。
1.2 Calendar类

Calendar类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等。日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

Calendar类时抽象类不能创建对象,可以通过Calendar类中的静态getInstance方法获取对象(一个费抽象子类对象).

Calendar类中的常用静态常量属性:

属性描述(这些都是特定与日历的值)
public static final int YEAR指示年的字段数字
public static final int MONTH指示月份的字段数字
public static final int DATE指示一个月中的某天
public static final int DAY_OF_MONTH指示一个月中的某天
public static final int DAY_OF_WEEK指示一周中的某天
public static final int DAY_OF_WEEK_IN_MONTH指示当月中的第几个星期
public static final int DAY_OF_YEAR指示一年中的某天

Calendar类中常用的成员方法:

​ 1.获取一个Calendar对象:

		Calendar c = Calendar.getInstance();//getInstance方法是一个静态的方法,直接通过类名调用
		System.out.println(c);

​ 2.获取某个日历对象的指定属性的值:

		/*
		get(int field)	参数就是指定的属性,可以使用静态常量属性名代替int值
		*/
		//注意:获取日期属性,不能直接用c.DATE,DATE属性时静态常量,所有Calendar类对象都共享并相同的值
		Calendar c = Calendar.getInstance();
		System.out.println(c.get(Calendar.DATE));//获取c对象所表示日历的日期属性值

​ 3.修改某个日历对象的指定属性值:

		/*
		set(int field, int value) 第一个参数表示属性,第二个参数表示修改的值
		*/
		Calendar c = Calendar.getInstance();	
		c.set(Calendar.YEAR, 2017);

​ 4.获取某个属性所表示的最大、最小值

		/*
		getMaximum(int field)		获取属性的最大值
		getMinimum(int field)		获取属性的最小值
		*/
		Calendar c = Calendar.getInstance();
		int max = c.getMaximum(Calendar.DATE);//获取日期的最大值,无论c表示几月份,max的值都是31
		int min = c.getMinimum(Calendar.DATE);//获取日期的最小值,无论c表示几月份,min的值都是1

​ 5.获取指定Calendar对象的指定属性的最大、最小值

		/*
		getActualMaximum(int field)	获取指定日历的指定属性的最大值
		getActualMinimum(int field)	获取指定日历的指定属性的最小值
		*/
		Calendar c = Calendar.getInstance();
		int max = c.getActualMaximum(Calendar.DATE);
		//若c表示的1月,则max值为31;若c表示的4月,则max值为30;
		int min = c.getActualMimimum(Calendar.DATE);//无论c表示几月份,min值都是1

使用Calendar完成一个万年历
键盘输入一个年份和月份,控制台输出当月的日历

public class test {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入一个年份");
        int year = input.nextInt();
        System.out.println("请输入一个月份");
        int month = input.nextInt();
        System.out.println("日\\t一\\t二\\t三\\t四\\t五\\t六");

        Calendar calendar = Calendar.getInstance();
        calendar.set(year, month - 1, 1);
        int maxday = calendar.getActualMaximum(Calendar.DATE);
        //获取星期几
        int w = calendar.get(Calendar.DAY_OF_WEEK);
        StringBuilder sb = new StringBuilder();
        //打印前面的制表符
        for (int i = 1; i < w; i++) {
            sb.append("\t");
        }
        int count = w - 1;//第一天开始就会count++,所以这里先减一
        //1号开始,月份最大天数结束
        for (int i = 1; i <= maxday; i++) {
            sb.append(i + "\t");
            count++;
            if (count == 7) {
                sb.append("\n");
                count = 0;
            }
        }
        System.out.println(sb.toString());
    }
}
1.3 SimpleDateFormat类

SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类。

它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。

通过SimpleDateFormat类将字符串和日期相互转换时,需要使用一些时间模式字母,常用的时间模式字母:构造函数需要一个字符串参数,生成字符串方法需要一个时间对象。

字母日期或时间元素示例
y1996;96
M年中的月份July;Jul;07
w年中的周数27
D年中的天数189
d月份中的天数10
aAm/pm 标记PM
H一天中的小时数(0-23)0
ham/pm 中的小时数(1-12)12
m小时中的分钟数30
s分钟中的秒数55
S毫秒数 1秒=1000毫秒 =1000000微秒=1000000000毫微秒(纳秒)978

​ 1.格式化日期:
默认格式输出结果为:19-8-8 下午2:52

		/*
		format(Date date)	将date对象格式化成指定格式的日期字符串
		*/
		String format = "yyyy-MM-dd a hh:mm:ss";
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		Date date = new Date();
		String dateStr = sdf.format(date);

输出结果为:2019-08-08 14:54:00

​ 2.解析日期:

		/*
		parse(String str)	将str对象解析成一个日期对象
		*/
		String dateStr = "2017-12-01 上午 10:10:10";
		String format = "yyyy-MM-dd a hh:mm:ss";
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		Date date = sdf.parse(dateStr);
1.4 Math类

Math类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

Math类中的静态常量属性

属性描述
public static final E比任何其他值都更接近 e(即自然对数的底数)的double值。
public static final PI比任何其他值都更接近 pi(即圆的周长与直径之比)的double值。

Math类中常用的成员方法:

​ 1.绝对值

		int a = -5;
		System.out.println(Math.abs(a));//输出的结果是5

​ 2.最大、最小值

		int a = 5;
		int b = 10;
		System.out.println(Math.max(a,b));//输出结果为10
		System.out.println(Math.min(a,b));//输出结果为5

​ 3.幂运算

		int a = 3;
		int b = 4;
		System.out.println(Math.pow(a,b));//结果为3*3*3*3的结果

​ 4.平方根、立方根

		int a = 8;
		System.out.println(Math.sqrt(a));//结果为8的正平方跟
		System.out.println(Math.cbrt(a));//结果为8的立方根

​ 5.四舍五入

		double a = 3.6;
		System.out.println(Math.round(a));//结果为4

​ 6.随机数

		//产生一个3~9之间的随机数
		int a = (int)(Math.random()*(9-3+1)+3);

7 .ceil floor

		System.out.println(Math.ceil(3.2)); //大于或等于这个数字的最小正数
		System.out.println(Math.floor(2.5));//小于或等于这个数字的最大正数
补充
        //面试题
        System.out.println((1.4-0.5)/0.9);
        //补充类BigDecimal能够实现精确结果的理由是他将浮点数的小数位和整数位分别存储
        BigDecimal bg1 = new BigDecimal("1.4");
        BigDecimal bg2 = new BigDecimal("0.5");
        BigDecimal bg3 = new BigDecimal("0.9");
        //调用方法
        double v = bg1.subtract(bg2).divide(bg3).doubleValue();
        System.out.println(v);

        //四舍五入
        BigDecimal bg4 = new BigDecimal("3.145");
        double v1 = bg4.setScale(2, RoundingMode.HALF_DOWN).doubleValue();
        System.out.println(v1);

        //BigInteger 123491287581276589126582345897348956238957
        BigInteger bI1 = new BigInteger("123491287581276589126582345897348956238957");
        BigInteger bI2 = new BigInteger("123491287581276589126582345897348956238957");
        BigInteger result = bI1.add(bI2);
        System.out.println(result);

        //DecimalFormat
        DecimalFormat decimalFormat = new DecimalFormat("#.##");//.前面的#号表示任意位整数部分,
        // 后面的#号个数表示保留位数
        System.out.println(decimalFormat.format(11111.54545));

#####1.5 Random类

此类的实例用于生成伪随机数流。此类使用 48 位的种子,使用线性同余公式 (linear congruential form) 对其进行了修改所得。

如果用相同的种子创建两个Random实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。

Random类中的构造方法:

方法名描述
Random()创建一个新的随机数生成器。此构造方法将随机数生成器的种子设置为某个值,该值与此构造方法的所有其他调用所用的值完全不同。
Random(long seed)使用单个 long 种子创建一个新的随机数生成器。该种子是伪随机数生成器的内部状态的初始值.

注意:若long种子确定,则在不同程序中,相同次数产生的随机数是相同的。

Random类中的常用方法:

​ 1.产生随机数

		Random random = new Random(10);//以10为种子,使用线性同余公式产生伪随机数
		int i1 = random.nextInt();//产生一个随机整数
		int i2 = random.nextInt(10);//产生一个10以内的随机整数
		double d = random.nextDouble();//产生一个随机double值
		boolean b = random.nextBoolean();//产生一个随机boolean值

​ 2.修改种子

		Random random = new Random(10);
		random.setSeed(20);//将随机数种子设置为20
1.6 System类

System类包含一些有用的类字段和方法。它不能被实例化。

System类中的常见属性:

属性描述
public static fianl PrintStream err标准错误输出流
public static final InputStream in标准输入流
public static final PrintStream out标准输出流

System类中的常见方法:

​ 1.获取系统时间及计算程序运行时间(精确)

		long time1 = System.currentTimeMillis();//获取当前时间,毫秒数
		long time2 = System.nanoTime();//获取当前时间,毫微秒
时间单位:--毫秒-->微秒--->纳秒(毫微秒)
  1=1000毫秒
  1毫秒=1000微秒
  1微秒=1000纳秒
        //调用System.currentTimeMillis,System.nanoTime(){单纯用来计时,如果单独拿出来
        // 会是一个随机数,但是差值是正确的,因为纳秒表示超过了long的最大范围。}
        long result = 0;
        long star = System.nanoTime();
        for (int i = 0; i < 9999; i++) {
            for (int j = 0; j < 9999; j++) {
                result+=i;
            }
        }
        long end = System.nanoTime();
        System.out.println(end - star);

​ 2.强制退出虚拟机

		System.exit();//强制退出当前正在执行的虚拟机0  非0

​ 3.垃圾回收处理机制:

​ gc(): 运行垃圾回收器。

举例说明

package day14;

public class Person {
	private String name;
	private int age;
	
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	
	@Override
	protected void finalize() throws Throwable {
		System.out.println("垃圾回收器回收了...."+name);
	}
	
}
public static void main(String[] args) {
		//垃圾回收,相当于匿名对象
		Person person=new Person("张三1", 20);
		new Person("张三2", 20);
		new Person("张三3", 20);
		//回收下垃圾
		System.gc();
		new Person("张三4", 20);
		new Person("张三5", 20);
		new Person("张三6", 20);
	}

每次回收的结果都不确定,并且顺序一定是后创建的最先被回收

1.7 Runtime类

每个 Java 应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接。可以通过
getRuntime方法获取当前运行时。

1 exec(command) 在单独的进程中执行指定的字符串命令。

	//1创建Runtime对象
		Runtime runtime=Runtime.getRuntime();
		//2exec 启动一个进程 
		Process process=runtime.exec("notepad");
		//3关闭进程
		//程序休眠
		Thread.sleep(5000);
		process.destroy();

2 exit(int status) 退出jvm System.exit(); 内部调用runtime.exit();

Runtime runtime=Runtime.getRuntime();
runtime.exit(0);

3获取jvm的内存

返回类型方法名
longtotalMemory() 返回 Java 虚拟机中的内存总量。
longfreeMemory() 返回 Java 虚拟机中的空闲内存量
longmaxMemory() 返回 Java 虚拟机试图使用的最大内存量。
public static void runtime2() {
		Runtime runtime=Runtime.getRuntime();
		long totalMemory=runtime.totalMemory();
		long freememory=runtime.freeMemory();
		long maxmemory=runtime.maxMemory();
		System.out.println("totalMemory:"+(totalMemory/1024/1024));
		System.out.println("freememory:"+(freememory/1024/1024));
		System.out.println("maxmemory:"+(maxmemory/1024/1024));
}
修改jvm内存 
1 修改堆初始内存大小
	-Xms300m
2 修改堆最大内存大小
	-Xmx4000m
3 修改栈空间大小	
	-Xss2m   jdk1.5之前256k  jdk1.5之后1m  

Elipse修改 右击java程序 "Demo8.java" --->Run as--->Run Configurations---> Arguments --vm arguments
	
命令行 java -Xms500m -Xmx3000m com.qf.day14.Demo8	

扩展 : 修改程序运行参数:通过程序运行参数输入数据

Elipse修改 右击java程序 “Demo8.java” —>Run as—>Run Configurations—> Arguments – program arguments

aaa
bbb
ccc

命令行 java com.qf.day14.Demo9 aaa bbb ccc

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值