构造器
Java同C++一样采用构造器(也称构造函数)来确保类的每个对象都会得到初始化。在创建对象的时候,如果类中存在构造器。则Java编译器会在操作对象之前自动调用对应的构造器,来确保初始化可以正常进行。构造器的名字与类名相同,因此构造器不受到“每个方法首字母小写”的编码风格的约束。构造器可以有参数也可以无参数。当一个类中只有一个构造器时,则无法使用除了这个构造器的其他方式创建新的对象。如果需要用多种方式去创建新的对象,需要把构造器重载。当类中没有写构造器的时候,编译器会创建一个默认构造器。默认构造器是没有参数的构造器,是用来创建一个“默认对象”的。
class HelloWorld{
HelloWorld(){
System.out.println("创建一个HelloWorld对象");
}
HelloWorld(String str){
System.out.println("创建一个参数为:" + str + "的HelloWorld对象");
}
}
public class Learn{
public static void main(String[] args){
HelloWorld helloWorld = new HelloWorld();
HelloWorld helloWorld = new HelloWorld("New World");
}
}
class HelloWorld{}
public class Learn{
public static void main(String[] args){
HelloWorld helloWorld = new HelloWorld(); //会创建默认的HelloWorld构造器
}
}
初始化的顺序
普通的Java类中内容的初始化顺序
- 静态变量
- 静态代码块
- 普通变量
- 普通代码块
- 构造函数
public class HelloWorld{
public static String staticStr = "静态变量";
public String str = "普通变量";
static {
System.out.println("静态代码块");
}
{
System.out.println("普通代码块");
}
HelloWorld(){
System.out.println("构造函数");
}
public static void main(String[] args){
new HelloWorld();
}
}
输出信息为
静态代码块
普通代码块
构造函数
Java子类中内容的初始化顺序
- 父类静态变量
- 父类静态代码块
- 子类静态变量
- 子类静态代码块
- 父类普通变量
- 父类普通代码块
- 父类构造函数
- 子类普通变量
- 子类普通代码块
- 子类构造函数
public class Father{
public static String staticStr = "父类静态变量";
public String str = "父类普通变量";
static {
System.out.println("父类静态代码块");
}
{
System.out.println("父类普通代码块");
}
HelloWorld(){
System.out.println("父类构造函数");
}
}
public class Child extends Father{
public static String staticStr = "子类静态变量";
public String str = "子类普通变量";
static {
System.out.println("子类静态代码块");
}
{
System.out.println("子类普通代码块");
}
HelloWorld(){
System.out.println("子类构造函数");
}
public static void main(String[] args){
new Child();
}
}
输出信息为
父类静态代码块
子类静态代码块
父类普通代码块
父类构造函数
子类普通代码块
子类构造函数