在Java中,都有如下程序结构:
public class Sample{
public static void main(String[] args){
System.out.println("Hello");
}
}
关键字public称为“访问修饰符” ,其他访问修饰符话包括private,protected,和defalt。private只能访问同一包中的同一类,defalt可以访问同一包中的不同类,protected可以访问不同包中的子类,public可以访问所有包中的子类和非子类。我们希望类要尽量做到 "封装", 即隐藏内部实现细节, 只暴露出必要的信息给类的调用者。因此我们在使用的时候应该尽可能的使用 比较严格 的访问权限. 例如如果一个方法能用 private, 就尽量不要用 public.
在类和对象的章节,我们学习了类的定义方式,对象的实例化,以及封装特性等等。static称为“静态成员方法(类方法),一般用于初始化静态成员变量。静态代码块不管生成多少个对象,只会执行一次,如果一个类中有多个静态代码块,编译器会按照定义的先后次序依次执行。
如果想要打印一个对象中的属性,可以使用重写toString的方法。
public class Person {
String name;
String gender;
int age;
public Person(String name, String gender, int age) {
this.name = name;
this.gender = gender;
this.age = age;
}
@Override
public String toString() {
return "[" + name + "," + gender + "," + age + "]";
在继承和多态的章节中,我们学习了继承,组合,和多态的方法。继承主要解决的问题是共性的抽取,实现代码复用。执行顺序为:父类的非静态代码块—父类的无参构造函数—子类的非静态代码块—子类构造函数—子类的方法。
此外,我们学习了super和this在构造方法中的使用。super和this都可以在成员方法中用来访问,都是Java中的关键字,只能在类的非静态方法中使用,访问非静态的成员方法和字段,在构造方法中调用时必须时第一条语句。两者的区别为this是当前对象的引用,super是子类对象从父类继承下来部分成员的引用。final关键字为常量,在修饰类的时候表示此类不能被继承。
多态的实现必须建立在继承体系下,这里我们还学习了重写和重载的方法和区别。重写需要注意:参数列表与被重写方法的参数列表必须完全相同;返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同;访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected;声明为 final 的方法不能被重写;声明为 static 的方法不能被重写,但是能够被再次声明。
重载的方法中必须有一个独一无二的参数类型列表,返回类型可以相同也可以不同。重载需要注意:被重载的方法必须改变参数列表(参数个数或类型不一样);被重载的方法可以改变返回类型;被重载的方法可以改变访问修饰符;被重载的方法可以声明新的或更广的检查异常;方法能够在同一个类中或者在一个子类中被重载;无法以返回值类型作为重载函数的区分标准。
在最后一章里,我们学习了异常的处理。异常处理主要的五个关键字为:throw,try, catch, final, throws. 其中,throw可以用来抛出一个指定的异常对象,将错误信息告知给调用者。在捕获异常的时候,主要使用throws异常声明,和try-catch捕获处理。
public class Config {
File file;
// public void OpenConfig(String filename) throws IOException,FileNotFoundException{
// FileNotFoundException 继承自 IOException
public void OpenConfig(String filename) throws IOException{
if(filename.endsWith(".ini")){
throw new IOException("文件不是.ini文件");
}
if(filename.equals("config.ini")){
throw new FileNotFoundException("配置文件名字不对");
}
// 打开文件
}
public void readConfig(){
}
}
如果方法内部抛出了多个异常,throws之后必须跟多个异常类型,用逗号隔开,如果抛出多个异常类型具有父子关系,直接声明父类即可。调用声明抛出异常的方法时,调用者必须对该异常进行处理(将光标放在抛出异常的方法上,alt+Insert键快速处理)。处理完之后,跳出try-catch结构,继续执行后面的代码。finally处的代码一定会被执行到。