1、构造方法(constructor)
含义:
构造方法(也叫构造器),用于对象的初始化;是一个创建对象时被自动调用的特殊方法,目的是对象的初始化。构造方法的名称应与类的名称一致。Java通过new关键字来
调用构造器,从而返回该类的实例,是一种特殊的方法。当然也可以重载。
格式: // 1. 通过new关键字调用 2、构造方法的方法名必须和类名一致!
[修饰符] 类名 (形参){ // 3. 构造方法虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能在构造方法里使用return返回某个值。
语句; // 4. 如果没有定义构造方法,则编译器会自动定义一个无参的构造函数。如果应经定义则编译器不会自动添加!
}
代码示例:
1 class Point //构造方法(也叫构造器) 2 { 3 double x,y; 4 public Point(double _x,double _y) //构造方法(一种特殊的方法) 原则:1、方法名与类名相同 5 { // 2、不能定义返回值类型,即public int Point或return X;是错误的(虽然这个方法可以给你返回1个值).单独写return是对的 6 x=_x; // 但是没有必要,此时return 表示结束方法的运行(作用之一,注:另一个作用是返回一个值) 7 y=_y; 8 } 9 10 public double getDistance(Point z) //普通方法 11 { //这里的z是个Point类型(类似于int型 double型的数据类型)的形参,意味着是它具有x,y这2个属性可以操作 12 return Math.sqrt( (x-z.x)*(x-z.x)+(y-z.y)*(y-z.y) ); 13 } 14 } 15 16 17 18 public class Test_1125_01 //构造方法与普通方法的区别:1、构造方法在实例化对象(new)时只调用1次 2、普通方法是在实例化对象产 19 //生之后,通过对象.方法调用多次。 20 { 21 public static void main(String[] args) 22 { 23 Point p=new Point (3.0,4.0); //构造方法 通过这步 完成了实例化对象,并操作了对象p属性 使对象p属性为 x=3.0 y=4.0 24 //可以看出:构造方法的主要作用是 【对象的初始化操作】 即若希望对象实例化的同时给其赋值,则可以使用构造方法 25 26 Point origin= new Point(0.0,0.0); 27 28 System.out.println(p.getDistance(origin)); //此时对象origin经过初始化之后 x已经=0.0 y已经=0.0 29 //对象p调用getDistance方法, 实参origin送到形参z处,输出结果 30 31 32 } 33 }
2、构造方法的重载(与普通方法没有什么区别)
【代码示例】
1 class User 2 { 3 int id; //成员变量id name pwd 4 String name; 5 String pwd; //构造方法的重载演示 6 public User(){ //无参数的构造方法 7 8 } 9 public User(int id,String name){ //局部变量 id 和name(与成员变量名字相同,需加 this 关键字,this表示创建好的对象) 10 super(); //构造方法第1句总是super(),即使不写,编译器自动添加并执行这一句 11 this.id=id; //此处的this.id 是指成员变量 id(不是最近的局部变量 id),如果不加this根据就近原则指的是局部变量 id 12 this.name=name; 13 14 } 15 16 public User(int id,String name,String pwd){ 17 //super(); 18 this.id=id; 19 this.name=name; 20 this.pwd=pwd; 21 } 22 23 } 24 25 26 public class Test_1125_02 27 { 28 public static void main(String[] args) 29 { 30 User u1=new User(); 31 User u2=new User(101 ,"李白"); 32 User u3=new User(102,"杜甫","123456"); 33 34 System.out.println(" 编号:"+u2.id+"\t"+"姓名:"+u2.name); 35 System.out.println(" 编号:"+u3.id+"\t"+"姓名:"+u3.name+"\t"+"密码:"+u3.pwd); 36 37 } 38 }