目录
1. finalize的含义
2.Statement和PreparedStatement用法
3. 接口能用protected修饰吗
4.java实现分解质因数
今天去参加了一场国企单位的笔试,很基础,但是有些细节的地方还是觉得答得不好,所以复盘一下。
1. finalize的含义
finalize: 是Object类的一个方法,因为所有的类都继承自Object类,所以所有的类都有finalize方法。 在垃圾收集器将该对象清除出内存之前会先调用它的finalize方法,做一些内存清理工作,通常这部分内存是非java内存,如socket,finalize只会被调用一次。
程序员都了解初始化的重要性,但是会常常忘记同样重要的清理工作,java有垃圾回收器负责回收无用对象占用的内存资源,但是也有特殊情况,你的对象获得了一块特殊的内存区域,并不是通过 new 方法,由于垃圾回收器只知道释放那些经由new分配的内存, 所以它不知道如何释放这些特殊的内存。
java 考虑到这种情况,允许在类中定义一个名为 finalize() 的方法。他的工作原理是这样的:一旦垃圾回收器准备释放对象占用的存储空间,将首先调用 finalize() 方法,并在下一次垃圾回收动作发生时,才会真正的回收对象占用的内存。就像为垃圾回收器添加一个回调方法一样。
这个题我只回答了是Object类的方法,可以进行手动GC,不是很准确。
2.Statement和PreparedStatement用法
这里考的是一道选择题,因为实在是很少手动写jdbc,平时太过依赖框架和IDE的自动生成,很遗憾,答错了。
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
createStatement方法是没有参数,PreparedStatement才有,晕,实在是不怎么写这种代码。
ps = conn.prepareStatement(sql);
这个太细节了,只能强记。
3. 接口能用protected修饰吗
接口方法只能使用public,既然只能用public,java编译器在你忘了在方法前写public的时候干脆自动帮你转成public了。
至于接口类能不能用protected,自己看吧
4.java实现分解质因数
public class PrimeTest {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int number=in.nextInt();
if(isPrime(number)){
System.out.print(number);
}else{
System.out.print(number+"=");
factor(number);
}
}
public static void factor(int num){
for(int i=2;i<num;i++){
if(num%i==0){
System.out.print(i+"*");
if(isPrime(num/i)){
System.out.print(num/i);
}else{
factor(num/i);
}
//结束方法非常重要,下面的方法就会因为方法没有结束而继续进行下去
return;
}
}
}
public static boolean isPrime(int num){
boolean isPrime=true;
for(int i=2;i<num;i++){
if(num%i==0){
isPrime=false;
break;
}
}
return isPrime;
}
}