概念

构造方法是一种特殊的方法,它是一个与类同名且返回值类型为同名类类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的创建或者对象的初始化。当类实例化一个对象时会自动调用构造方法。

构造方法和其他方法一样也可以重载。

形式

可以无参也可以有参

修饰符  类名(【参数】){
       代码……
}

练习1:构造方法创建对象

创建对象时的两种方

public class Test2_构造方法 {
    String name;

    //当存在一个含参的构造方法时,无参构造将不再自动生成...    
//public Test2_构造方法(){}
    //含参构造
    public Test2_构造方法(String n) {
        name = n;
    }

    void eat() {
        System.out.println("Test2_构造方法.eat()");
    }
}

class tt {
    public static void main(String[] args) {
//注释掉无参的构造也可以运行,说明系统会自动提供一个无参的构造方法
        Test2_构造方法 t2 = new Test2_构造方法();
        t2.eat();
//t是引用变量,引用的是对象的地址值。
        //根据地址值找到对象,并获取对象的数据
        Test2_构造方法 t = new Test2_构造方法("张三");
        System.out.println(t.name);
    }
}

练习2:构造方法赋值

public class Test3_成员变量赋值 {
       String name;
       int age;
       //赋值方式1:通过含参构造方法赋值
       public Test3_成员变量赋值(String name,int age){
              this.name=name;
              this.age=age;
       }
       //赋值方式2:通过setXxx()方法赋值
       public void setName(String name){
              this.name=name;
       }
       public void setAge(int age){
              this.age=age;
       }
}
class Test3Demo{
       public static void main(String[] args) {
     //赋值方式1:通过无参构造方法赋值
              Test3_成员变量赋值 t1= new Test3_成员变量赋值();
              System.out.println(t1.name);
              System.out.println(t1.age);
              //赋值方式1.1:通过含参构造方法赋值
              Test3_成员变量赋值 t2= new Test3_成员变量赋值("zhangsan",30);
              System.out.println(t2.name);
              System.out.println(t2.age);
              //赋值方式2:通过setXxx()方法赋值
              Test3_成员变量赋值 t3= new Test3_成员变量赋值();
              t3.setName("rose");
              t3.setAge(25);
              System.out.println(t3.name);
              System.out.println(t3.age);
       }
}

编写汽车类并画内存图

属性:颜色,型号,品牌,价格
行为:开,飞。。。
汽车对象的创建和使用

创建对象的流程

Person p = new Person();//短短这行代码发生了很多事情

  1.  把Person.class文件加载进内存
    
  2.  在栈内存中,开辟空间,存放变量p
    
  3.  在堆内存中,开辟空间,存放Person对象
    
  4.  对成员变量进行默认的初始化
    
  5.  对成员变量进行显示初始化
    
  6.  执行构造方法(如果有构造代码块,就先执行构造代码块再执行构造方法)
    
  7.  堆内存完成
    
  8.  把堆内存的地址值赋值给变量p ,p就是一个引用变量,引用了Person对象的地址值
    

匿名对象

没有名字的对象,是对象的简化表示形式。
使用场景:
1、 当被调用的对象只调用一次时(多次会创建多个对象浪费内存)
Demo d = new Demo();
d.sleep();
d.game();
//这个d就是对象的名字。
也可以写成:
new Demo().show();//创建了一个对象调方法
new Demo().game();//又创建了一个对象调方法

Q.E.D.


努力成就未来