-
final 关键字
final 变量
final 变量能被显式地初始化并且只能初始化一次。
被声明为 final 的对象的引用不能指向不同的对象。但是 final 对象里的数据可以改变。
final 修饰符通常和 static 修饰符一起使用来创建类常量。
final 方法
类中的 final 方法可以被子类继承,但是不能被子类修改。
声明 final 方法的主要目的是防止其内容被修改。
final 类
final 类不能被继承,没有类能够继承 final 类的任何特性。 -
synchronized 关键字
Synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。(其他线程 必须等待当前线程执行完该方法 / 代码块后才能执行该方法 / 代码块)
PS:Java 中锁的种类
1)类锁
只有 synchronized 修饰静态方法或者修饰一个类的 class 对象时,才是类锁。
2)对象锁
除了类锁其他的上锁方式都认为时对象锁。比如 synchronized 修饰普通方法或者synchronized(this) 给代码块上锁等。
更多 -
volatile 关键字
用来确保变量的更新操作通知到其他线程。
当把变量声明为 volatile 类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重新排序。 -
引用类型
强引用 > \gt > 软引用 > \gt > 弱引用 > \gt > 虚引用
强引用
一个对象赋给一个引用就是强引用。比如 new 一个对象,一个对象被赋值另一个对象。
软引用
用 SoftReference 实现,一般不会轻易回收,只有内存不够时才会回收。
弱引用
用 WeekReference 实现,一旦垃圾回收已启动,就会被回收。
虚引用
不能单独存在,必须和引用队列联合使用。主要作用时跟踪对象被回收的状态。 -
String str = “welcome”+“to”+360 创建了多少对象?????
-
wait() 方法 和 sleep() 方法
它们都是可以使线程暂停执行的方法。
wait() 方法是 Object 类的方法,当调用wait()方法后,线程会释放掉他所占用的锁,从而使线程所在对象中的其他synchronized数据可以被其他线程使用。它用于线程间通信,这个方法会使当前拥有该对象锁的进程等待,直到其他线程调用notify()方法或者notifyAll()时才醒来,不过开发人员也可以给他指定一个时间,自动醒来。
sleep() 方法是 Thread 类的静态方法,是线程用来控制自身流程的,他会使此线程暂停执行一段时间,而把执行机会让给其他线程,等到计时时间一到,此线程会自动苏醒。
wait()方法必须放在同步控制方法和同步代码块中使用,sleep()方法则可以放在任何地方使用。sleep()方法必须捕获异常,而wait()、notify()、notifyAll()不需要捕获异常。在sleep的过程中,有可能被其他对象调用他的interrupt(),产生InterruptedException。由于sleep不会释放锁标志,容易导致死锁问题的发生,因此一般情况下,推荐使用wait()方法。 -
运算符优先级
优先级 | 运算符 | 结合性 |
---|---|---|
1 | () [] . | → \rightarrow → |
2 | ! +(正号) -(负号) ~ ++ – | ← \leftarrow ← |
3 | * / % | → \rightarrow → |
4 | +(加号) -(减号) | → \rightarrow → |
5 | << >> >>> | → \rightarrow → |
6 | < <= > >= instanceof | → \rightarrow → |
7 | == != | → \rightarrow → |
8 | &(按位与) | → \rightarrow → |
9 | ^ | → \rightarrow → |
10 | | | → \rightarrow → |
11 | && | → \rightarrow → |
12 | || | → \rightarrow → |
13 | ?: | ← \leftarrow ← |
14 | = += -= %= &= |= ^= ~= <<= >>= >>>= | → \rightarrow → |