java零散知识点(2)

1.hashMap
HashMap不能保证元素的顺序,HashMap能够将键设为null,也可以将值设为null,与之对应的是Hashtable,(注意大小写:不是HashTable),Hashtable不能将键和值设为null,否则运行时会报空指针异常错误;
HashMap线程不安全,Hashtable线程安全
2.抽象方法
关于抽象类
JDK 1.8以前,抽象类的方法默认访问权限为protected
JDK 1.8时,抽象类的方法默认访问权限变为default

关于接口
JDK 1.8以前,接口中的方法必须是public的
JDK 1.8时,接口中的方法可以是public的,也可以是default的
JDK 1.9时,接口中的方法可以是private的

线程之间的通知和唤醒
wait()、notify()和notifyAll()是 Object类 中的方法 ;
Condition是在java 1.5中才出现的,它用来替代传统的Object的wait()、
notify()实现线程间的协作,相比使用Object的wait()、 notify(),
使用Condition1的await()、signal()这种方式实现线程间协作更加安全和高效。

处理异常的两种方式
throws:写在方法声明之后,表示方法可能抛出异常,调用者需要处理这个异常。
throw:写在方法体中,表示方法一定会抛出一个异常,要么try…catch处理,要么throws抛出。

java中的构造方法

java中的构造方法
构造方法的特点:
构造方法的方法名与类名相同
构造方法没有返回值类型,也不写void
构造方法可以重载

什么时候会用到构造方法:
在创建对象的时候
构造方法的作用:
创建对象的时候给属性赋初值
构造方法的分类:
显示的构造方法和隐式地构造方法
显示的构造方法:显示的写出构造方法时,系统不会提供默认的无参构造方法
隐式地构造方法:系统默认提供的无参构造方法

代码块:
分类:静态代码块和实例代码块
静态代码块:static修饰的代码块,在类加载时执行,且只执行一次。因为类就加载一次了。
实例代码块:没有static修饰的代码块,创建对象时执行,每创建一次对象加载一次。
实例代码块在执行构造方法之前执行。所以优先级高于构造方法。

局部变量能否和成员变量重名?
可以,局部变量可以与成员变量重名,这时可用“this”来指向成员变量

对于非运行时异常,程序中一般可不做处理,由java虚拟机自动进行处理。
错误
Java异常都继承自类Throwable,Throwable子类有Error和Exception,其中Exception又分为运行时异常和编译时异常。编译时异常是未雨绸缪性质的异常,是防范,需要显示处理。运行时异常是程序员问题造成,并不强制进行显示处理。

sleep与wait的区别
sleep和wait的区别有:
1,这两个方法来自不同的类分别是Thread和Object
2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得敏感词线程可以使用同步控制块或者方法。
3,wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在
任何地方使用
synchronized(x){
x.notify()
//或者wait()
}
4,sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常

线程
线程运行速度与线程的优先级无关

你可能感兴趣的:(java零散知识点(2))