java类的执行顺序过程:
1 静态的属性成员初始化(类属性, 不管这个类创建了多少个对象,所有的对象共用这个成员变量)
2 static区域的代码
3 main函数代码
//在main函数里创建对象时才会有4, 5步
4 类属性成员初始化
5 构造函数
测试代码:
public class Main {
public static int num = 88;
public int num2 = 789;
static {
System.out.println("in static zone: num " + num);
}
public Main() {
System.out.println("num2 = " + num2);
}
public static void main (String args[]) {
System.out.println("num = " + num);
Main m = new Main();
}
}
输出结果:
in static zone: num 88
num = 88
num2 = 789
java代码里的异常处理:
try {
有可能会发生异常的代码
}catch (异常类型 ) {
异常处理的代码
}finally {
一定要执行的代码
}
//当使用java里封装好的类时,如类里会有抛出(throw)异常的可能时,我们就需要用”try … catch …”的方式来包含有可能抛出异常的代码。也可以不用”try …catch”方式来处理,只要在函数声明会抛出异常,由调用此函数者来处理异常.
在java里也可以从Exception类扩展出一个自定义的异常类, 如:
class MyException extends Exception {
private static final long serialVersionUID = 3461899582505930473L; //自动产生一个序列号,用于区分异常的类型
private String error; //存放异常信息字符串
public MyException(String st) { //构造函数,用于指定此异常类型的字符串信息
error = st;
}
public String toString() { //当用System.out.println(对象)调用时,输出异常信息字符串内容
return error;
}
}
//自定义的异常类在代码里的使用.
class Student {
public void eat(String food) throws MyException { //声明此函数有可能会抛出异常
if (food == "fish") { //当调用此eat(...)函数时,如传入的字符串内容为"fish"时就抛出异常
//System.out.println("no fish");
throw new MyException("raw fish");
}
System.out.println("food " + food);
}
}
public class Main {
public static void main(String[] args) {
Student s = new Student();
//异常处理
try {
s.eat("fish");
} catch (MyException e) {
System.out.println(e);
}
}
}