-
构造方法
构造方法(Constructor),构造器,构造函数类中必定有构造方法,若不写,系统自动添加无参构造方法。
构造器方法的方法名与类名相同
没有返回值,也不能有void。
没有返回值不同于void,构造方法的返回值就是该类本身构造方法可带参数也可不带,带参数可以完成赋值操作
还能完成如检查参数合法性等操作
例
class Rectangle {
private int width, length;
Rectangle(int width,int length){
this.width = width;
this.length = length;
}
//这个Rectangle就是构造方法
int Area() {
return width*length;
}
void printArea(){
System.out.println("area="+Area());
}
}
- 构造方法的调用
调用规则:不能由编程人员显示调用,而用new来调用
作用:在对象被初始化时初始化对象的成员
public class example{
public static void main(String[] args) {
Rectangle r1 = new Rectangle(3,4);
r1.printArea();
}
}
-
构造方法的重载
构造方法重载:形式同普通方法重载,调用形式则不同
作用:重载的构造方法可以构造出不同的对象
class Rectangle {
private int width, length;
Rectangle(int width,int length){
this.width = width;
this.length = length;
}
Rectangle(){
width = 5;
length = 6;
}
int Area() {
return width*length;
}
void printArea(){
System.out.println("area="+Area());
}
}
public class example{
public static void main(String[] args) {
Rectangle r1 = new Rectangle(3,4);
Rectangle r2 = new Rectangle();
//r1和r2就是两个不同的矩形对象
r1.printArea();
}
}
-
默认构造方法
默认构造方法:如果用户没有定义,系统就会提供一个无参的构造方法
class Rectangle {
public int width, length;
//public RectangleP(){};
//系统会自动创建调用这样一个,默认构造方法
int Area() {
return width*length;
}
void printArea(){
System.out.println("area="+Area());
}
}
public class example{
public static void main(String[] args) {
Rectangle r1 = new Rectangle();
r1.printArea();
}
}
默认规则:一旦为某类定义了构造方法,系统就不再提供默认构造方法。
默认构造方法么有形参,没有任何语句,不完成任何操作
若class有public修饰符,则默认构造方法前也是public
public class Hello {
/*public Hello()
{}加入这个就正确*/
Hello(int a)
{
System.out.println(a);
}
public static void main(String[] args) {
Hello h = new Hello();//错误
//因为定义了构造方法,系统就不再提供默认构造方法。
}
}
编程训练
class contrast{
contrast(int a,int b){
if(a>b)
System.out.println(a);
else
System.out.println(b);
}
contrast(float a,float b,float c){
System.out.println(a*b*c);
}
}
public class train {
public static void main(String[] args) {
contrast c1 = new contrast(2,1);
contrast c2 = new contrast(2.1f,3.2f,4.3f);
//要加f不然默认double类型
}
}
注意参数是float类型要加F,不加F默认是double类型,取值范围从大范围(double)向小范围(float)需要强制转换,报错如下: