-
什么时候需要在方法中用throws子句声明异常:
①调用一个抛出受查异常的方法,如:FIleInputStream构造器;
②程序运行过程中发现错误,并且利用throw语句抛出一个受查异常;
③程序出现错误;
④Java虚拟机和运行时库出现的内部错误。 -
error 和 exception 的区别?
error和exception都是由Throwable继承而来,error类层次结构描述了java运行是系统的内部错误和资源耗尽错误,应用程序不应该抛出这种类型的对象,当出现这样的内部错误,除了通告给用户,并尽力使用程序安全地终止之外,没有其他的方法。
Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。
Exception类又分为运行时异常(Runtime Exception)和受检查的异常(Checked Exception ),
运行时异常;ArithmaticException,IllegalArgumentException,编译能通过,但是一运行就终止了,程序不会处理运行时异常,出现这类异常,程序会终止。而受检查的异常,要么用try。。。catch捕获,要么用throws字句声明抛出,交给它的父类处理,否则编译不会通过。 -
throw 和 throws 的区别?
throw:
①表示方法内抛出某种异常对象
②如果异常对象是非 RuntimeException 则需要在方法申明时加上该异常的抛出 即需要加上 throws 语句 或者 在方法体内 try catch 处理该异常,否则编译报错
③执行到 throw 语句则后面的语句块不再执行
throws:
①方法的定义上使用 throws 表示这个方法可能抛出某种异常
②需要由方法的调用者进行异常处理 -
final 修饰 StringBuffer 后还可以 append 吗?
StringBuffer 理解为缓冲区,不能通过赋值符号对其进行赋值,使用append进行值修改。没有创建新的对象。
对其加以final修饰,fianl 修饰引用对象,代表引用对象不可变,StringBuffer 实现append()没有产生新的对象,所以不会报错。 -
Object 的常用方法有哪些?
①clone方法:
保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。
主要是JAVA里除了8种基本类型传参数是值传递,其他的类对象传参数都是引用传递,我们有时候不希望在方法里讲参数改变,这是就需要在类中复写clone方法。
②getClass方法
final方法,获得运行时类型。
③toString方法
该方法用得比较多,一般子类都有覆盖。
④finalize方法
该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。
⑤equals方法
该方法是非常重要的一个方法。一般equals和==是不一样的,但是在Object中两者是一样的。子类一般都要重写这个方法。
⑥hashCode方法
该方法用于哈希查找,可以减少在查找中使用equals的次数,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。
一般必须满足obj1.equals(obj2)==true。可以推出obj1.hash- Code()==obj2.hashCode(),但是hashCode相等不一定就满足equals。不过为了提高效率,应该尽量使上面两个条件接近等价。
如果不重写hashcode(),在HashSet中添加两个equals的对象,会将两个对象都加入进去。
⑦wait方法
wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。
调用该方法后当前线程进入睡眠状态,直到以下事件发生。
(1)其他线程调用了该对象的notify方法。
(2)其他线程调用了该对象的notifyAll方法。
(3)其他线程调用了interrupt中断该线程。
(4)时间间隔到了。
此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。
⑧notify方法
该方法唤醒在该对象上等待的某个线程。
⑨notifyAll方法
该方法唤醒在该对象上等待的所有线程。
⑩finalize()的作用
Java允许在类中定义一个名为finalize()的方法。它的工作原理是:一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法。并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。 -
为什么 wait/notify 方法放在 Object 类中而不是 Thread 类中?
由于wait,notify和notifyAll都是锁级别的操作,所以把他们定义在Object类中,因为锁属于对象。
在java.lang.Thread类中,提供了sleep(),
而java.lang.Object类中提供了wait(), notify()和notifyAll()方法来操作线程
sleep()可以将一个线程睡眠,参数可以指定一个时间。
而wait()可以将一个线程挂起,直到超时或者该线程被唤醒。
wait有两种形式wait()和wait(milliseconds).
sleep和wait的区别有:
①这两个方法来自不同的类分别是Thread和Object
②最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
③wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在
任何地方使用
synchronized(x){
x.notify()
//或者wait()
}
④sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常 -
final、finally、finalize 的区别?
final修饰类,说明这个类不能被继承,是以个顶级类。
final修饰变量,说明这个变量是常量。
final修饰方法,表示这个方法不能被重写,不过可以冲在final方法。
finally是关键字,在异常处理中,try子句中执行需要运行的内容,catch子句用于捕获异常,finally子句表示不管是否发生异常,都会执行。finally可有可无。但是try…catch必须成对出现。
finalize() 方法,Object类的方法,Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象进行调用。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的子类覆盖 finalize() 方法以整理系统资源或者执行其他清理操作。 -
static 关键字的作用?
第一,为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。
第二,实现某个方法或属性与类而不是对象关联在一起
具体而言,在Java语言中,static主要有4中使用情况:成员变量、成员方法、代码块和内部类 -
super 关键字的作用?
①super表示超(父)类的意思,this表示对象本身
②super可用于访问父类被子类隐藏或着覆盖的方法和属性,使用形式为super.方法(属性)
③在类的继承中,子类的构造方法中默认会有super()语句存在(默认隐藏),相当于执行父类的相应构造方法中的语句,若显式使用则必须位于类的第一行
④对于父类有参的构造方法,super不能省略,否则无法访问父类的有参构造方法,使用形式为super(xx,xx…) -
transient关键字的作用?
Java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。换句话来说就是,用transient关键字标记的成员变量不参与序列化过程。
java基础二
最新推荐文章于 2022-08-28 18:01:21 发布