Java类中的构造方法

Java类中的构造方法

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

构造方法的作用与定义

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

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

class Cylinder
{
    private double radous;
    private int height;
    private double pi = 3.14;
    public Cylinder(double r,int h)
    {
        radius =r;
        height =h;
    }
    double area()
    {
        return pi * radius * radius;
    }
    double volume()
    {
        return area() * height;
    }
    
}
public class Cylinder
{
  public stadic void main(String[] args)
  {
    Cylinder volu=new Cylinder(3.5,8);
    System.out.println("圆柱底面积="+ volu.area());
    System.out.println("圆柱体体积="+ volu.volume());
  }
}

程序运行结果为:
圆柱底面积= 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
圆柱的颜色为:红色

扫描二维码关注公众号,回复: 4109747 查看本文章

注意:
(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()调用私有的构造方法。

猜你喜欢

转载自blog.csdn.net/qq_41789461/article/details/84166608