构造方法:实现在实例化之后为属性赋值;
构造方法是类的一个特殊成员,在类实例化后被自动调用。
(一)构造方法的定义
一,构造方法满足以下三个条件:
- 方法名与类名相同;
- 在方法名前没有返回值类型的说明;
- 在方法中不能使用return语句返回一个值,但是可以单独写return语句作为方法的结束。
二,关于构造方法的使用:
- 若没有定义构造方法,系统会自动提供一个默认的构造方法。
- 若是定义了构造方法,则以定义的构造方法为准。
- 构造方法的调用和对象内存分配几乎是同步完成的,因此我们可以利用构造方法来为类中的属性进行初始化操作。
- 类中组成:属性,构造方法,方法
· 属性是在对象开辟堆内存时开辟的空间 ;
· 构造方法是在使用new后调用的;
· 普通方法是在空间开辟了、构造方法执行之后可以多次调用的。 - 构造方法一般使用public修饰
系统自动创建的默认构造方法形式:
//默认的构造方法中没有参数,常用形式为以下形式
public 类名(){
}
自己定义的构造方法形式:
public 类名(参数类型 参数,参数类型 参数...){
}
具体代码为:
class Person2{
//方法,此处先使用公共属性
public String name;
public int age;
//构造方法
public Person1(String n,int i){
name = n;
age = i;
}
//方法
public void intriduce(){
System.out.println("姓名:"+name+",年龄:"+age);
}
}
举一个完整例子:
class Person2{
//属性——private封装
private String name;
private int age;
//对属性的 setter设置 和 getter获取
public void setName(String n){
name = n;
}
public String getName(){
return name;
}
public void setAge(int a){
if(age < 0 || age >= 150){
System.out.println("输入错误!");
}
else{
age = a;
}
}
public int getAge(){
return age;
}
//构造方法
public Person2(String n,int a){
name = n;
setAge(a);
}
//方法
public void intriduce(){
System.out.println("姓名:"+name+",年龄:"+age);
}
}
public class Test3{
public static void main(String[] args){
Person2 sg = new Person2("kelly",21);
//使用了new之后调用构造方法,即赋值
sg.intriduce();
}
}
运行结果如下:
(二)构造方法的重载
1, 在一个类中可以定义多个构造方法,只要每个构造方法的参数类型或参数个数不同即可。
2,通过不同的构造方法来为不同属性赋值。
· 若干构造方法,最好按照参数个数升序或降序。
对上个例子进行修改:
class Person2{
//方法——private封装
private String name;
private int age;
//setter设置 和 getter获取
public void setName(String n){
name = n;
}
public String getName(){
return name;
}
public void setAge(int a){
if(age < 0 || age >= 150){
System.out.println("输入错误!");
}
else{
age = a;
}
}
public int getAge(){
return age;
}
//构造方法1,只有一个参数
public Person2(String n){
name = n;
}
//构造方法2,两个参数
public Person2(String n,int a){
name = n;
setAge(a);
}
//方法
public void intriduce(){
System.out.println("姓名:"+name+",年龄:"+age);
}
}
public class Test3{
public static void main(String[] args){
Person2 sg1 = new Person2("kelly",21);
//调用构造方法2
Person2 sg2 = new Person2("张三");
//调用构造方法2
sg1.intriduce();
sg2.intriduce();
}
}
运行结果如下: