四、Java基础类库

注:博主是看《Java疯狂讲义》进行复习和总结的,所以博客里面的代码和举例部分是来自原书。加一些自己的个人理解在里面。。因为自己的总结还不够成熟,里面有些说法可能是不对的,希望大家看到错误指出来,我一定会改正 (づ ̄ 3 ̄)づ

一、关于输入输出的

1。public static void main(String[] args)
Java类由JVM调用
public的修饰符目的是为了使JVM自由调用
static:JVM在调用的时候是不会先创建类的实例的,要调用就需用static修饰,直接调用。
void:返回值返给JVM是没有意义的
String[] args :如何给这个形参赋值?在控制台执行命令的时候如:java 类名 字符串

2。Scanner :基于正则表达式的文件扫描器
有两个主要方法用于扫描输入
1)hasNextXxx() 布尔类型。判断是否有下一项输入
(好像终于懂了为什么有while(对象.hasNextXxx()){}的用法)
2)nextXXX()获取下一项输入
通过对象.useDelimiter(“,..,”)可以改变输入 的分隔符
使用nextLine()可以忽略一行的空格输入一行
Scanner读取操作可能被阻塞:当输入没有停止但又暂时没有输入的时候(多见键盘读取操作)两种方式均可能被堵塞
3)文件输入
Scanner in = new Scanner(new File(“文件名”));
in.nextLine();按行读取文件中的内容。

二、系统相关类

1。System类
1)代表Java当前运行的平台。程序不可以创建System对象,但是可以直接类名调用。可以通过System类来访问操作系统的环境变量和系统属性。
System还提供的辣鸡回收的方法。gc()
通知系统进行资源清理 runFanalization()
2)获取当前系统时间。
currentTimeMillis() 毫秒
NanoTime()纳秒
返回的是与1997年一月一日午夜十二点的时间差。但是由于不同操作系统底层时间粒度单位不同,返回的并不是十分准确的时间。
3)System的
in:标准输入
out:标准输出
err:错误输出
这三个方法也提供的setIn。。之类的方法来改写。
4)判断两个对象是否为同一个
hashCode被改写之后并不能唯一标识一个对象。比如String改写之后的。
但是identityHashCode是根据对象地址值计算的,可以唯一标识一个对象。如果identityHashCode值相等,那么这两个对象一定是同一个。

2。RunTime类
代表当前Java程序运行时的环境。
每个Java程序有与之对应的RunTime实例。应用程序不可自己创建,但是可以调用。
RunTime类也提供了垃圾回收和提醒系统进行清理。

3。常用类
1)Object类
如果程序没有extends继承父类,那么所有的类的父类都是默认Object。
1)
常用方法:
布尔型 equals
类类型 getClass
int HashCode
String toString 运行时类名@十六进制地址值
protected clone()
步骤:
类实现Cloneable接口。(无方法,只是签名) B implements Cloneable
在B类中实现clone方法。
public B clone(){
return (B)super.clone();
}
复制对象:
B b1 = new B();
B b2 = b1.clone();
这是一种浅copy,并没有把对象真正的复制的。只是复制了对象的引用给b2。内存中真正的对象还是只有一个。
如果想用深copy,使用递归克隆,把对象也复制一份。

Java7新增的Objects类
Java描述工具类的方法一般是名字后面加s
是Object的增强类。比如toString方法,如果是object类的,对象为空就会引发空指针异常。但是Objects的方法会返回“null”字符串。不会空指针异常

三、String。StringBuffer。StringBulider
String是不可变类。在创建对象不之后包含在此对象中的字符串不可在变。
StringBuffer可变。通过其提供的一系列方法可改变字符串序列。生成最终想要的字符串。还可以通过toString方法来把其变成String对象。
JDK1.5新增StringBulider 和StringBuffer其实差不多就是,StringBulider是线程不安全的。但是相比起来StringBuffer性能高一点。StringBuffer是线程安全的。
三者均实现了charSequence接口,因此charSequence接口可以被认为字符串协议接口。
1)String拥有许多有用的方法。
总结下可以分为以下几种。
单个字符串的操作,比如获取长度,charAt找对应坐标的字符,追加,替换,删除,插入。。。
字符串转换为字符串数组。字符数组转换成字符串(C里面好像是直接可以操作的。java用这个方法可以达到类似效果)
两个字符串比较:序列是相同,是否包含相同子序列,indexOf从第几个下标开始不同。。。找出子串在主串中出现的位置。。。
使用的时候可以查看api

*String类不可变。他的实例一旦生成就不会再改变。(因此使用String进行字符串连接的时候会产生很多的临时变量。)
如:
String str1 = “Java”:
str1 = str1 + “字符串2”;//a
str1 = str1 + “字符串3”;//b
这样除了使用了3个字符串直接量,还会额外生成2个字符串直接量:产生的a,b

