常用类
本章目标
-
掌握System、Runtime等系统相关类的使用
-
重点掌握字符串处理相关类的使用
-
重点掌握日期时间相关类的使用
-
掌握数学运算及随机数相关类的使用
-
掌握包装类及自动装箱/拆箱
系统相关类
Java 程序在不同操作系统上运行时,有可能需要取得平台相关的属性,或者调用平台命令来完成特定的功能
Java 提供 System 类和 Runtime 类来与程序运行的平台进行交互
System 类
表示当前 Java 程序的运行平台
描述:System 类是一个 final 类,该类的所有属性和方法都是静态的,可以不创建对象直接调用
属性:in(标准输入)、out(标准输出)、err(错误输出)
常用方法:
-
currentTimeMillis( ):记录程序执行的时间(单位毫秒)
-
-
getProperties( ):获取当前系统属性和环境变量
-
gc():提醒虚拟机,建议进行一次垃圾回收
Runtime 类
表示当前 Java 程序的运行时环境
描述:
-
应用程序不能创建自己的 Runtime 对象实例
-
只能通过 Runtime 类的静态方法getRuntime( )获取与之关联的Runtime 对象
常用方法:
-
availableProcessors( ):获取处理器数量
-
freeMemory( ):获取空闲内存大小(字节)
-
totalMemory():获取总内存大小(字节)
-
maxMemory() :获取可用最大内存大小(字节)
字符串相关类
Java 中字符串类型是程序中使用范围最广的数据类型,字符串操作也就成了程序员使用得最多的操作
Java 中提供 String 类、StringBuffer 类、StringBuilder 类来处理字符串,这三个类提供了大量操作字符串对象的方法,能够满足程序中各种对字符串的处理
String类
表示固定不变的字符串
描述:
-
String 类是 final 类,不能被子类继承
-
String 类实例化对象包含固定不变的字符串
字符串特点:
-
字符串必须使用双引号(如“Hello”)
-
字符串的字符使用 Unicode 编码(一个字符或汉字占两个字节)
-
字符串是固定不可变的,统一存放在内存的字符串常量池中
常用方法:
-
charAt ( int index ):返回字符串指定位置的字符
-
indexOf( String s):返回指定字符串第一次出现的位置
-
startsWith(String s):测试字符串是否以指定前缀开始
-
endsWith(String s):测试字符串是否以指定后缀开始
-
subString( int index):返回字符串的子字符串
-
replace(char a, char b):替换字符串的指定字符
-
trim():去掉字符串的前后空格
-
concat(String str):连接两个字符串
-
split(String regex):给定正则表达式的匹配来拆分字符串
字符串常量池
字符串常量池通过共享字符串对象,提高字符串对象的使用效率
正则表达式
正则表达式是一种用来匹配字符串的表达式,Java 中 String 类支持使用正则表达式匹配字符串
字符通配符
次数通配符
其他通配符
StringBuffer 类
表示可变长度的字符串(线程安全)
StringBuffer 类是 Java 提供的另外一种字符串操作类,该类允许包含的字符串内容改变,用于解决 String 类包含的字符串内容不可变的问题(频繁修改字符串内容使用 StringBuffer 类)
常用方法
-
append(String str):向字符串后面追加指定字符串
-
toString():返回对象包含的字符串
举例
// StringBuffer 实例化对象 StringBuffer temp = new StringBuffer(“hello ”); temp.append(“world”); // 追加字符串 String str = temp.toString(); // 返回对象包含的字符串 System.out.println(str);
StringBuilder 类
表示可变长度的字符串(线程不安全)
StringBuilder 类是在 JDK1.5 以后 Java 增加的一个新的字符串操作类,它同 StringBuffer 类几乎相同,唯一不同之处是 StringBuilder 类是线程不安全的,StringBuffer 类是线程安全的
String、StringBuffer 和 StringBuilder 区别
-
String 表示固定长度的字符串,StringBuffer(线程安全) 和 StringBuilder(线程不安全) 表示可变长度字符
-
性能由低到高为 String < StringBuffer < StringBuilder
日期时间相关类
在实际软件项目开发中,经常会遇到处理日期和时间的情况,Java 语言中提供了一系列类专门处理日期和时间类
Date 类(日期时间)
-
表示特定的瞬间(精确到毫秒)
-
时间原点(0毫秒):1970-01-01 08:00:00
-
1天 = 246060 = 86400 秒 = 86400 * 1000 = 86400000 毫秒
//获取当前系统的时间和日期
Date date = new Date();
//把时间和日期转换成时间戳(毫秒)
long time = date.getTime();
SimpleDateFormat 类(日期时间格式化)
描述:
-
格式化(日期 -> 文本)
-
解析 (文本 -> 日期)
常用方法:
-
format ( Date date ) :按照指定的模式,把 Date 日期格式化为符合模式的字符串
-
parse ( String source ) :把符合模式的字符串,解析为 Date 日期
// 格式化 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒"); Date date = new Date( ); String str = sdf.format(date); //解析 sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = simpleDateFormat.parse("2020-10-23");
Calendar 类(日历)
描述:
-
它调用静态方法 getInstance( ) 获取实例化对象(单例模式)
-
它提供很多操作日历字段的方法(YEAR、MONTH、DAY_OF_MONTH、HOUR)
常用方法:
-
int get (int field):获取日历(年月日等)
-
void set(int field, int value):设置日历(年月日等)
-
void add(int field,int amount):添加或减少日历(年月日等)
// 获取日历对象实例(当前日历) Calendar calendar = Calendar.getInstance(); // 获取日历年、月 int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); //设置日历年、月 calendar.set ( Calendar.YEAR, 2021 ); calendar.set ( Calendar.MONTH, 9 ); //日历增加 2 年 calendar.add(Calendar.YEAR, 2); //把日历对象转换为日期对象 Date date = calendar.getTime( );
数学运算相关类
Math 类
描述:
-
Math 类包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数
-
Math 的方法都被定义为 static 形式,可以直接通过 Math.方法名() 进行调用,方便程序员进行实际的使用
常用方法:
-
int abs(int i):返回绝对值
-
round(float f):表示四舍五入
-
min(int a,int b):返回两个数最小值
-
max(int a,int b): 返回两个数最大值
-
random():返回[0,1)之间的随机double值
BigInteger 类
-
在 Java 中,基本数据类型存储的整型最大范围是 64 位 long 型整数
-
BigInteger 类用于表示任意大小的整数,因为它内部有一个 int[ ] 数组可以保存一个非常大的整数
BigInteger numA = new BigInteger("1234567890"); BigInteger numB = new BigInteger("12345678901234"); // BigInteger 运算只能调用方法 BigInteger sum = NumA.add(NumB); // BigInteger 可以转为基本数据类型 long numC = numA.longValue();
BigDecimal 类
BigDecimal 类和 BigInteger 类相似,用于表示一个任意大小且精度完全准确的浮点数(常用于财务计算)
BigDecimal decimalA = new BigDecimal("123.4500"); // 返回小数位数 System.out.println(decimalA.scale()); // 4(4位小数) //去掉末尾的 0 BigDecimal decimalB = decimalA.stripTrailingZeros(); System.out.println(decimalA.scale()); // 2(两位小数)
包装类
什么是包装类
包装类是将 Java 中八种基本数据类型封装成的类,所有的基本数据类型都能很方便地与对应的包装类相互转换,以解决应用中要求使用引用数据类型,而不能使用基本数据类型的情况
包装类的特点
-
所有包装类都是 final 类型(不能派生子类)
-
实例化包装类对象后,对象中保存的基本类型数据不能再改变
-
包装类封装大量有用的方法(如数据类型转换)
-
除 Character 类和 Boolean 类继承于 Object 类,其他的包装类都继承于 Number 类
基本数据类型与包装类
包装类的共同点
-
包装类中包含的值不可变(包装类实例化对象后不能修改保存的数值)
-
包装类都有两个构造器
-
包装类中都有xxxValue()方法
-
包装类中都有两个 ValueOf()方法
自动装箱/拆箱
自动装箱和自动拆箱是基本数据类型与包装类之间的一种转换机制(通过编译器自动完成)
不要过度使用自动装箱或自动拆箱功能,因为它们可能会导致程序的性能下降