java基础类库

1.与用户互动类

1.1运行java程序的参数

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

public:修饰符,为了让JVM可以自由调用这个main方法,所以用公共修饰符
static :JVM调用这个方法时不会创建该类的对象去调用,而是直接调用,所以要用static修饰

1.2 Scanner获取键盘输入

Scanner是用来方便的获取用户的键盘输入,是一个基于正则表达式的文本扫描器,可以从文件、输入流、字符串中解析出基本类型值和字符串值

Scanner的读取操作是可能阻塞的,尤其键盘的读取操作,当进行键盘读取时,服务器不会关闭,除非手动关闭

Scanner设置分隔符

  • Scanner scnner = new Scanner(System.in);//System.in代表键盘输入scnner.useDelimiter("\n");//规定以回车作为分隔符

Scanner提供了两个方法来扫描输入

  • hasNextXXX():是否还有下一个输入项,其中XXX可以是Int.long的基本类型的字符串,XXX可以不写则表示判断是否有下一个字符串
  • nextXXX:获取下一个输入项

Scanner提供了两个方法来逐行读取

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

1.2.1 hasNextLine()与hasNext()的区别:

  1. 采用hasNextxxx的话,后面也要用nextxxxx。比如前面用hasNextLine,那么后面要用nextLine 来处理输入;采用hasNext的话,后面也要用next();
  2. hasNext()方法会判断接下来是否有非空字符.如果有,则返回true,否则返回false
    hasNextLine() 方法会根据行匹配模式(匹配一个正则表达式)去判断接下来是否有一行(包括空行),如果有,则返回true,否则返回false

比如当前我们有如下测试用例:
7 15 9 5
这个测试用例在牛客网上是以文件的形式进行存储的.
而在 linux 系统中文件的结尾会有一个换行符\n,也就是说从System.in输入流中真正读取到的数据流是这样的:
7 15 9 5\n
程序在处理完5之后,输入流中就只剩下一个换行符\n了,在处理完5之后while再去进行循环判断,此时hasNext()方法和hasNextLine()方法去判断得到的结果就产生了差异.

hasNext()方法会认为之后再没有非空字符,会返回一个false
hasNextLine() 方法会认为换行符\n是一个空行,符合行的匹配模式,则会返回一个true,但实际上由于之后再没有数据了,所以会在读取输入流的时候发生异常,从而导致整个运行报错.

建议
对于数组循环建议使用nextInt()等类型
对于读取一行值然后继续处理–使用nextLine()

2.常用类

2.1 Object类

object类是所有类,数组,枚举类的父类,任何java对象都可以调用object类的方法,当一个类没有使用extends指定父类,默认基础object类

常用方法:

  • boolean equals():判断指定对象与该对象是否相等
  • int hashCode():返回该对象的hashCode值
  • String toString:返回该对象的字符串表示,object类的tostring方法返回“运行时的类名@十六进制hashCode值”,很多类重写了object类的toString()方法,用于返回可以表述该对象信息的字符串

2.2 Objects工具类

java为工具类的命名习惯是在后面添加一个字母s,比如操作数组的工具类是Arrays

  • objects.toString(obj):当obj的值为空时会返回null,但是object.toString(obj)如果obj为空就会报空指针异常错误
  • objects.requireNonNull(obj):当传入的参数不为null时,该方法返回参数本身,如果为nulll则会报空指针异常错误;该方法主要用于对方法形参进行输入校验

2.3 String、StringBuffer和StringBuilder类

String、StringBuffer和StringBuilder的区别:
String类:是一个不可变类,一旦一个String对象被创建,这个对象中的字符串序列是不可改变的。这就导致每次对String的操作都会生成新的String对象,这样不仅效率低下,而且大量浪费有限的内存空间。

StringBuffer和StringBuilder:
这两个就是为了解决上面String类的问题而产生的,StringBuffer和StringBuilder可以用一个对象来对字符串内容进行增删改操作,一旦使用这两个类生成了最终想要的字符串,就可以调用它的toString()方法将其转变为string对象;
StringBuffer和StringBuilder的区别在于StringBuffer是线程安全的,StringBuilder没有实现线程安全功能,所以StringBuilder的性能越高,在一般情况下使用StringBuilder来操作字符串,在要求线程安全的地方才使用StringBuffer

spring提供了大量的构造器来创建String对象:

  • String(byte[] bytes,int offset,int length):将指定的byte[]数组从offset开始,长度为length的子数组编码成一个新的String对象
  • 。。。。。还有很多方法,查阅API文档

