1.听说final定义的局部变量他的生命期可以超出方法的生命期,不知是否能举一个例子?
2.抽象类有什么好处?
3.finalize调用问题:
class Person{
public int age;
Person(){ }
}class TestFinalize{
public void finalize(){
System.out.println("The Objects are OUT!");
}
public static void main(String[] args){
Person person=new Person();
new Person();
System.gc();
}
}
为何程序执行The Objects are OUT!没能输出?
2.抽象类有什么好处?
3.finalize调用问题:
class Person{
public int age;
Person(){ }
}class TestFinalize{
public void finalize(){
System.out.println("The Objects are OUT!");
}
public static void main(String[] args){
Person person=new Person();
new Person();
System.gc();
}
}
为何程序执行The Objects are OUT!没能输出?
2.抽象类本身只提供方法的声明,而本身没有实现,实现留给继承它的子类来实现,而子类就可以根据自己的情况而有不同的实现
3.finalize方法我也不是很明白,不回答了
以下情况是完全可能的:一个程序只占用了少量内存,没有造成严重的内存需求,于是垃圾回收器没有释放那些无用对象占用的内存,因此这些对象的finalize()方法还没有被调用,程序就终止了。程序即使显式调用System.gc()或Runtime.gc()方法,也不能保证垃圾回收操作一定执行,因此不能保证无用对象的finalize()方法一定被调用。还有一个问题,楼主你怎么把public void finalize(){
System.out.println("The Objects are OUT!");
}
写在了TestFinalize类中?你应该写在Person类中的吧?写在Person类中倒是可能执行了,另外finalize()最好用protected修饰
3Q,受益匪浅,System.gc()清除的是什么类型的对象呢?没有引用的?
如果子类定义和父类相同的方法不是可以override么?为什么还要用abstract来定义基类?
......abstract 修饰是为了继承类必须实现这个方法
class Apple{
String colour;
public void getcolour(){
ChangeColour();
colour=col;
System.out.println(colour);
}
}
void ChangeColour(){
final String col = "green";
}class FinalTest{
public static void main(String[] args){
Apple apple = new Apple();
ChangeColour();
System.out.println(col);
}
}为何错误?
package finaltest;class Apple{
String colour;
String col;public String ChangeColour(){
this.col = "green";
return col;
}
public void getcolour(){
colour=ChangeColour();
System.out.println(colour);
}
}public class FinalTest{
public static void main(String[] args){
Apple apple = new Apple();
apple.getcolour();
}
}要是final的话实现不了
finalize 是系统释放对象时执行的方法。
System.gc()只是建议JVM在这个时候释放一下内存。一般在内存吃紧的时候会释放一下,具体是什么时候,没有定论。
System.gc只是建议垃圾回收机制回收无用对象