Java构造方法
Posted 重黎
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java构造方法相关的知识,希望对你有一定的参考价值。
构造方法的特征:
• 具有与类相同的名称
• 不能含有返回值类型,也不能是void的
• 不能在方法中用return语句返回一个值
• 在实例化时,它会由系统自动调动(类是对象的抽象,对象是类的实例化)
• 若编写代码时,类中没有编写构造方法,系统会自动生成一个构造方法
构造方法的定义:
构造方法是Java创建的伪方法,是一种实例方法,名称与其类名相同,是通过new关键字来调用。
构造方法的执行顺序:
在创建对象时,对象所在类的所有属性会首先进行初始化,在类的所有成员初始化完成后,才调用对象所在类的构造方法创建对象,构造方法的功能就是初始化。
e.g
1 public class Circle { 2 double radius=1.0; 3 Circle(){} 4 Circle(double radius){ 5 this.radius=radius; 6 } 7 void getRadius(){ 8 System.out.println(radius); 9 } 10 double getArea(){ 11 return radius*radius*3.14; 12 } 13 double getPerimeter(){ 14 return 2*3.14*radius; 15 } 16 }
其中第3,4行的方法就是构造方法。
构造方法的调用:
e.g
1 class SuperClass{ 2 SuperClass(){ 3 System.out.println("SuperClass的构造方法");}} 4 5 public class SubClass extends SuperClass{ 6 SubClass(){ 7 System.out.println("SubClass的构造方法");}} 8 9 public static void main(String[] args){ 10 SubClass sub =new SubClass();}}
其运行结果为:
注意:在子类中只实例化了一个子类对象。从输出结果来看,程序并不是一开始就运行自己的构造方法,而是先运行其父类的默认构造方法。故而,程序自动调用其父类的默认构造方法。
e.g
1 class One{ 2 One(String str){ 3 System.out.println(str);}} 4 5 6 class Two{ 7 One one1=new One("one-1"); 8 One one2=new One("one-2"); 9 One one3=new One("one-3"); 10 Two(String str){ 11 System.out.println(str);}} 12 13 public class test{ 14 public static void main(String[] srgs){ 15 Two two=new Two("two");}}
其运行结果为:
在main()方法中实例化了一个Two类的对象。但程序在初始化Two类的对象时,并非先调用Two类的构造方法,而是先初始化Two类的成员变量。这里Two类有3个成员变量,它们都是One类的对象,
所以要先调用3次One类的相应的构造方法。最后再初始化Two类的对象。
构造方法的重载
• 一个类的构造方法可以有多个,允许重载
• 每个类至少有一个构造方法,如果用户没有定义,系统自动产生一个默认构造方法,没有参数,也没有方法体。
• 用户可以定义构造方法,如果定义了构造方法,则系统不再提供默认构造方法。
• 构造方法一般是public,不可以定义为private。
关于构造方法重载的一个案例:
1 class Person{ 2 private String name="unknown"; 3 private int age=1; 4 public Person(){ 5 System.out.println("constructor1 is calling");} 6 public Person(String s){ 7 name=s; 8 System.out.println("constructor2 is calling"); 9 System.out.println("name is"+name);} 10 public Person(String s,int i){ 11 name=s; 12 age=i; 13 System.out.println("constructor3 is calling"); 14 System.out.println("name&age is"+name+age);} 15 public void shout(){ 16 System.out.println("Please see above!");} 17 } 18 19 class TestPerson{ 20 public static void main(String[] args){ 21 Person p1=new Person(); 22 p1.shout(); 23 Person p2=new Person("Jack"); 24 p2.shout(); 25 Person p3=new Person("Tom",9); 26 p3.shout();}}
其运行结果为:
以上是关于Java构造方法的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 中创建构造函数的代码片段或快捷方式
无法解析片段中的 ViewModelProvider 构造?
Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段
Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段