每天十道面试题(四)

文章目录

      • 1、Java中会存在内存泄漏吗,请简单描述。
      • 2、GC是什么? 为什么要有GC?
      • 3、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
      • 4、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类?是否可以implements(实现)interface(接口)?
      • 5、内部类可以引用他包含类的成员吗?有没有什么限制?
      • 6、在java中一个类被声明为final类型,表示了什么意思?
      • 7、error和exception有什么区别?
      • 8、给我一个你最常见到的runtime exception?
      • 9、final, finally, finalize的区别?
      • 10、List,Set,Map是否继承自Collection接口?

1、Java中会存在内存泄漏吗,请简单描述。

会存在内存泄露的情况。

内存泄漏(Memory Leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。然而把任何不需要的内存使用的增加描述为内存泄漏,严格意义上来说这是不准确的。 在Java中GC会回收大部分内存,但是也有一部分GC不能回收,这样就会出现内存泄露。

2、GC是什么? 为什么要有GC?

GC是指垃圾回收机制。

当一个对象不能再被后续程序所引用到时,这个对象所占用的内存空来间就没有存在的意义了,Java虚拟机会不定时的去检测内存中这样的对象,然后回收这块内存空间。

要请求垃圾收集,可以调用下面的方法之一:System.gc() 或Runtime.getRuntime().gc() 。

3、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

1)接口是可以被接口继承的,即通过关键字extends声明一个接口是另一个接口的子接口。由于接口中的方法和常量都是public,子接口将继承父接口中的全部方法和常量。

2)抽象类可以实现接口,当一个类声明实现一个接口而没有实现接口中所有的方法,那么这个必须是抽象类,即abstract类。

3)抽象类是可以继承实体类。抽象类中可以有静态的main方法。抽象类与普通类的唯一区别就是不能创建实例对象并且抽象类允许有abstract方法。

4、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类?是否可以implements(实现)interface(接口)?

匿名内部类可以继承其它类,实现其它接口。

匿名内部类就是没有名称的内部类,它经常被应用于Swing程序设计中的实践监听处理。

匿名内部类有几个特点:

1)匿名内部类可以继承父类的方法也可以重写父类的方法。

2)匿名内部类可以访问外嵌类中的成员变量和方法,在匿名内部类中不能声明静态变量和静态方法。

3)使用匿名内部类时,必须在某个类中直接使用匿名内部类创建对象。

4)在使用匿名内部类创建对象时,要直接使用父类的构造方法。

创建一个匿名内部类,如果没有对该类的引用,则无法使用它的方法。但是匿名内部类经常用来创建某个类的唯一子类,或者创建接口的唯一实现类。

5、内部类可以引用他包含类的成员吗?有没有什么限制?

内部类可以引用它包含类的成员,但是唯一的限制是,这个内部类不是静态内部类。

如果内部类是静态内部类,那么它不能访问外部类的普通成员变量和方法,它只能访问外部类中的静态成员。

6、在java中一个类被声明为final类型,表示了什么意思?

在java中一个类被声明为final类型,表示这个类是不能有子类的,就是你不能用其他的类来继承这个类,是顶级类。

关于final,我们应该了解的有:
1)final修饰的类,不能被继承,

​ a.Java中的String,Math是final类,不能被继承

​ b.Integer,Short,Byte,Character,Long,Boolean,Double,Float包装类是final类,不能被继承

​ c.在实际开发中,一般不允许使用final类,因为final类影响动态代理模式技术的实现

​ 2)final修饰方法,不能被覆盖,一般不允许使用final方法

​ 3)final修饰变量,初始化后就不允许在修改

​ final局部变量,初始化后就不允许在修改

​ final方法参数,初始化后就不允许在修改

​ final成员变量,初始化后就不允许在修改

​ 4)final static修饰的变量作为常量,一般常量名大写

7、error和exception有什么区别?

Error和Exception都是Throwable类的子类,它们分别表示两种异常类型。它们之间的区别是:

1)Error异常产生于Java的虚拟机,不是程序员人为捕获的;Exception是系统运行异常,运行时异常往往与运行的环境有关,可能发生的情况种类非常多。

2)Error异常都是不可控制的异常;Exception包含了可控异常处理RuntimeException和不可控制的异常处理。

3)Error用于表示系统错误或者底层不可控制的错误信息,是系统中捕获的异常错误;Exception是人为编程的错误捕获,是可以在程序中处理的异常。

8、给我一个你最常见到的runtime exception?

1)ArithmeticException类:算数异常类。该类用来描述算术异常,如在除法或求余运算中规定,除数不能为0时,Java虚拟机抛出该异常。

2)ArrayStoreException类:将与数组类型不兼容的值赋值给数组元素时抛出的异常。该类用来描述数组试图存储类型不兼容的值。例如,对于一个Integer类型数组,试图存储一个字符串,将抛出该异常。

3)ClassCastException类:类型强制转换异常类。

4)IndexOutOfBoundsException类:当某对象(如数组或字符串)的索引超出范围时抛出的异常,下面是它的两个子类:

  • ArrayIndexOutOfBoundsException类:数组下标越界异常类。
  • StringIndexOutOfBoundsException类:字符串索引超出范围异常类。

5)NegativeArraySizeException类:建立元素个数为负数的数组异常类。

6)NullPointerException类:空指针异常类。

7)NumberFormatException类:字符串转换为数字异常类。

8)SecurityException类:小应用程序(Applet)执行浏览器的安全设置禁止的动作时抛出的异常。

9、final, finally, finalize的区别?

1)final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承。

finally是异常处理语句结构的一部分,表示总是执行。

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。

2)final:java中的关键字,修饰符。

a、如果一个类被声明为final,就意味着它不能再派生出新的子类,不能作为父类被继承。因此,一个类不能同时被声明为absrtact抽象类的和final的类。

b、如果将变量或者方法声明为final,可以保证它们在使用中不被改变.

  • 被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。

  • 被声明final的方法只能使用,不能重载。

finally:java的一种异常处理机制。

​ finally是对Java 异常处理模型的最佳补充。finally 结构使代码总会执行,而不管有无异常发生。使用 finally 可以维护对象的内部状态,并可以清理非内存资源。特别是在关闭数据库连接这方面,如果程序员把数据库连接的close()方法放到finally中,就会大大降低程序出错的几率。

finalize:Java中的一个方法名。

Java技术使用finalize()方法在垃圾收集器将对象从内存中清除出去前,做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。

10、List,Set,Map是否继承自Collection接口?

List、Set继承自Collection接口,Map没有继承Collection接口,Map提供key到value的映射。

你可能感兴趣的:(积少成多面试经,java)