简单记录一下Java的部分构造方法(〃′o`)。
构造方法的特点
Java中的构造方法,也被称作构造函数,可分为无参构造方法和有参构造方法,一般用来初始化成员属性和成员方法。当对象被实例化后,构造方法就给对象初始化,且一个对象被实例化后,构造方法只被调用一次,而一般的方法可被该对象多次调用。
- 构造方法名与类名相同;
- 构造方法不需要定义返回值类型,也不能包含有
return
语句;
- 一般方法不能调用构造方法,只有构造方法才能调用构造方法;
- 类中必有构造方法,若源文件中没有指定任何构造函数,Java编译器提供一个无参构造方法;
- 构造方法不能被
static
、final
、synchronized
、abstract
和native
修饰;
- 构造方法可以被重载;
- 构造方法在初始化对象时自动执行,一般不能直接调用;
- 当同一个类中存在多种构造方法时,编译器自动根据参数列表一一对应来调用构造方法。
举个栗子
类中只定义一个无参构造方法;构造方法总伴随着对象的实例化一起被调用。
class Person { Person() { System.out.println("Hello,world!"); } } public class Person0 { public static void main(String[] args) { Person P=new Person(); } }
|
有参构造方法,在实例化对象时,将实参传递给成员变量。
class Person { String name; int age; Person(String x,int y) { name=x; age=y; System.out.println("name: "+name); System.out.println("age: "+age); } } public class Person1 { public static void main(String[] args) { Person P=new Person("NIMITIZ",18); } }
|
一个对象建立后,构造方法只被调用一次;如果需要给对象再赋新值,就需要使用set
和get
方法。
class Person { String name; int age; Person(String x,int y) { name=x; age=y; System.out.println("name: "+name); System.out.println("age: "+age); } public void setName(String m) { name=m; } public String getName() { return name; } } public class Person2 { public static void main(String[] args) { Person P=new Person("NIMITIZ",18); P.setName("NIMITIZ_FBH"); System.out.println(P.getName()); P.setName("FBH_NIMITIZ"); System.out.println(P.getName()); } }
|
name: NIMITIZ age: 18 NIMITIZ_FBH FBH_NIMITIZ
|
构造方法也是方法的一种,也具备方法的重载特性。
class Person { String name; int age; Person() { System.out.println("A: name: "+name); System.out.println(" age: "+age); } Person(String name,int age) { System.out.println("B: name: "+name); System.out.println(" age: "+age); } Person(int age,String name) { System.out.println("C: age: "+age); System.out.println(" name: "+name); } } public class Person3 { public static void main(String[] args) { Person P1=new Person(); Person P2=new Person("NIMITIZ",18); Person P3=new Person(18,"NIMITIZ"); } }
|
A: name: null age: 0 B: name: NIMITIZ age: 18 C: age: 18 name: NIMITIZ
|
子类不会继承父类的构造方法,只是必须显式或隐式地调用。
class Person0 { Person0() { System.out.println("NIMITIZ"); } Person0(int age) { System.out.println(age); } } class Person1 extends Person0 { public Person1() {} public Person1(int x) { System.out.println(18); } } public class Person4 { public static void main(String[] args) { Person1 P1=new Person1(19); } }
|
class Person0 { Person0() { System.out.println("NIMITIZ"); } Person0(int age) { System.out.println(age); } } class Person1 extends Person0 { public Person1() {} public Person1(int x) { super(19); System.out.println(18); } } public class Person4 { public static void main(String[] args) { Person1 P1=new Person1(19); } }
|
- 如果父类没有无参构造方法,创建子类时必须在子类有参构造方法的第一行显式调用父类的有参构造方法;
- 如果父类没有有参构造方法,那么在创建子类时可以不显式调用父类的构造方法,这时会默认调用父类的无参构造方法
super()
;
Java构造方法与一般方法的区别
构造方法 |
一般方法 |
构造方法用于初始化对象的成员属性和成员方法 |
一般方法用于表示对象的行为 |
构造方法不能拥有返回类型 |
一般方法一般拥有返回类型 |
构造方法隐式调用 |
一般方法显式调用 |
如果没有指定任何构造方法,Java编译器提供一个无参构造方法 |
在任何情况下Java编译器都不提供默认的一般方法调用 |
构造方法名必须与类名相同 |
一般方法名可以不与类名相同 |
整理自
JAVA构造函数(方法)
Java中的构造方法
java学习—构造器(构造方法)
java中继承,子类是否继承父类的构造函数