1. 构造方法的定义
由Cylinder类所创建的对象,其
成员变量
都是在
对象建立之后,再由相应的方法来赋值
。如果一个
对象在被创建时
就
完成了所有的初始化工作
,将会很简洁。因此,Java语言在类里提供了一个特殊的成员方法——构造方法
这句话的意思就是说,构造方法地是一种在类的对象被实例化时就执行的方法,而不需要实例化之后在调用对象的方法对成员变量进行操作。这样的操作节约了时间。
构造方法(constructor)是一种特殊的方法,它是在对象被创建时初始化对象成员的方法
2. 构造方法特点
-
方法的
名称
必须与
类名
完全相同 - 没有返回值
- 不能用void修饰
-
实例化对象时要传入构造方法的形参值
类的构造方法的
返回值类型就是该类本身
。构造方法定义后,
创建对象时就会自动调用它
,因此构造方法不需要在程序中直接调用,而是在对象创建时自动调用并执行。这一点不同于一般的方法,一般的方法在用到时才调用。
被调用类(有参数的情况)
class Cylinder {
private double radius;
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 height * area();
}
}
主类
public static void main(String[] args) {
Cylinder c = new Cylinder(3.5, 8); 传入参数
System.out.println(c.area());
System.out.println(c.volume());
}
3. 构造方法重载(有参和无参的情况)
构造方法如果不自己定义的话,java会默认一个无参无方法体的构造方法,所以实例化对象时,new后面的类()中不需要传参;
当自己定义了构造函数之后,就相当于覆盖了默认的构造方法。所以重载构造方法,一个有参数,一个无参数,则增加了编程的灵活性。
被调用类
class Cylinder {
private double radius;
private int height;
private double pi = 3.14;
String color;
public Cylinder(double r,int h,String str){//有参构造函数
color=str;
radius=r;
height=h;
}
public Cylinder()//无参构造函数
{
radius=1;
height=2;
color="红色";
}
public void SetColor()
{
System.out.println("圆柱体的颜色="+color);
}
double area() {
return pi * radius * radius;
}
double volume() {
return height * area();
}
}
主类
public static void main(String[] args) {
//有参数
Cylinder c = new Cylinder(3.5, 8, "绿色");
System.out.println(c.area());
System.out.println(c.volume());
c.SetColor();
//无参数
Cylinder c2 = new Cylinder();
System.out.println(c2.area());
System.out.println(c2.volume());
c2.SetColor();
}
4.从一个构造方法内调用另一个构造方法
利用这个方法,可缩短程序代码,减少开发程序时间。 从某一个构造方法内调用另一构造方法,是通过使用this()语句来调用的。
this()语句必须写在构造方法内的第一行位置
这种方法,还是在类中重载了构造方法,并定义了有参和无参两种。但是,区别在于先在无参构造方法里用 this()方法调用了有参构造方法。这样就使得实例化对象不传参时,自动调用无参构造方法,然后无参构造方法调用有参构造方法,形成这样一种调用逻辑:
主类->调用类->无参构造方法->有参构造方法
;
5.公共的构造方法与私有的构造方法
如果构造方法被声明为private,则无法在该构造方法所在的类以外的地方被调用,但在该类的内部还是可以被调用的。
主类
public static void main(String[] args) {
//有参数
Cylinder c2 = new Cylinder(1,2,"绿色"); 调用有参构造方法
System.out.println(c2.area());
System.out.println(c2.volume());
c2.SetColor();
}
调用类
class Cylinder {
private double radius;
private int height; 主类调用Cylinder类中有参构造方法
private double pi = 3.14;
String color;
public Cylinder(double r,int h,String str){//有参构造函数
this(); 有参构造方法调用无参构造方法
color=str;
radius=r;
height=h; 实现了外部类调用内部私有方法的操作
System.out.println("有参构造方法被调用了");
}
private Cylinder()//无参构造函数
{
System.out.println("无参构造方法被调用了");
}
public void SetColor()
{
System.out.println("圆柱体的颜色="+color);
}
double area() {
return pi * radius * radius;
}
double volume() {
return height * area();
}
}