个人能力有限,答案可能难免有不全之处,敬请谅解!
1、是否可以继承String类?
答:String类是final类,不允许被继承。
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {...}
2、ArrayList、Vector的区别以及Hashmap、Hashtable区别
ArrayList、Vector的区别
数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
Hashmap、Hashtable区别
1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类;
2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,
不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。
但HashMap的同步问题可通过Collections的一个静态方法得到解决:
Map Collections.synchronizedMap(Map m)
这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。
3.在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。
当get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。
因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。
3、GC是什么?为什么要有GC?
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,
忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以
自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已
分配内存的显示操作方法。Java程序员不用担心内存管理,因为垃圾收集器会自动进行
管理。要请求垃圾收集,可以调用下面的方法之一:System.gc() Runtime.getRuntime().gc()。
4、抽象类(abstract class)和接口(interface)有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstractclass),它用于要创建一个体现
某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract类
的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。
不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,
否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现
这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的
接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员
变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,
它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象
上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将
生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类
是否实现了接口。
5、作用域public、private、protected以及不写时的区别
public:所有其他类均可访问
private:仅该类本身可以访问
protected:本包中其他类和所有其他包中的子类可以访问
不写时:本包中的类可以访问
6、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
7、常用的异常有哪些?举例子说明。
答:大分为,Error和Exception
(1)Error类认为是不能恢复的严重错误,如系统内部错误和资源耗尽错误;此类错误程序几乎是无能为力,
不应该抛出这类型的错误,而是让程序中断;
(2)Exception类可能是一些轻微错误,这里分为派生自RuntimeException和非派生自RuntimeException类;
区分RuntimeException和非RuntimeException的规则:
编程错误导致RuntimeException,如,被0除、数组越界访问、空指针访问等等;而其他异常则是由于意外
情况发生,如:试图打开一个错误的URL,试图根据并不代表已存在类的字符串来查找Class对象,
试图读取文件结尾以后的数据等等。
8、程序的输出结果是什么?
//test2.java
class test1{
test1(){
aMethod();
}
public void aMethod(){
System.out.println("in test1 aMethod!");
}
}
public class test2 extends test1{
test2(){
aMethod();
}
public void aMethod(){
System.out.println("in test2 aMethod!");
}
public static void main(String args[]){
new test2();
new test1();
}
}
答:输出两行“in test2 aMethod!",因为,在main函数中新建test2对象,会先调用test2继承了的
父类的构造函数test1(),然后再调用自身的构造函数test2();在test2对象调用test1()时候,
执行test1函数体重的aMethod(),这个时候,由于aMethod函数在test2中已经重写了,
因此这里输出的是”in test2 aMethod!",而不是“in test1 aMethod!”。
后面的调用就是一些普通的调用,一般不容易写错。
in test2 aMethod!
in test2 aMethod!
in test1 aMethod!
9、编程实现类:命令行输入10个整数,输出最大值和最小值。
/*
*输入10个整数,输出最大值和最小值
*/
import java.io.*;
public class InputOutput{
final int NumOfArr=10;
int arrInt[]=new int[NumOfArr];
public void setArrIntByInput(){
try{
//先使用System.in构造InputStreamReader,再构造BufferedReader
BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
int index=0;
while(index < NumOfArr){
System.out.print("Enter a Integer:arrInt["+index+"]=");
//将字符串解析为带符号的十进制整数
arrInt[index]=Integer.parseInt(stdin.readLine());
index++;
}
}
catch(Exception e){
System.out.println("IOException");
}
}
public int getMaxOfArrInt(){
int max=this.arrInt[0];
for(int i=1;i<this.NumOfArr;i++){
if(max < arrInt[i]){
max=arrInt[i];
}
}
return max;
}
public int getMinOfArrInt(){
int min=this.arrInt[0];
for(int i=1;i<this.NumOfArr;i++){
if(min > arrInt[i]){
min=arrInt[i];
}
}
return min;
}
public void printArrInt(){
for(int i=0;i<this.NumOfArr;i++){
if(i!=0 && i%5==0){
System.out.print("\n");
}
System.out.print(arrInt[i]+" ");
}
System.out.println();
}
public static void main(String args[]){
InputOutput _InputOutput=new InputOutput();
_InputOutput.setArrIntByInput();
_InputOutput.printArrInt();
int max=_InputOutput.getMaxOfArrInt();
int min=_InputOutput.getMinOfArrInt();
System.out.println("max:"+max);
System.out.println("min:"+min);
}
}