《疯狂Java讲义(第4版)》-----第7章【Java基础类库】

笔者认为,《疯狂Java讲义(第4版)》这本书的前6章是Java语言的核心,前4章是结构化程序设计的核心,第5章和第6章是Java面向对象的核心。从第七章开始,都是在这些核心基础知识上的扩展了,很多内容可以先熟悉一遍即可,用的时候多查本书以及多查看官方文档即可。

Java程序入口函数main及Scanner类

main函数
public static void main(String[] args){}

为了让JVM自由调用main方法,所以用public修饰,JVM调用main的时候是用类调用的,所以用static修饰,main的返回值给JVM没意义,所以干脆没返回值,所以用void。

main函数里的数组args使用示例代码


class Hello{

	public static void main(String[] args){
		System.out.println("Hello, World!");
		System.out.println(args.length);
		for(String arg : args){
			System.out.println(arg);
		}
	}
	
}

在这里插入图片描述

Scanner类

从标准输入(键盘):

import java.util.Scanner;

class Hello{

	public static void main(String[] args){
		
		//System.in表示标准输入,就是从键盘输入
		Scanner scan = new Scanner(System.in);
		scan.useDelimiter("-");//使用-作为分隔符,默认是使用空格、换行、Tab
		while(scan.hasNext()){
			System.out.println(scan.next());
		}
	}
	
}

在这里插入图片描述

从文件输入:

import java.util.Scanner;
import java.io.File;

class Hello{

	public static void main(String[] args) throws Exception{
		
		//从文件读入,把和该代码文件Hello.java里面的东西读出来
		Scanner scan = new Scanner(new File("Hello.java"));
		while(scan.hasNextLine()){
			System.out.println(scan.nextLine());
		}
	}
	
}

在这里插入图片描述

System类、Runtime类

  • System类代表当前Java程序的运行平台,可以调取系统信息(操作系统版本、操作系统中配置的环境变量、当前操作系统日期时间等)。
  • 247页作者介绍了用native关键字可以让Java调用C语言,从而实现一些底层Java无法实现的功能。
  • Runtime类代表Java程序的运行时环境,每个Java程序都有一个与之对应的Runtime实例,应用程序不可自行创建Runtime实例,但可以通过getRuntime()获得。Runtime类可以访问JVM的相关信息(处理器数量、内存信息等),可以运行操作系统里面的软件(如记事本notepad.exe),可以获取进程相关信息。

具体实现直接参看书247~250页

Object、Objects、String、StringBuffer

具体API点击下载参看官方文档

Random、ThreadLocalRandom

在并发访问的环境下,使用ThreadLocalRandom代替Random可以减少多线程资源的竞争,保证系统具有更好的线程安全性。

//如果种子相同,连续调用,出现的随机数是相同的


Random rand1 = new Random();//构造方法共两个,其一
Random rand2 = new Random(66);//构造方法共两个,其二
Random rand3 = new Random(System.currentTimeMillis() );//保证下面一句代码的种子和这句代码的种子不同
Random rand4 = new Random(System.currentTimeMillis() );//保证下面一句代码的种子和这句代码的种子不同
System.out.println(rand1.nextInt(12));//简单示例下,更多见官方API

具体API点击下载参看官方文档

BigDecimal

为了精确表示、计算浮点数,Java提供了BigDecimal类。

import java.math.BigDecimal;
import java.math.RoundingMode;

class Hello{

	public static void main(String[] args) throws Exception{
		//推荐使用传入String类对象的构造器
		BigDecimal x = new BigDecimal("1");

		//非要用double初始化BigDecimal对象,用valueOf方法
		BigDecimal y = BigDecimal.valueOf(3.0);
		//如果用double值传入构造器,产生的效果是不精确啊
		BigDecimal z = new BigDecimal(0.1);
		System.out.println(x);
		System.out.println(y);
		System.out.println(z);
		//这里的3就是小数点位数吧!!!
		//RoundingMode是java.math下的一个枚举类,表示四近似的方式,HALF_UP就是我们小学学习的四舍五入
		System.out.println(x.divide(y,3,RoundingMode.HALF_UP).doubleValue());
	}
	
}

在这里插入图片描述

Date

已经过时了。
import java.util.Date;

class Hello{

	public static void main(String[] args) throws Exception{
		Date d = new Date();
		System.out.println(d);
	}
	
}

输出:Tue Oct 02 17:10:57 CST 2018

Calendar

Calendar类是个抽象类

public abstract class Calendar
extends Object
implements Serializable, Cloneable, Comparable<Calendar>
import java.util.Calendar;

class Hello{

	public static void main(String[] args) throws Exception{
		Calendar c = Calendar.getInstance();
		System.out.println(c.get(Calendar.YEAR));//年
		System.out.println(c.get(Calendar.MONTH)+1);//月,注意月是从0开始的
		System.out.println(c.get(Calendar.DAY_OF_MONTH));//日
		System.out.println(c.get(Calendar.HOUR));//时
		System.out.println(c.get(Calendar.MINUTE));//分
		System.out.println(c.get(Calendar.SECOND));//秒

		c.set(2018, 1, 1, 0, 0, 0);
		System.out.println(c.getTime());
		//时间年份往前推一年
		c.add(Calendar.YEAR, -1);
		System.out.println(c.getTime());
	}
	
}

在这里插入图片描述

注意add和roll的区别

add会根据实际动态变化时间。roll上一级不变,下一级和add类似。

Calendar c = new Calendar();
c.set(2003, 7, 31);
c.add(MONTH, 6);//2003-8-23=》2004-2-29,变化到2月发现没31日,就成了29日。修正到变化最小的值

c.set(2003, 7, 23);
c.roll(MONTH, 6);//2003-8-23=》2003-2-23,上一级不会变动
//roll,下一级变动和add类似

Calendar的容错性

import static java.util.Calendar.*;
import java.util.Calendar;

class Hello{

	public static void main(String[] args) throws Exception{
		Calendar c = Calendar.getInstance();
		c.set(MONTH, 12);
		System.out.println(c.getTime());
		//默认是宽松处理,容错性好,比如月份大于等于12,年数会增加一年,动态变化
		//宽松处理关闭,不允许出现比如大于等于12月的情况,否则编译通过,运行报错
		c.setLenient(false);
		c.set(MONTH, 12);
		System.out.println(c.getTime());
		
	}
	
}

在这里插入图片描述

set方法的延迟

set调用后,如果没有调用get,getTime,getTimeInMillis,add,roll,就不会生效。下面代码输出:
在这里插入图片描述


import java.util.Calendar;
import static java.util.Calendar.*;

public class Hello{

	public static void main(String[] args){
		Calendar c = Calendar.getInstance();
		c.set(2003, 7, 31);//2003-8-31
		c.set(MONTH, 8);//该代码没生效,如果生效应该是2003-10-1,9月没31号
		
		c.set(DATE, 10);
		//下面调用getTime方法,c.set(DATE, 10);修改生效
		System.out.println(c.getTime());//2003-9-10
		
	}
}
Java8新增java.time包的情况见官方文档及该书266页

正则表达式

见该书268~274页

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值