前言
该文章是我在复习Java,所记录的一些知识点,主要是通过《Java编程思想》这一本书,所记录的。所记录的知识点,大都是我不知道或者是接触少容易忘记的,所以在此记录一下,以便查阅。如果对你也有帮助,那就是我莫大的荣幸了。
操作符
按位操作符
操作符(&,按位‘与’) :如果两个输入位都是1,则生成一个输出位1;
操作符(|,按位‘或’):如果两个输入位只要有一个是1,则生成一个输出位1;
操作符(^,按位‘异或’):如果输入位的某一个是1,但不全都是1,,则生成一个输出位1
操作符(~,按位‘非’):生成与输入位相反——若输入0,则输出1,若输入1,则输出0
位移操作符
左移操作符(<<): 能按照操作符右侧指定的位数将操作符左边的操作数向左移动(在低位补0)
“有符号” 右移操作符(>>): 则按照操作符右侧指定的位数将操作符左边的操作数向右移动。“有符号”的意思是指:若符号为正,则在高位补0,符号为负,则在高位补1
“无符号” 右移操作符(>>>): 无论符号正负,都在高位补0
(<<=或>>=或>>>=)表示将得到的结果赋值给左边的变量(对byte和short可能出现误差,原因是需要先转为int再做位移运算)
enum
在switch语句中可以使用枚举类
final关键字
final属性(域):当数据为基本类型的时候,被final声明的数据被初始化后无法被修改,当数据位对象时,final保证其引用(内存地址)无法被修改,但是对象的值仍可修改。final数据只能在定义处或者在构造器中被赋值。此举保证了数据被使用前可以得到正确初始化。
final参数:在方法参数声明中添加final,这意味着你无法在方法中修改参数引用所指向的对象。(意思就是说:参数指向一个对象,对象指向一个引用,你仍然可以通过参数修改对象的内容,但是无法修改参数指向,比如重新new 一个对象给这个参数)
final方法:将被final修饰的方法锁定,以防任何继承类修改它的含义。将final和private进行对比,private更具安全性。
final类:当final修饰类时,该类将无法被继承,且该类的方法都被隐式指定为final,String类为什么无法修改其值?原因在于底层数组用了private final,也是做过了特殊处理。
此外可以通过反射修改String的数组哦!
类的初始化顺序
- 父类静态(代码块,变量赋值二者按顺序执行)
- 子类静态
- 父类构造代码块
- 父类构造方法
- 子类构造代码块
- 子类构造方法
Foreach与迭代器
任何类只要实现了Iterator接口,就可以使用foreach语法。
异常
修改异常的发生地
直接抛出异常不会修改原来的信息,调用异常对象的fillInStackTrace()再抛出,可以修改异常发生的地点。
异常链
在捕获一个异常后再抛出另外一个异常,常常想保存原来的异常信息,这就叫异常链。
有三个异常类的构造器可以接受cause参数,分别是Error,Exception,RuntimeException。如果其他类型则需要调用initCause().
异常使用指南
应该在下列情况下使用异常:
- 在恰当的级别处理问题。(在知道该如何处理的情况下才捕获异常)
- 解决问题并且重新调用产生异常的方法。
- 进行少许修补,然后绕过异常发生的地方继续执行。
- 用别的数据进行计算,以代替方法预计会返回的值。
- 把当前的运行环境下能做的事情尽量做完,然后把相同的异常重抛到更高层。
- 把当前的运行环境下能做的事情尽量做完,然后把不同的异常抛到更高层。
- 终止程序。
- 进行简化。(如果你的异常模式使问题变得太复杂,那用起来会非常痛苦也烦人)
- 让类库和程序更安全。
字符串
String重载了操作符‘+’,在做‘+’运算时,编译器会自动使用StringBuilder进行处理。
正则匹配
本博客所有文章除特别声明外,均采用: 署名-非商业性使用-禁止演绎 4.0 国际协议,转载请保留原文链接及作者。