一、对象如何创建、存在于何以及如何保存和抛弃更有效率。
对象存在堆上,堆又可以称为可垃圾回收的堆。方法在栈上,并且方法会被堆在一起。当调用一个方法时,该方法会在调用栈的栈顶。如果局部变量是个对该对像的引用,只有变量本身会放到栈上。但是对象无论如何都是运行在堆上。
二、为什么要理解栈与堆的机制?
1、如果想要了解变量的有效范围、对象的建立、内存管理、线程和异常处理,则认识堆与栈是很重要的。
2、实例变量是声明在类中方法之外的地方。局部变量声明在方法或方法的参数上,并且所有局部变量都存在于栈上相对应的堆栈块中。不管是实例变量或者局部变量,对象本身都会在堆上。
三、既然编译器会帮你写构造函数,为什么要自己写构造函数?
如果你在创建对象时需要有程序代码帮忙初始化,那你就得自己编写构造函数。例如你需要通过用户的输入来完成对象的创建。
四、如何分辨构造函数和方法?
JAVA可以有与类同名的方法而不会变成构造函数。其中的差别在于是否有返回类型。构造函数不会有返回类型。
五、构造函数会被继承吗?
构造函数不会被继承。
六、编译器一定会帮你写出没有参数的构造函数吗?
不会,如果你已经写了一个有参数的构造函数,并且你需要一个没有参数的构造函数,则你必须自己手动写。而且,如果类有一个以上的构造函数,则参数一定要不一样。
七、构造函数应该公有的吗?
不,构造函数可以公有、私有或者不指定的。
八、一个私有的构造函数有什么用?没有人能够调用它,所以也就没有人能够创建该对象?
私有不是完全不能存取,它代表该类以外不能存取。
九、在创建对象时,所有继承下来的构造函数都会在子类对象创建时期执行。因此执行new指令是个重大事件,它会启动构造函数的连锁反应。还有,就是抽象的类也有构造函数。虽然你不能对抽象的类执行new操作,但是抽象的类还是父类,因此它的构造函数会在具体的子类创建出实例时执行。构造函数在执行的时候,第一件事是会去执行它的父类的构造函数,这会连锁到Object这个类为止。
十、调用父类构造函数的唯一方法是调用super()。
十一、方法可以抓住其他方法所抛出的异常。异常总是会丢回给调用方。会抛出异常的方法必须要声明它有可能会这么做。