《疯狂java讲义》读书笔记(三):Java基础类库

《疯狂java讲义》读书笔记(三):Java基础类库

正则表达式和国际化等方面没有涉及。

运行Java程序的参数

​ 最近刷题也遇到了一两个和它相关的题目。在这里也花一点篇幅记录下。main()方法是每一个Java程序的入口。public static void main(String[] args){...}

​ 值得关注的点有三个。首先是为什么使用public修饰符 ,Java类由JVM调用,为了让JVM可以自由调用这个main方法,所以使用public修饰符把这个方法暴露出来。JVM调用这个主方法的时候,不会先调用该主类的对象,然后通过对象来调用该主方法,JVM直接通过该类来调用主方法,因此使用static修饰该主方法。我们注意到还有一个void返回值,因为主方法被JVM调用,该方法的返回值将返回给JVM,这没有什么异议,因此没有返回值。

​ 既然main方法是由JVM调用的,那么args参数肯定也是JVM负责赋值的咯。一般来说JVM是不知道怎么给args赋值的,但是如果我们用java Test ArgsTest命令运行一个Test类,那么ArgsTest就是一个参数。也就是说如果允许Java程序时在类名后紧跟一个或多个字符串,JVM就会把这些字符串依次赋值给args数组元素,

使用Scanner获取键盘输入

​ Scanner可以从文件、输入流、字符串中解析数据。主要提供了两个方法扫描输入:hasNextXxx()nextXxx()

​ 做默认情况下,使用空格、Tab、回车作为输入项之间的分隔符。如果想让程序把键盘的每行输入当成一个输入项忽略空格和Tab的话,可以使用:

boolean hasNextLine():返回输入源中是否还有下一行
String nextLine():返回输入源中下一行的字符串

​ 不过也可以设置分隔符,使用useDelimiter(String pattern)。

String、StringBuilder、StringBuffer

​ String类是不可变类,一旦一个String对象被创建之后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。

​ StringBuffer对象则代表一个字符序列课表的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append()、insert()等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString()方法将其转换为一个String对象。

​ 至于这个StringBuilder其实和StringBuffer类似,两个类的构造器和方法也基本相同,不同的是,StringBuffer是线程安全的。如果创建一个内容可变的字符串对象,优先考虑StringBuilder。

​ 这三者都实现了CharSequence接口。

格式化时间

​ 比较常用的是SimpleDateFormat,在这仅仅举个例子,具体的使用还是看API文档。

Date d=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("Gyyyy年中第D天");
//将d格式化
String dateStr=sdf.format(d);

其他的一些零碎

1.BigDecimal类

​ Java中的double类型在算数运算的时候很容易发生精度丢失这种现象。BigDecimal类可以解决这个问题。在该类的BigDecimal(double val)构造器的说明中,不推荐使用该种构造器,是因为使用的时候有不可预知性,这就导致了我们使用这种构造器创建对象的时候,它的值可能和预期不符,是一个极度接近val的数字。

​ 使用BigDecimal(String val)的话,结果就是可知的。new BigDecimal(“0.1”),那么正好就会等于预期的0.1,因此推荐使用基于String的构造器。

​ 如果必须使用double浮点数作为BigDecimal构造器的参数,可以通过BigDecimal.valueOf(double val)静态方法来创建。

2.ThreadLocalRandom和Random

​ ThreadLocalRandom是Random的增强版,并发访问情况下,前者可以减少多线程资源竞争。

ThreadLocalRandom r=ThreadLocalRandom.current();
//生成一个1~20的伪随机整数
int val1=r.nextInt(1,20);

​ 只要两个Ramdom对象的种子相同,而且方法调用顺序也相同,他们就会产生相同的数字序列。也就是说Random产生的数字是伪随机的。为了避免这现象,推荐使用当前时间作为Random的种子。

Random rand=new Random(System.currentTimeMills());

3.关于时间

​ Date类目前已经淘汰了,主要使用Calendar类。这个Calendar类是一个抽象类,不能用构造器创建,它提供了几个静态getInstance()方法来获取对象。这些方法根据TimeZone、Locale来获取特定的Calendar。

​ 在Java8中新增了java.time包,列几个常用的类。

​ (1)LocalDate:代表不带时区的日期,如2019-12-22.通过now()方法获取当前日期。

​ (2)LocalTime:不带时区的时间,如22:15:30.通过now()方法获取当前时间。

​ (3)LocalDateTime:直接举例子了,如2019-12-22T22:15:30.通过now()方法获取当前日期和时间。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值