操作字符串对象的方法:

  • charAt(int index):获取字符串中指定位置的字符
  • int compareTo(String content):比较两个字符串的大小,如果两个字符串序列相等返回0;不相等时从两个字符串第0个字符开始比较,返回第一个不相等的字符差;当较长字符串的前面部分恰巧是较短的字符串,返回他们的长度差
  • boolean endsWith(String content):返回该String对象是否以content结尾
  • boolean startsWith(String begin):该String对象是否以begin开始
  • boolean equals(obj):将该字符串与指定对象比较,如果两者的字符串序列相等,则返回true
  • boolean equalsIgnoreCase(String content):与equals功能一致,只不过这个是忽略大小写
  • void getChars(int begin,int end,char[]dst,int dstBegin):该方法将字符串中从begin开始,到end结束的字符复制到dst字符数组中,以dstBegin为目标字符数组的起始位置
  • int indexOf(char ch):找出ch字符在该字符串中第一次出现的位置
  • int indexOf(char ch,int begin):找出ch字符串在该字符串中从begin开始后第一次出现的位置
  • int indexOf(String str):找出str子字符串在该字符串中第一次出现的位置
  • int indexOf(String str,int begin):找出str子字符串在该字符串中从begin开始后第一次出现的位置
  • int length():返回当前字符串的长度
  • String substring(int begin):获取从begin位置开始到结束的子字符串
  • String substring(int begin,int end):获取从begin位置开始到end结束的子字符串
  • String toLowerCase();将字符串转换成小写
  • String toUpperCase():将字符串装换成大写

2.4 ThreadLocalRandom和Random

Random类:用于生成一个伪随机数,他有两个构造器,一个是默认使用以当前时间为种子的构造器;另一个是传入一个long型整数的种子

ThreadLocalRandom类:该类使用current()方法来获ThreadLocalRandom对象,这个类是Randow的增强版,在并发访问的环境下,使用ThreadLocalRandom来代替Randow可以减少多线程资源竞争,保证系统具有更好的线程安全性

Random random = new Random();
ThreadLocalRandom threadLocalRandom = ThreadLocalRandom.current(); 

ThreadLocalRandom和Random都提供了比Math.random()更多的方式来生成随机数,Math.random()只生成0.0-1.0之间的数

  • random.nextDouble():生成0.0-1.0之间的伪随机double数
  • random.nextFloat():生成0.0-1.0之间的伪随机Float数
  • random.nextInt():生成一个int整数取值范围的伪随机数
  • random.nextInt(26):生成一个int整数取值范围为0-26的伪随机数

2.5 BigDecimal类

BigDecimal类用于精确处理float,dobule这两个数据类型的运算,如果简单使用float,dobule进行加减乘除运算会造成精度丢失,BigDecimal类就是用来解决这个问题

在定义一个BigDecimal构造器时不要使用double数据类型作为参数,否则同样会造成精度丢失,推荐使用string类型作为参数
如:
BigDecimal bigDecimal = new BigDecimal(1.006);-------不推荐
BigDecimal bigDecimal2 = new BigDecimal(“1.006”);-------推荐

如果非要使用dobule来作为构造器的参数推荐使用BigDecimal.valueOf(double value)来创建对象:
BigDecimal bigDecimal3 = BigDecimal.valueOf(1.006);

BigDecimal 常用的方法:
BigDecimal bigDecimal2 = new BigDecimal(“1.006”);
BigDecimal bigDecimal3 = BigDecimal.valueOf(2.006);

  •   bigDecimal2.add(bigDecimal3).doubleValue();//1.006+2.006
    
  •    bigDecimal2.subtract(bigDecimal3);//1.006-2.006
    
  •    bigDecimal2.multiply(bigDecimal3); //1.006*2.006
    
  •    bigDecimal2.divide(bigDecimal3);//1.006/2.006
    

时间和日期

  • LocalDate:代表不带时区的日期
    LocalDate localDate = LocalDate.now();
    System.out.println(localDate);
    2020-06-01
  • LocalTime:代表不带时区的时间
    LocalTime localTime = LocalTime.now();
    System.out.println(localTime);
    19:10:05.225
  • localDateTime:代表不带时区的时间和日期
    LocalDateTime localDateTime = LocalDateTime.now();
    System.out.println(localDateTime);
    2020-06-01T19:10:05.225
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值