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();
共用同一个对象地址
}
}