黑马程序员技术交流社区
标题: “第三帖”之异常应该注意事项(子父类中覆盖的体现、... [打印本页]
作者: 黄茂霖 时间: 2013-5-6 17:52
标题: “第三帖”之异常应该注意事项(子父类中覆盖的体现、...
本帖最后由 shenqi 于 2013-5-6 17:56 编辑
覆盖也称为重写(override),是指子类的方法覆盖父类的方法,首先来看下代码:
class SuperClass{
public void eat(String s){
System.out.println("吃饭");
}
}
class ChildClass extends SuperClass{
@Override
public void eat(String s) {
System.out.println("吃面");
}
}
这是一个简单的子类重写父类的方法.来看下有什么注意事项:
首先把一个方法分为5个部分 : ①public ②void ③eat(④String ⑤s)
① 在子类重写方法时修饰符必须比父类的大.
a) 例如:
class SuperClass{
protected void eat(String s){
System.out.println("吃饭");
}
}
class ChildClass extends SuperClass{
@Override
public void eat(String s) {
System.out.println("吃面");
}
}
b) 切忌不可反过来,例如:
class SuperClass{
×public void eat(String s){
System.out.println("吃饭");
}
}
class ChildClass extends SuperClass{
@Override
×private void eat(String s) {
System.out.println("吃面");
}
}
这样的写法是错的!
也就是说子类不可以缩小父类的修饰符的权限.权限的大小:private < protected < public,假如父类中没有修饰符,那子类在重写时也不能带修饰符.\
② 返回值:必须和父类一摸一样,否则编译不通过.
③ 方法名:必须和父类一摸一样,否则编译不通过.
④ 局部变量类型:必须和父类一摸一样,否则编译不通过.
⑤ 局部变量名:可以随意写,不用和父类相同也可以.
补充:对于一个类是否重写了父类的方法,可以使用@Override在定义在方法名上,检查方法是否重写了,如果没有则编译时就报错减少排错的工作.@这种格式开头的称为注解.详细知识可以参考张孝祥老师的Java高薪技术.
作者: 黄茂霖 时间: 2013-5-6 17:54
本帖最后由 shenqi 于 2013-5-6 17:57 编辑
代码执行顺序:
Java中的代码一般都是顺序执行的,但是有些情况下却不一定如此:
Java中对于编译时异常我们通常使用try{}catch(Exception e){}这种方法捕获.
代码:
package cn.itcast.itheima;
import java.io.*;
public class TryCatchTest {
public static void main(String[] args) {
TryCatchTest tct = new TryCatchTest();
try {
tct.test(); ------ 1
} catch (Exception e) {
e.printStackTrace(); ------- 2
}
}
public void test() throws IOException{
File f = new File("");
}
}
当代码执行到 1 的位置如果抛出异常则会跳转到 2 继续执行,所以证明并不是所有的执行顺序都是顺序执行的.假如以上代码中还有finally{}代码块,则在try{}块出现异常会先跳转到catch{}代码块执行,执行完后再到块.finally{}.finally{}是必定执行的代码块,无论程序出不出异常都一定会执行的,这点必须记住.
throw与throws:
throw是Java的关键字,用于声明方法内有单个异常抛出. 且调用者无需捕获.
例如:
class Student{
private String name;
private int age;
public Student(String name,int age){
if(name ==null || name == "")
throw new NullPointerException();
this.name = name;
this.age = age;
}
}
throws 同样是Java的关键字,但该关键字用于声明抛出一组异常.调用者必须捕获该异常.例如:
class ThrowsTest{
public void test() throws FileNotFoundException, SocketException{
File f= new File("");
FileReader fr = new FileReader(f);
DatagramSocket s = new DatagramSocket(9999);
}
}
throw和throws总结:
1.对于方法中假如有多个异常抛出可以使用throws关键字声明,在方法后大括号前声明,以“,”隔开多个异常。
2.对于方法中单个异常的声明就是用throw关键字抛出.
3.throws和throw只能声明异常对象,非异常对象编译不通过.
4.关于异常的处理可以参考毕向东老师的视频
也可以参考fjl_fight同学的:
http://bbs.itheima.com/thread-48712-1-1.html(异常处理[上])
http://bbs.itheima.com/thread-48714-1-1.html(异常处理[上])
http://bbs.itheima.com/thread-48719-1-1.html(异常处理[上])
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |