JavaSE — Java基础类库

一、运行Java程序的参数
// java程序入口:main()方法
public static void main(String[] args){
    
}

main() 方法为什么是由publicstaticvoid修饰?

  • Java类由JVM调用,为了让JVM自由调用main()方法,所以用public修饰,把主方法暴露出来
  • JVM调用这个主方法时,不是通过创建该类的对象,然后通过对象调用,而是直接通过类进行调用,所以主方法需要static修饰
  • 当JVM调用主方法时,返回值也是返给JVM,这没有意义,所以无返回值
二、使用 Scanner 类获得键盘输入

Scanner 可以很方便的获得用户的键盘输入

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

1、Scanner 类主要方法
  • hasNextXxx():是否还有下一个输入项,其中Xxx可以是 Int、Long等代表基本数据类型的字符串
  • hasNext():是否包含下一个字符串
  • nextXxx():获取下一个输入线,Xxx可以是基本数据类型的字符串

注意:Scanner 使用空白(空格、Tab空白、回车)作为多个输入项的分隔符

获得基本类型的输入项:

public void main(String[] args){
    // System.in 代表标准输入,也就是键盘输入
    Scanner sc = new Scanner(System.in);
    // 判断是否还有下一行Long类型整数
    while(sc.hasNextLong()){
        // sc.nextLong 输入的内容
        System.out.println("键盘输入的内容是:" + sc.nextLong());
    }
}

读取文件内容:

public void main(String[] args) throws Exception{
    // 将一个 File 对象作为Scanner构造器参数,Scanner读取文件内容
    Scanner sc = new Scanner(new File("FileName.txt"));
    // 判断是否还有下一行
    while(sc.hasNextLine()){
        // 输出文件的下一行内容
        System.out.println(sc.nextLine());
    }
}
三、系统相关类

当Java程序在不同平台上运行时,可能需要获得平台的相关属性,或者调用平台的相关命令,也就是 Java程序和运行平台的交互

Java 提供了 System 和 Runtime 来进行相关的操作

1、System 类
  • System类代表了当前Java程序运行的平台
  • 程序不能创建 System 类的对象,但是可以直接通过 System 类调用相关变量和方法
  • System 类还提供了通知系统进行垃圾回收的 gc()方法,以及通知系统进行资源清理的runFinalization()方法,但是仅仅是通知,不一定会马上执行
2、Runtime类

可以获得运行时环境,如访问 JVM 的相关信息,如处理器内存信息

  • Runtime类代表了Java程序运行时环境
  • 程序不能创建自己的 Runtime 对象实例,但是可以通过getRuntime()方法获得与之关联的 Runtime对象
  • 也提供了gc()runFinalization方法通知系统进行垃圾回收和资源清理

获得 JVM 相关信息:

public void main(String[] args) throws Exception{
    // 获得Java程序关联的运行时对象 Runtime
    Runtime rt = new Runtime.getRuntime();
    
    // 处理器数量
    int numberOfProcessors = rt.availableProcessros();
    // 总内存数
    long totalMemory = rt.totalMemory();
    // 空闲内存数
    long idleMemory = rt.freeMemory();
    // 最大可用内存数
    long maxMemory = rt.maxMemoty();
}
3、String、StringBuffer、StringBuild

三个类的区别:

  • 可变性:
    String是字符串常量,是不可变的,StringBuild、StringBuffer是可变字符序列

  • 执行速度:
    StringBuild > StringBuffer > String

  • 安全性能:
    String、StringBuffer线程安全,StringBuild非线程安全

  • 适用场景:
    String,少量字符串操作的情况
    StringBuffer,多线程中字符串缓冲区进行大量操作的情况
    StringBuild,单线程中字符串缓冲区进行大量操作的情况

Java 9改进了字符串(包括String、StringBuffer、StringBuild)

  • Java 9之前,底层使用char[]数组保存字符,字符串每个字符占2个字节
  • Java 9改进,底层使用byte[]数组+encoding-flag字段保存字符,每个字符占1个字节

注意:String 还提供了很多构造器用于创建String对象,以及conpareTo(String s)比较两个字符串大小、concat(String str)字符连接等一系列方法

四、Math类
  • Math的构造器是private修饰的,因此无法被实例化
  • 可以直接通过类名调用方法,因为Matn提供了大量的静态方法,以及PIE两个类变量,也就是πe
五、Java 7 的ThreadLocalRandom类 和 Random类

都是用来生成伪随机数的

TreadLocalRandom在多线程环境下,比Random安全些,使用方法差不多

  • Random使用示例:

    // 创建一个Random对象
    Random rand = new Random();
    
    // 获得 0.0~1.0 之间的伪随机 double 数
    double d = rand.nextDouble();
    // 获得 0.0~1.0 之间的伪随机 float 数
    float f = rand.nextFloat();
    // 获得 0~50 之间的伪随机整数
    int i = rand.nextInt(50);
    

注意:为什么是伪随机数?

因为Random的两个实例使用相同的参数创建,并且以相同的顺序调用方法,会产生相同的数字序列

// 相同种子创建
Random rand1 = new Random(20);
Random rand2 = new Random(20);
// rand1 产生3个伪随机数,结果为 23、true、0.4
System.out.println(rand1.nextInt());
System.out.println(rand1.nextBoolean());
System.out.println(rand1.nextDouble());
// rand2 产生3个伪随机数,结果也为 23、true、0.4
System.out.println(rand2.nextInt());
System.out.println(rand2.nextBoolean());
System.out.println(rand2.nextDouble());

为了解决这种产生相同数字序列的问题,可以将当前时间System.currentTimeMillis()作为种子传入,产生 Random 对象

  • TreadLocalRandom使用

使用方法和 Random 基本类似

// 调用 TreadLocalRandom 类的 current() 方法创建对象
TreadLocalRandom rand = TreadLocalRandom.current();
六、BigDecimal类

主要是解决 float、double两种基本浮点类型,在使用时造成的精度丢失问题

精度丢失原因:二进制小数,只能准备表示 2 的多少次方数的累计

  • BigDecimal提供了大量的构造器用于创建 BigDecimal 对象
  • 推荐使用基于String的构造器(例如使用BigDecimal(0.3),实际传的值并不是0.3,只是接近0.3,因为二进制本来就不能准确表示)
七、日期、时间类
  • Java提供了 Date 和 Calendar 用于处理日期、时间的类

  • Date无法实现国际化,月份从0开始,月份中天数从1开始,年从1900 开始,而 Calendar 过于复杂

  • Date 和 Calendar 是可以相互转换的

  • Java 8 专门新增了一个java.time包,推荐使用

    java.time.format包下,DateTimeFormatter格式器类,不仅可以将日期、时间对象格式化成字符串,也可以将特定格式的字符串解析成日期、时间对象

八、正则表达式

正则表达式是一个强大的字符串处理工具,可以对字符串进行查找、提取、分割、替换等操作

预定义字符

预定义字符说明
可以匹配任何字符
\d匹配0~9所有数字
\D匹配非数字
\s匹配所有的空白字符,如空格、制表符、回车等
\S匹配所有非空白字符
\w匹配所有单词字符,如数字(0~9)、字母(26字母)和下划线(_)
\W匹配所有非单词字符

方括号表达式

方括号表达式
表示枚举:[][abc],表示a、b、c其中一个
表示范围:-[a-d],表示 a、b、c、d
表示求否:^[^abc],非a、b、c的任意字符
与运算:&&[[ ^abc] && [a-f] ],a到f,除了abc
并运算:[a-d[f-z]]表示,[a-df-z]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值