java面向对象之构造器:
我们一直在学习怎么封装class,一个class封装好之后的目的一般是创建实例对象,我们其实已经做过了。
Dog dog = new Dog();
new 一个对象的时候到底发生了什么事情呢?
1. java在new一个对象的时候,会先查看对象所属的类有没有被加 载到内存,如果没有的话,就会先通过类的权限定名来加载, 这个过程我们后边聊。
2. 加载并初始化类完成后,再进行对象的创建工作。
java程序员必备的基础知识_java面向对象之构造器
我们先聊聊创建的过程:
1. 在堆区分配对象需要的内存。
2. 对所有实例变量赋默认值。
3. 执行构造方法,比如我们可以使用构造方法赋值。(不太准 确,以后会慢慢补充)
4. 在栈区定义引用变量,然后将堆区对象的地址赋值给它。
java程序员必备的基础知识_java面向对象之构造器
构造方法,也叫构造器,会在new对象的时候主动被调用。
但是,事实上,我们并没有看到任何构造方法。
每个java类,会默认送你一个构造方法,这个方法它是这个样子的:
public Dog(){ }
我们可以写出来,也可以不写,这个构造方法什么都没做,我们可
以想办法让它做一些事情,比如:
public Dog(){ name = "teddy"; age = 12; } public static void main(String[] args) { Dog dog = new Dog(); Sy); Sy); } 我们并没有调用这个方法啊: 但是,结果却出来了: teddy 12
当然如果我们想自己按照自己的意愿去构造实例,我们还可以定义 这样的构造器:
同时new的时候就要传递参数了:
public Dog(String name,int age){ Sy("验证构造方法被调用的时机:【"+ name + "】被创建! "); = name; = age; public static void main(String[] args) { Dog dog = new Dog("jinmao",23); Sy); Sy); } 结果: 验证构造方法被调用的时机:【jinmao】被创建! jinmao 23
此时,如果我们把那个没有参数的构造器删除,
你会发现已经不能这么去new对象了。
public static void main (String args[]){ Dog dog = new Dog();//因为有了有参构造,所以无参构造不能 }
【注】一旦自己写了构造器,系统将不再赠送,所以我们一般【会 自己补充上】。