Java类中的构造方法

匿名 (未验证) 提交于 2019-12-02 20:56:53

Java类中的构造方法

如果一个对象在被创建时就完成了所有的初始化工作,将会很简洁。因此Java语言在类中提供了一个特殊的成员方法――构造方法。

构造方法的作用与定义

构造方法是在对象被创建时初始化对象的成员的方法。构造方法的名称必须与它所在的类名完全相同。构造方法没有返回值,不能用修饰符viod来修饰。

例1:利用构造方法来初始化圆柱体类Cylinder的成员变量。

 

程序运行结果为:
圆柱底面积= 38.465
圆柱体体积= 307.72

注意:对于“public void Cylinder(double r, int h)”这样的写法就不再是构造方法,而是变成了普通方法,所有在定义构造方法时若加了“void”修饰符,则这个方法就不再被自动调用了。一个类的构造方法的返回值类型就是该类本身。

构造方法的特殊性:
(1)构造方法的方法名与类名相同。
(2)构造方法没有返回值,但不能写void。
(3)构造方法的主要作用是完成对类对象的初始化工作。
(4)构造方法一般不能由编程人员显示地直接调用,而是用new来调用。
(5)在创建一个类的对象的同时,系统会自动调用该类的构造方法为新对象初始化。

默认的构造方法

类名(){};
如果class前面有public修饰符,则默认的构造方法前面也会是public的。
注意:若在一个类中只定义了有参数的构造方法,但却调用无参数的构造方法创建对象,则编译不能通过。例如,若将例1的第25行改为“Cylinder volu=new Cylinder();”则编译时报错。

构造方法的重载

一般情况下,类都有一个或多个构造方法。但由于构造方法同名,所有当一个类有多个构造方法时,则这多个构造方法可以重载。
重载:方法之间个数不同或是参水的类型不同。
例2:

{     private double radius;     private int height;     private double pi = 3.14;     String color;     public Cylinder()     {         radius=1;         height=2;         color="绿色";     }     public Cylinder(double r,int h,String str)     {         radius=r;         height=h;         color=str;     }     public void setColor()     {         System.out.println("该圆柱的颜色为:"+color);     }     double area()     {         return pi * radius * radius;     }     double volume()     {         return area() * height;     } } public class App7_5 {     public static void main(String[] args)     {         Cylinder volu1= new Cylinder();         System.out.println("圆柱1底面积="+ volu1.area());         System.ou.println("圆柱1体积="+volu1.volume());         volu1.setcolor();         Cylinder volu2= new Cylinder(2.5,8,"红色");         System.out.println("圆柱2底面积="+volu2.area());         System.out.println("圆柱体2体积="+volu2.volume());         volu2.setcolor();     } } 

程序运行结果为:
圆柱1底面积= 3.14
圆柱1体积= 6.28
该圆柱的颜色为: 绿色
圆柱体2底面积= 19.625
圆柱2体积= 157.0
该圆柱的颜色为:红色

从一个构造方法调用另一个构造方法

优点:缩短程序代码,减少开发程序时间。通过使用this()语句来调用。
例3:

{     private double radius;     private int height;     private double pi= 3.14;     String color;     public Cyclinder()     {         this(2.5,5,"红色");         System.out.println("无参构造方法被调用了");     }     public Cylinder(double r,int h,String str)     {         System.out.println("有参构造方法被调用了");         radius= r;         height= h;         color= str;     }     public void show()     {         System.out.println("圆柱底半径为:"+ radius);         System.out.println("圆柱体的高为:"+ height);         System.out.println("圆柱的颜色:"+ color);     }     double area()     {         return pi * radius * radius;     }     double volume()     {         return area() * height;     } } public class App7_6 {     public static void main(String[] args)     {         Cylinder volu= new Cylinder();         System.out.println("圆柱底面积="+volu.area());         System.out.println("圆柱体体积="+volu.volume());         volu.show();     } } 

程序运行结果为:
有参构造方法被调用了
无参构造方法被调用了
圆柱底面积= 19.625
圆柱底半径= 98.125
圆柱底半径为:2.5
圆柱体的高为:5
圆柱的颜色为:红色

注意:
(1)在某一构造方法中调用另一构造方法时,必须使用this关键字来调用,否则编译时将出现错误。
(2)this关键字必须写在构造内的第一行位置。

公共构造方法与私有构造方法

构造方法一般都是公有的。如果构造方法被声明为private,则无法在该构造方法所在的类以外的地方被调用,但在该类的内部还是可以被调用的。
例4:

{     private double radius;     private int height;     private double pi= 3.14;     String color;     private Cylinder()     {         System.out.println("无参构造方法被调用了");     }     public Cylinder(double r,int h,String str)     {         this();         radius= r;         height= h;         color= str;     }     public void show()     {         System.out.println("圆柱底半径为:"+ radius);         System.out.println("圆柱体的高为:"+height);         System.out.println("圆柱的颜色为:"+color);     }     double area()     {         return pi * radius *radius;     }     double volume()     {         return area() *height;     } } public class App7_7 {     public static void main(String[] args)     {         Cylinder volu= new Cylinder(2.5,5,"蓝色");         System.out.println("圆柱底面积="+ volu.area());         System.out.println("圆柱体体积="+volu.volume());         volu.show();     } } 

用处:保护私有数据;
私有的无参构造方法Cylinder()与公有的带参的构造方法Cylinder(double r,int h, String str)是在同一类中,而在同一类中是可以访问私有成员的。要用this()调用私有的构造方法。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!