1.名词解释:构造方法、抽象
构造方法:构造方法与一般方法不同,是一种特殊的方法。
(1)构造方法的名称与类的名称相同。
(2)构造方法没有函数返回值,甚至连void类型也不是。
(3)构造方法不能被static等关键字修饰。
(4)构造方法不能被子类继承。
(5)构造方法用来初始化类的数据成员。
抽象:不和任何具体的事例绑定。
抽象分为抽象方法和抽象类。
抽象类:class前面有abstract修饰则该类为抽象类。一个类中只要含有抽象方法该类就是抽象类
抽象方法:只是一个声明,没有方法主题的方法称为抽象方法。
在一些程序中父类对子类的一些属性和方法进行抽取,这些属性和方法有的已经具体实现有的还没有具体实现。没有具体实现的则定义为抽象。比如声明一个父类为动物,但是我们不知道动物的名字,年龄,我们就可以把动物类设置为abstract。代码如下:(代码参考于https://www.cnblogs.com/ibelieve618/p/6410910.html)
package javastudy;
public class AbstractDemo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
// 这就是一个抽象类
abstract class Animal {
String name;
int age;
// 动物会叫
public abstract void cry(); // 不确定动物怎么叫的。定义成抽象方法,来解决父类方法的不确定性。抽象方法在父类中不能实现,所以没有函数体。但在后续在继承时,要具体实现此方法。
}
// 抽象类可以被继承
// 当继承的父类是抽象类时,需要将抽象类中的所有抽象方法全部实现。
class cat extends Animal {
// 实现父类的cry抽象方法
public void cry() {
System.out.println("猫叫:");
}
}
2、对象位于内存何处?声明能引用对象的实质是什么?
对象位于堆中。声明能引用的对象就是将建立在方法栈上的引用与堆上对应的对象建立联系。
3、对象和基本数据类型作为参数传递时有什么不同?
对象作为参数,相当于对象的引用作为参数,传递的是该引用在方法栈上的地址。而基本类型作为参数,传递的只是某一个值。
4、在自定义对象中写finalize方法,看看什么情况下finalize被调用。
首先解释几个名词:
gc(garbage collection):一种方法,作用是收集声明周期短的区域。
JVM(JAVA virtual machine):java虚拟机,是运行java程序必不可少的机制。
finalize的定义是垃圾回收确认没有对象指向的引用时,执行回收,但其真正的机制是finalize方法只有在JVM执行gc时才被执行。所以是在jvm执行gc并且垃圾回收确认没有对象指向的引用时执行finalize方法。
5、对象在什么条件下成为垃圾?什么情况下释放垃圾对象,如何证明一个对象被释放了?
堆中的对象在没有和任何引用建立联系的情况下会成为垃圾对象。
在内存空间不足的情况下才会释放垃圾对象。
可以创建一个引用和该对象建立联系,运行代码看会不会出错。
6、final修饰符有什么作用?
final是java中的关键字,可以修饰类、方法和变量
被final修饰的类不可以被继承
被final修饰的变量最多仅能赋值一次,且不能被改变。
被final修饰的方法不能被重写。
7、static修饰的属性和方法有什么特点?
static修饰方法:
随着类的加载而被加载。被static修饰的方法可以调用静态变量,静态方法,但不能调用非静态变量和方法。非静态方法可以调用静态变量和方法。
static修饰属性:
由类创建的所有对象都有这个属性。
这个属性先于对象分配空间。
每个对象都可对其操作。
9、ADE