Java构造函数
1、Java构造方法定义
Java中的构造方法是一种特殊的方法,用于初始化对象。Java构造函数在对象创建时被调用。它构造值,即提供对象的数据。与函数名相同,无返回值。
2、作用
一般用来初始化成员属性和方法的,即new对象产生后,就调用了对象的属性和方法。
3、创建Java构造函数的规则
创建函数基本上定义了两个规则。分别如下:
- 1、构造函数必须与其类名称相同
 - 2、构造函数必须没有显式返回类型
 
4、构造函数与普通函数的区别
- 1、构造函数式对象一建立就运行,给对象初始化,就包括属性,执行方法中的语句,一般函数是对象调用才执行,用“.方法名“的方式,给对象添加功能
 - 2、一个对象建立,构造函数值运行一次,一般函数就可以被该对象调用多次
 
/**
* 构造函数
*/
public class Person {
    String name; //姓名
    int age; //年龄
    // 一个无参数的构造函数
    Person(){
    }
    Person(String name,int age){
        this.name = name;
        this.age = age;
    }
    public void setName(String name){
        this.name = name;
    }
    public static void main(String[] args) {
        //调用的有参构造函数
        Person p = new Person("张三",14);
        p.setName("王五");
        System.out.println("姓名:" + p.name + "  年龄:" + p.age);
        Person person = new Person();
        person.name = "李四";
        person.age = 15;
        System.out.println(person.name + "  " + person.age);
    }
}
5、Java构造函数类型
有两种类型的构造函数
- 默认构造函数(无参数构造函数)
 - 参数化构造函数
 
1、Java默认构造函数
 没有参数的构造函数称为默认构造函数。默认构造函数的语句如下:
<class_name>(){}
默认构造函数的示例:
 在这个例子中,在Bike类中创建了无参数(no-arg)构造函数,它将在对象创建时被调用。
class Bike1{
 Bike1(){
    System.out.println("This is a GouZaoHanShu");
 }
 public static void main(String[] args) {
    Bike1 bike  = new Bike1();     
 }
}
默认构造函数的目的是为对象提供默认值,如0,null等。
 显示默认值的默认构造函数示例
       class Student3 {
           int id;
           String name;
           void display(){
               System.out.println(id + " " + name);
           }
       }
在上边代码中我们并没有为其提供构造函数,但是我们在输出是会发现其是有值的,这就是在上边的类中,代码中并没创建任何构造函数,但编译器自动提供了一个默认构造函数。默认构造函数分别为字段:id和name分别提供了0和null
2.Java参数化构造函数
参数化构造函数用于为不同对象提供不同初始化的值。
示例:
在构造函数中我们可以添加任意多少的参数
   int id;
   String name;
   GouZaoHanShu2(int id,String name){
       this.id = id;
       this.name = name;
   }
   void display(){
       System.out.println(id + " " + name);
   }
   public static void main(String[] args) {
       GouZaoHanShu2 g1 = new GouZaoHanShu2(111,"zhangsan");
       GouZaoHanShu2 g2 = new GouZaoHanShu2(222,"lisi");
       g1.display();
       g2.display();
   }
3.Java构造函数重载
构造方法重载是Java中的一种技术,一个类可以有任何数量的参数列表不同的构造函数。编译器通过构造函数参数列表中的参数数量以及其类型来区分这些构造函数。
| 特点 | 抽象类 | 接口 | 
|---|---|---|
| 构造方法 | 有 | 无 | 
| 普通成员变量 | 有 | 无 | 
| 普通方法 | 可以有非抽象的 | 必须是抽象的 | 
| 抽象方法的访问类型 | public、protected和默认 | 只能是public的,默认public abstract | 
| 静态方法 | 可以有 | 无 | 
| 静态成员变量 | 有 | 有 public static final的 | 
| 其他类 | 只能继承一个抽象类 | 可以实现多个接口 | 
| 应用场景 | 模块之间通信契约 | 代码重用 | 
6、关于Java构造函数题目
1、下列有关Java构造函数叙述正确的是()
- A、构造器的返回值为void类型
 - B、如果一个源文件中有多个类,那么构造器必须与公共类同名
 - C、构造器可以有0个,1个或一个以上的参数
 - D、每个类可以有一个以上的构造器
 
答案:CD
1、构造器没有返回值
    // 一个无参数的构造函数
    Person(){
    }
    Person(String name,int age){
        this.name = name;
        this.age = age;
    }
2、B中有多个类时构造函数不一定与公共类同名,因为每个类都可以有构造函数,函数类同所属类。
3、C构造器中可以有任意个参数
4、D每个类都有一个默认构造函数。
2、下面哪个关键字可以用于Java的构造方法上?
- A、final
 - B、static
 - C、synchronized
 - D、native
 - E、None of these
 
构造方法不能被子类继承,所以final修饰没有意义。构造方法用于创建一个新的对象,不能作为类的静态方法,所以用static修饰没有意义。此外,Java语言不支持native或synchronized的构造方法。
