Java基础题目汇总

一、集合框架

1. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别

答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等
     equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值

2. 数组和集合的使用区别

①、数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型)

②、集合可以存储和操作数目不固定的一组数据

③、数据重复问题,Set可以解决数据重复问题

3. 什么是iterator?

为了方便处理集合中的元素,Java中出现了一个对象,该对象提供了一些方法专门处理集合中的元素,例如删除和获取集合中的元素,该对象就叫做迭代器iterator。Iterator接口提供了很多对集合元素进行迭代的方法。每一个集合类都包含了可以返回迭代器实例的迭代方法。迭代器可以在迭代的过程中删除底层集合的元素。

二、异常

1. 常见的RuntimeException有哪些?

答:常见的运行时异常有如下这些ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException

2. errorexception有什么区别

答:error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况
     exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况

3. 空指针异常

①、指针,就是java中的对象的引用。比如String s  这个s就是指针;

②、空指针,就是指针的内容为空,比如上面那个s,如果令它指向null,就是空指针;

③、空指针异常,就是一个指针是空指针,还要去操作它,既然它指向的是空对象,他就不能使用这个对象的方法。比如上面的s假如为null,还要使用s的方法,就会产生空指针异常

 三、基本数据类型

1. short s = 1, s=s+1错误是什么?   short s=1,s+=1的错误是?

 short s=1;s=s+1的错误是会失去精度,由于1是int类型,s=s+1返回的是int类型,int类型赋值给short就会数据类型转换错误。要强制类型转换。s+=1没有错误。s+=1就是s=(Short)s+1;

2. 说出下面程序的问题。

  byte  b1=1;

  byte  b2=2;

  byte  b3=1+2;

  byte  b4=b1+b2;

byte  b4=b1+b2;有问题,b1和b2是变量,变量的值是不确定的可以变化的,在编译的时候,编译器javac不确定b1+b2的结果是什么,因此会将结果以int类型进行处理,所以int不能赋值给byte,编译失败;

b3=1+2;没有问题,1和2为常量,在编译的时候,编译器已经确定了1+2的结果没有超过byte的取值范围。可以赋值给b3,所以b3=1+2正确。

2. Integer和int的区别?

①Integer是int的包装类,int是Java的基本数据类型;

②Integer默认值是null,int是0;

③Integer需要实例化后才能使用,int不需要;

④Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值。

四、线程

1. sleep()和wait()的区别?

①、sleep()方法是Thread类的静态方法,单线程;wait()是Object超(父)类的成员方法。

②、sleep()没有释放锁;wait()释放了锁 。sleep导致了线程暂停执行指定时间,让出CPU该其他线程。但是它的监控状态依然保持着。当指定的时间到了又会自动恢复运行状态。

③、sleep()需要进行异常处理,try catch;而wait方法不需要

④、sleep()可以在任何地方使用,而wait()只能在同步方法和同步代码块使用

五、封装、继承、多态、抽象

1. 什么情况下使用抽象类?

、其他

1. 跳出多重嵌套循环的几种方法?

①标号方式,在外层定义循环标记【ok:】,break ok。代码示例:

 1 public static void main(String[] args)  {
 2         OK:
 3             for(int i=0;i<10;i++){
 4                 for(int j=0;j<10;j++){
 5                     System.out.println("i,j: "+i+","+j);
 6                     if(i==2){
 7                         break OK;
 8                     }
 9                 }
10             }   
11 }

②使用布尔值变量作为flag,变量值放到for循环的条件中。代码示例:

 1 public static void main(String[] args)  {
 2         boolean forBreak = true;
 3             for(int i=0;i<10;i++){
 4                 for(int j=0;(j<10)&&(forBreak);j++){
 5                     System.out.println("i,j: "+i+","+j);
 6                     if(i==2){
 7                         forBreak = false;
 8                     }
 9                 }
10             }       
11     }

③抛出异常

 

原文地址:https://www.cnblogs.com/elian91/p/15455873.html