JAVA基础类库
获取用户键盘输入:
系统里,System.in代表键盘----如果直接用System.in很麻烦,通常都会进行包装。
A,传统会包装成BufferedReader —这个更安全,而且有完善的异常机制
B,Scanner ----更简单
系统相关的两个类
System----代表JVM所在的操作平台。
in----代表标准输入,通常标准输入就是键盘
out----代表标准输出,通常代表屏幕
exit(int status):退出虚拟机。
无论还有方法,线程都会结束。
getenv()----获取所有的环境变量。
getenv(String name)----获取指定环境变量的值
static Properties getProperties()----获取所有系统属性
static String getProperty(String key)----获取指定系统属性的值。
Runtime----代表虚拟机所在的JRE。
JRE = JVM+核心类库
通俗的说,如果要获取操作平台相关的特性,用System。
如果要获取JVM相关的特性,用Runtime。
典型的“单例类”,它的构造器被隐藏了,因此只能通过**getRuntime()**方法来获取实例。
rt.maxMemory()----虚拟机总的内存
rt.totalMemory()----虚拟机所有已分配的内存
rt.freeMemory()----虚拟机空闲的内存
//如果没有用绝对路径,会到PATH环境变量所指定的系列路径中搜索。
运行操作系统已有的程序:.exec(“此位置填想运行程序的路径。”)
常用类
Object类
Object类提供的一些常用方法:
- equals(Object obj):判断指定对象与该对象是否相等。此处的相等的标准是,两个对象是同一个对象。【通常要重写,自己添加判断标准】
- protected void finalize():当系统中没有引用变量引用该对象是,垃圾回收器调用此方法来清理该对象的资源。
- getClass():返回该对象的运行时类。
- hashCode():返回该对象的hashCode值。
- toString():返回该对象的字符串表达式;【通常要重写成自己需要的格式。】
- clone():该方法用于帮助其他对象来实现“自我克隆”,就是得到一个当前对象的副本,而且二者之间完全隔离。【clone()方法实现的是一种“浅克隆”,只克隆该对象的所有成员变量值,不会对引用类型的成员变量值所引用的对象进行克隆】
- requireNonNull(参数):当传入的参数不为null时,该方法返回参数本身;否则引发NullPointerException异常。
String、StringBuffer和StringBuilder类
三者的联系:
- String类是不可变类,一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。
【方法】:见API文档 - StringBuffer类的对象是可以改变的,线程安全,性能略低。
【方法】:①append():追加字符串
②insert():插入
③reserve():反转
④replace():替换
⑤delete():删除
⑥setLength():改变长度 - StringBuilder类的对象可以改变,没有实现线程安全功能,性能略高。
【方法】:①append():追加字符串
②insert():插入
③reserve():反转
④replace():替换
⑤delete():删除
⑥setLength():改变长度
Math类
【方法】:API文档
ThreadLocalRandom与Random类
Random类主要用于产生一个伪随机数。
它有两个构造器:①一个构造器使用默认的种子(以当前时间作为种子)
②该构造器需要程序员显式传入一个long型整数的种子
Random:如果这个类的两个实例是用同一个种子创建的,对它们用同样的顺序调用方法,则它们会产生相同的数字序列【伪随机数】
为了避免两个Random对象产生相同的数字序列,通常推荐使用当前时间作为Random对象的种子Random rand = new Random(System.currenTimeMillis());
在多线程环境下使用ThreadLocalRandom的方法与使用Random基本类似。
日期、时间类
Date类
构造器:
①Date():生成一个代表当前日期时间的Date对象。
②Date(long date):根据指定的long型整数来生成一个Date对象。
方法:
①after(Date when):测试该时间是否在指定日期when之后。
②before(Date when):测试该时间是否在指定日期when之前。
③getTime():返回该时间对应的long型整数。
④setTime(long time):设置该Date对象的时间。
Calendar类
抽象类
构造器受保护
调用getInstance()来获取实例
Calendar可以转换成Date。通过方法–>getTime()
【方法】:
set(年,月,日,时,分,秒)
set(Field ,value):将给定的日历字段设置为给定值
add(Field ,value):在给定的日历字段加或减去给定值
roll(Field ,value):在给定的日历字段加或减去给定值
add与roll的区别:roll超过该Field最大的范围时,也不会向上一个字段进位。add则会发生。
正则表达式
概念:所谓正则表达式,就是一个可以匹配N个字符串的字符串模板。
String里的如下方法与正则表达式有关:
- matches(String regex)–判断字符串是否能匹配【正则表达式模板】
- replaceAll(String regex ,String replacement)-将该字符串中所有匹配regex的字串替换成replacement。
- replaceFirst(String regex ,String replacement) - 将该字符串中第一个匹配regex的字串替换成replacement。
- split(String regex) - 以regex作为分隔符,把该字符串分割成多个字串。
特殊字符【P264】
- ( )
- [ ]
- { }
- *
- +
- \
- ?
- |
- ^ :表示一行的开头
- $ :表示一行的结束
正则表达式所支持的通配符:
- . -> 可匹配任意字符【P264】
- \s ->代表一个任意的空白(空格 或 Tab) 【space】
- \S ->代表一个任意的非空白
- \d ->代表一个任意的数字 【digital】
- \D ->代表一个任意的非数字
- \w ->代表一个任意的单词字符 【word】
- \W ->代表一个任意的非单词字符
方括号表达式【p265】
- 枚举:[ax中] -> 代表a或x或中 其中的任意一个字符。
- 范围:[a-f] -> 代表a,b,c,d,e,f其中的任意一个字符。
- 枚举与范围并存:[a-f5-7]: 代表a,b,c,d,e,f,5,6,7其中的任意一个字符。
- 表示求否:[^a-c]:不是a,b,c字符中的任意一个字符。
- 表示求交:[a-g&&[^b-d]]:表示a-g范围里除开b-d以外的数。
表示出现次数的“副词”
- ? :表示它前面的东西可以出现0~1次。
- *:表示它前面的东西可以出现0~N次。
- +:表示它前面的东西可以出现1~N次。
- {n,m}:表示它前面的东西最多可以出现n-m次。
- { ,m}:表示它前面的东西最多可以出现m次。
- { n, }:表示它前面的东西最少要出现m次。
- { n }:表示它前面的东西必须要出现n次。
Pattern、Matcher类
- Pattern: 就是代表正则表达式模板
- Matcher:代表一个匹配工具类
find():返回目标字符串中是否包含于Pattern匹配的子串。
group():取出上一次于Pattern匹配的子串。
matches():返回整个目标字符串与Pattern是否匹配。
如果想正则表达式实现一些更复杂的功能,可能还需要用到Pattern、Matcher
国际化
希望一个程序,可以“自适应”所有用户环境。
Internationalization -> I18N
本质就是----查找,替换
资源文件----负责为程序 提供 国际化消息。
资源文件名称必须满足格式:baseName_语言代码_国家代码.properties
如果资源文件中包含了非西欧字符,就需要使用native2ascii工具类来处理。
native2ascii 要处理的文件名 生成的新文件名
Locale - 代表语言、国家环境
ResourceBundle - 负责加载指定资源文件,而且帮我们查找、替换
MessageFormat - 负责为消息中的占位符填充参数值
国际化步骤:
①提供资源文件。负责为程序 提供 国际化消息
②使用ResourceBundle加载国际化资源文件
getBundle(baseName,语言代码_国家代码);
搜索资源文件的顺序:
A.baseName_语言代码_国家代码.properties
B.baseName_语言代码.properties
C.baseName.properties
③调用ResourceBundle的getMessage()方法输出国际化消息。
本质就是:让ResourceBundle帮我们进行查找、替换
格式化的相关类
使用NumberFormat格式化数字
格式数字:就是讲数值转换为相应的字符串。
①它提供了如下方法来获取NumberFormat实例。
- getCurrencyInstance():格式成货币字符串。
- getIntegerInstance():格式化成整数字符串。
- getPercentInstance():格式化成百分号字符串。
②得到实例之后,调用它的如下方法
- String format(double number):将数值转换成相应的字符串。
使用DateFormat格式化日期、时间
**格式化日期:**将日期转换为相应的字符串
①先获取DateFormat的实例
- getDateInstance() — 得到一个日期格式器,格式化出来的字符串只有日期部分。
- getTimeInstance() — 得到一个日期格式器,格式化出来的字符串只有时间部分。
- getDateTimeInstance() — 得到一个日期格式器,格式化出来的字符串有日期、时间。
可以指定日期、时间的风格:FULL / LONG / MEDIUM / SHORT
还传入Local,用于指定格式化适应哪个国家的字符串。
②得到实例后,调用它的如下方法
- String format(Date d):将日期转换成相应的字符串。
使用SimpleDateFormat格式化日期
它可以做两件事:
①将日期格式化成字符
②也可以将字符串解析成日期
用法:①创建SimpleDateFormat实例,需要传入一个模板字符串
②如果要格式化,用format
如果要解析,用parse方法。