构造方法(constructor)

1.语法:
public class StudentDomain extends BaseDomain{
    
    public int id;
    
    public StudentDomain() {
        //构造方法
    }
}
2.特点:

​ 1.方法名和类名高度一致

​ 2.无返回类型修饰

​ 3.不能被方法显示调用,只能通过new关键字去调用(执行构造方法就new构造方法)

​ 4.可以使用return关键字

​ 5.可以使用public,protected,private,默认default修饰(私有化后的构造方法只能在本类new对象)

​ 6.不可以被静态化(不能被static修饰)

​ 7.可以有多个参数

​ 8.可以重载

​ 9.不可以被继承

​ 10.可以构建对象(构造方法和new关键字搭配使用,构建一个新的对象)

​ 11.系统会默认一个空构造方法(无参构造方法)。如果手动添加构造方法,系统就不会默认空构造方法。

2.调用

​ 1.构造方法中可以调用本类中的另一个构造方法,调用方式为this(构造方法参数),但this语句必须放在程序代码的第一行,但如果this不是调用构造方法而是调用方法或属性,this语句就可以随意放哪行

​ 2.在new一个对象时,从这个类开始直到Object,默认是查找空构造方法,如果其中一个类缺少空构造,那编译不通过,执行是从最父类往最子类执行,如果父类没有空构造方法,而我们又想编译通过,那么我们在子类中可以调父类的指定参数的构造方法,格式super(构造方法参数),super在调用构造方法时必须放在程序代码的第一行,如果父类中缺少空构造,那么子类中不管有多少个构造方法,都要实现能去调用父类非空构造方法

​ 3.super还可以调用父类的属性和方法,调用属性和方法时可以放在程序代码任意一行

​ 4.本类调用this(形参列表);父类调用super(形参列表)

​ 5.注意:

​ 1.构造调用只能放在构造方法里,不能出现在普通方法里

​ 2.当一个构造方法里的第一行没有this或super的时候;jvm会默认提供一个空的super()调用

​ 3.当我们的构造方法已经有了一个构造调用;jvm不会提供super();

​ 4.构造方法的第一行必须是构造调用不是this()就是super()

​ 6.如果一个类中,没有定义构造方法,那么jvm会自动生成一个无参构造方法(空构造方法),如果类中有自定义非空构造方法,那么 jvm不会创建空构造方法,一般我们在自定义类时,应手动给这个类加一个空构造方法.

3.次序:

​ 构造方法的调用次序:从子类调用到父类

​ 执行次序:从父类到子类

​ 3.属性的内存分配次序:从父类到子类

4.区别:
1.普通方法和构造方法的区别:

​ 1.普通方法用于定义对象应该具备的功能;构造方法定义对象初始化的功能

​ 2.构造方法在对象建立的时候有jvm调用;普通方法实在对象建立之后,由对象自己调用

​ 3.普通方法可以多次调用;而构造函数只能new的时候调用一次

​ 4.普通方法可以返回值;构造方法返回对象本身

2.构造方法和构造代码块的区别:

​ 1.构造代码块可以给所有的对象初始化作统一处理;而构造函数只给对应的对象初始化

5. 为什么要使用构造方法:
	为了给属性赋初始值,这就是所谓的初始化操作
6.构造方法的作用:

​ 给属性赋初始值,初始化操作

7.执行时机:

​ 创建对象时调用,则为new构造方法();

8.单例模式:
public class Student{
    private static Student stu=null;
    private String name;
    private int age;
    
    private Student(){//将构造函数私有化,不让在其它类中创建对象
        System.out.println("。。。。。。。。。。。");
    }
    
    public static Student getStudent(){//构造函数私有化后,会提供一个公共的接口,那么其它类就可以通过这个方法来访问这个类
        if(stu==null){
            stu=new Student();
        }
        return stu;
    }
    
    public String getName() {
		return name;
	}


	public void setName(String name) {
		this.name = name;
	}


	public int getAge() {
		return age;
	}


	public void setAge(int age) {
		this.age = age;
	}
    
    public void sayHi(){
        System.out.println("姓名:"+name+"年龄:"+age);
    }
}

public class Main(){
    
    public static void main(String[] args){
        Student stu1=Student.getStudent();
        stu1.setName("张三");
        stu1.setAge(20);
        stu1.sayHi();
        
        Student stu2=Student.getStudent();
        stu2.setName("张三");
        stu2.setAge(20);
        stu2.sayHi();
        
        共用同一个对象地址
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值