-
默认字段初始化
如果在构造器中没有显示的为字段设置初始值,那么就会被自动赋值为默认值:
整数:默认值0
浮点数:默认值0
布尔值:默认值为flase
字符:默认为空字符
引用数据类型:默认值为null(所有的引用数据类型都可以赋值null,但这表示什么都没有)
注意:方法中的局部变量必须明确地初始化!!
-
显式字段初始化
通过重载类的构造器方法,可以采用多种形式设置类的实例字段的初始状态。
-
初始化块
java的第三种机制,称为初始化块,在一个类的声明中,可以包含任意多个代码块。只要构造这个类的对象,这些块就会被执行。 对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器 。所有的静态字段初始化方法以及静态初始化块都将按照类声明中出现的顺序执行。
-
构造器
-
无参构造器:如果在写一个类时没有编写构造器,就会提供一个无参构造器,这个构造器将所有的实例字段都设置为默认值。
-
带参构造器:如果自己已经写了一个带参的构造器,那么系统将不再提供空参构造器,这个构造器将会显式的将类中的字段设置一个初始值。
-
重写与重载的区别
-
重写
重写方法的规则:
-
参数列表与被重写的方法的参数列表必须相同。
-
返回类型与被重写的方法返回类型可以不相同,但是必须是父类返回值的派生类(即返回值类型小于等于父类被重写的方法返回值类型)。
-
访问权限不能比父类中被重写的访问权限低(即:访问权限要大于等于父类)。
-
父类的成员方法只能被子类重写。
-
声明为final的方法不能被重写。
-
声明为static的方法不能被重写,但是能够被再次声明。
-
子类和父类在同一个包中,那么子类可以重写父类所有的方法,除了声明为private和final的方法。
-
子类和父类不在同一个包中,那么子类只能够重写父类声明为public和protected的非final方法。
-
重写的方法所抛出的异常类型必须小于等于被重写的方法抛出的异常类型。
-
构造方法不能被重写。
import java.io.IOException; public class Test{ public static void main(String[] args) { Student student = new Student(); try { student.desc(); } catch (Exception e) { e.printStackTrace(); } } } class PeoPle{ String name; int age; public PeoPle desc() throws Exception{ System.out.println("我的名字" + name + "年龄:" + age ); return null; } public int show(){ System.out.println("dw"); return 1; } } class Student extends PeoPle{ public PeoPle desc() throws Exception { System.out.println("Dwdw"); return null; } //都可以 // public PeoPle desc(){ // System.out.println("hehhe"); // return null; // } // public Student desc(){ // System.out.println("dwd"); // return null; // } //对于无返回值和基本数据类型,返回值必须与父类方法保持一致 //可以 // public int show(){ // System.out.println("Dwd"); // return 1; // } // public void show(){ // System.out.println("dw"); // // } }
-
重载
定义:重载是在一个类里面,方法名字相同,而参数不同,返回值类型可以相同也可以不同,每个重载的方法或构造函数必须有一个独一无二的参数类型列表。
重载规则:
-
被重载的方法参数个数或参数类型不一样
-
被重载的方法可以改变返回值类型
-
被重载的方法可以改变访问权限
-
被重载的方法可以声明新的或更广的检查异常
-
方法能够在同一个类中或者在一个子类中被重载
-
无法以返回值类型作为重载函数的区分标准
public class Test{ public static void main(String[] args) { } } class PeoPle{ String name; int age; public void desc() throws Exception{ System.out.println("名字:" + name + "年龄:" + age); } public void desc(int age) throws IndexOutOfBoundsException{ System.out.println("名字:" + name + "年龄:" + age); } public void desc(String name,int age){ System.out.println("名字:" + name + "年龄:" + age); } public int desc(String name,int age,String address){ System.out.println("名字:" + name + "年龄:" + age); return 1; } //此时访问权限为default String desc(String name,int age,int value){ return name; } public void desc(int age,String name){ System.out.println("名字:" + name + "年龄:" + age); } //以下方法不是重载 // public void desc(int s,String n){ // System.out.println("名字:" + n + "年龄:" + s); // } // public int desc(){ // System.out.println("名字:" + name + "年龄:" + age); // } }
总结:
区别点 重载方法 重写方法 参数列表 必须修改 一定不能修改 返回类型 可以修改 一定不能修改 异常 可以修改 可以减少或删除,一定不能抛出新的或者更广的异常 访问 可以修改 一定不能做更严格的限制(可以降低限制) -