助你加薪!2021年春招面向编程看这一篇就够了,让你面试无忧! (9)

例如:

class MyException extends Exception{ // 继承Exception,表示一个自定义异常类 public MyException(String msg){ super(msg) ; // 调用Exception中有一个参数的构造 } } public class Demo{ public static void main(String[] args){ Person person = new Person(); person.setAge(-1); } } class Person{ private int age; public void setAge(int age) throws MyException{ if(age<0 || age>180){ MyException e = new MyException("年龄不合理"); throw e;//此处会飘红,因为属于受检异常,所以必须得抛出异常;不要捕获异常,因为自己生成异常又自己捕获异常,很脑残 }else{ this.age = age; } } }

自定义异常可以做很多事情, 例如:

class MyException extends RuntimeException{ public MyException(String msg){ super(msg) ; //在这里给维护人员发短信或邮件, 告知程序出现了BUG。 } } try-with-resources //jdk1.7之前 public static void main(String[] args){ FileReader fr = null; try{ fr = new FileReader("d://book.txt"); int c = fr.read();//读取一个字节 System.out.prinyln((char)c); } catch(IOException e){ e.printStackTrace(); } finally { try{ fr.close(); } catch (Exception e){ e.printStackTrace(); } } } //jdk1.7时 public static void main(String[] args){ try(FileReader fr = new FileReader("d://book.txt")){//try小括号里的对象必须是实现了AutoCloseable,这样才会自动关闭对象 int c = fr.read();//读取一个字节 System.out.prinyln((char)c); } catch(IOException e){ e.printStackTrace(); } } //jdk9进行了优化 public static void main(String[] args){ FileReader fr = new FileReader("d://book.txt"); PrintWriter pw = new PrintWriter("d://book.txt"); try(fr;pw){//try小括号里可以放置多个对象,对象之间用分号分隔 int c = fr.read();//读取一个字节 System.out.prinyln((char)c); } catch(IOException e){ e.printStackTrace(); } } //自定义实现了Closeable的对象 public static void main(String[] args){ CloseDemo d = new CloseDemo(); try(d){ } catch(Exception e){ } } static class CloseDemo implements Closeable{ @Override public void close() throws IOException{ Sytem.out.println("close方法被调用了"); } }//输出:close方法被调用了 构造方法(构造器)

Person p = new Person();

在右侧Person后面出现的小括号, 其实就是在调用构造方法

作用:

用于对象初始化。

执行时机:

在创建对象时,自动调用

特点:

所有的Java类中都会至少存在一个构造方法

如果一个类中没有明确的编写构造方法, 则编译器会自动生成一个无参的构造方法, 构造方法中没有任何的代

码!

如果自行编写了任意一个构造器, 则编译器不会再自动生成无参的构造方法。

定义的格式 :

与普通方法基本相同, 区别在于: 方法名称必须与类名相同, 没有返回值类型的声明 ;

建议自定义无参构造方法,不要对编译器形成依赖,避免错误发生。

当类中有非常量成员变量时,建议提供两个版本的构造方法,一个是无参构造方法,一个是全属性做参数的构造方法。

当类中所有成员变量都是常量或者没有成员变量时,建议不提供任何版本的构造。

重载(Overload)

方法的重载

方法名称相同, 参数类型或参数长度不同或顺序不同, 可以完成方法的重载 ;

方法的重载与返回值无关;

方法的重载 ,可以让我们在不同的需求下, 通过传递不同的参数调用方法来完成具体的功能。

int sum(int x, int y){ int z = x + y; return z; } double sum(double x, double y){ double z = x + y; return z; }

构造方法的重载

一个类, 可以存在多个构造方法 ;

参数列表的长度或类型不同即可完成构造方法的重载 ;

构造方法的重载 ,可以让我们在不同的创建对象的需求下, 调用不同的方法来完成对象的初始化 ;

重写(Override)

参数列表必须完全与被重写的方法相同;

返回类型必须完全与被重写的返回类型相同;

访问权限不能比父类被重写的方法的访问权限更低。例如父类方法为public,子类就不能为protected;

父类的成员方法只能被它的子类继承;

声明为static和private的方法不能被重写,但是能够被再次声明;

public class Demo{ public static void main(String[] args){ Student student=new Student(); student.say(); } } class Person{ public void say(){ System.out.println("锄禾日当午,汗滴禾下土。"); } } class Student extends Person{ public void say(){ System.out.println("锄禾日当午,玻璃好上霜。要不及时擦,整不好得脏。"); } } //结果为: //锄禾日当午,玻璃好上霜。要不及时擦,整不好得脏。 重写与重载的区别

重写方法名返回值相同参数相同;

重载方法名相同返回值相同参数可以不同,个数可以不同;

重写发生在父子类中,重载发生在一个类中;

重载与访问权限无关 ;

异常处理:重载与异常无关 ; 重写异常范围可以更小,但是不能抛出新的异常 ;

Java两种核心机制

Java 虚拟机(Java Virtual Machine) JVM

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgwzyj.html