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(); System.out.println(dog.name); System.out.println(dog.age);}我们并没有调用这个方法啊:但是,结果却出来了:teddy12
当然如果我们想自己按照自己的意愿去构造实例,我们还可以定义 这样的构造器:
同时new的时候就要传递参数了:
public Dog(String name,int age){ System.out.println(\"验证构造方法被调用的时机:【\"+ name + \"】被创建! \"); this.name = name; this.age = age; public static void main(String[] args) { Dog dog = new Dog(\"jinmao\",23); System.out.println(dog.name); System.out.println(dog.age);}结果:验证构造方法被调用的时机:【jinmao】被创建! jinmao23
此时,如果我们把那个没有参数的构造器删除,
你会发现已经不能这么去new对象了。
public static void main (String args[]){ Dog dog = new Dog();//因为有了有参构造,所以无参构造不能}
【注】一旦自己写了构造器,系统将不再赠送,所以我们一般【会 自己补充上】。
原创文章,作者:自考吧,如若转载,请注明出处:https://www.zk021.com/10013.hrml