四、Math类
提供此工具完成复杂的函数操作
其构造器被private修饰,因此无法创建子类。被static修饰可以直接创建子类。
PI :π 和 E:e
提供的方法大致有:
角度弧度转换,
三角函数计算,
矩形坐标转换成极坐标
取整:返回小于目标数最大数 Math.floor(-1.2);
返回大于目标数最小数Math.ceil(1.2);
平方、开方、指数、对数运算、绝对值,最大值最小值、随机数

五、Java7的ThreadLocalRandom和Random
Java7新增的增强类。提供的方法多一些。
两个Random只要其对象种子相同,调用方法顺序相同,产生的随机数是相同的。因此成为伪随机数。
为了避免这种现象,通常使用System.currentTimeNills();作为对象种子

六、BigDecimal类

两个基本类型浮点数float double都会产生精度丢失的现象。
BigDecimal有两个参数类型,一种是double类型,一种是字符串类型。采用double类型的还是会精度丢失,因为穿进去的并不是准确的数值而是一个近似值。但是采用字符串类型穿进去的就不会发生这种现象。

七、Java8的日期、时间类
1)Date 对象既包含日期也包含时间
因为其从JDK1。1便存在,版本老,一些方法已经过时。故处理日期推荐使用Calendar
2)Calendar抽象类。用于表示日历。是所有日历类的模板。
3)Java8新增的java.time包 有许多常用类

(因为不是笔试考察的重点,而且用的时候可以直接查看api 。就不继续总结了。。笔试基本没考过日期类相关的东西。可能顶多考个返回的时间是不是准确的。。这个我猜的,没考过。)

八、正则表达式
(之前考的时候我还不知道是哪里的知识呢,原来是这个地方的。笔试好像有两家公司考过。怎么识别匹配这个字符串。选择题)
1。
正则表达式是请打的字符处理工具,用于匹配字符串的模板。
1)如何创建正则表达式:正则表达式支持的合法字符,特殊字符
x ———————— x可代表任何合法的字符
\0mnn ———————— 八进制数0mnn所表示的字符
\xhh ———————— 十六进制所表示的的字符
\uhhhh ———————— 十六进制0xhhhh所表示的unicode字符
\t ———————— 制表符
\n ———————— 换行符
\r ———————— 回车符
\f ———————— 换页符
\a ———————— 报警符
\e ———————— 空格符
\cx ———————— x对应的控制符。x是a~z 如ctrl+c

正则表达式中的特殊字符:
本身,使用$
^ ———————— 匹配一行开头
() ———————— 标记子表达式开始和结束位置
[] ———————— 用于确定中括号表达式开始和结束位置
{} ———————— 用于标记前面子表达式的出现频度。
* ———————— 指定前面子表达式可以出现零次或多次,
+ ———————— 指定前面表达式可以出现一次或者多次
? ————————指定前面表达式可以出现零次或者一次
. ———————— 匹配除了\n之外的任何单字符
\ ———————— 用于转义下一个字符。或指定八进制十六进制字符。如果需要匹配\,用\
| ———————— 指定两项之间任选一项,

2)预定义字符(通配符)
. ———————— 可以匹配任何字符
\d ———————— 匹配0~9的所有数字
\D ———————— 匹配非数字
\s ———————— 匹配所有空白字符,如空格,制表符,回车符,换页符,换行符
\S ———————— 匹配所有非空白字符
\w ———————— 匹配所有单词字符,0~9数字,26个英文字母和下划线
\W ———————— 匹配所有的非单词字符

3)方括号表达式
在一些特殊情况下,如果只想匹配a~f的字母或者匹配出来ab之外的所有字母,单靠通配符达不到要求。这个时候就需要用到方括号表达式
表示枚举 ———————— [abc]表示a,b,c中任意一个字符
表示范围 -: ———————— [a-f]表示啊~f之间的任意字符。可以和枚举一起使用如:[a-fh-o]表示a~f、h~o之间的任意字符
表示求否^ ———————— [^abc]表示非a,b,c之间任意的字符。[^a-f]表示不是a~f之间的任意字符
表示与运算&& ———————— [a-z&&[def]]求a~z之间和[def]的交集。表示d,e,f其中的一个
表示并运算 ———————— [a-d[m-p]]和前面枚举类似

4)圆括号表达式
圆括号表达式可以用于将多个表达式组成一个子表达式,圆括号中可以使用或运算符来表示使用其中之一。
2。正则表达式如何使用。
……
(这个如果笔试题的话多刷题比较有用,个人感觉。。使用的时候可以在查资料。。暂时这里不总结,用到了再说。)

九、Java国际化与格式化
(目前感觉也是用不到,暂时不看。可能以后编程需要用到格式化可以回来看看。)
*格式化数字
*格式化日期

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值