java面试题

一、谈谈final、finally、finaliza的区别。

      final---修饰符(关键字)

                 当一个变量被声明为final时,表示变量不可变,且必须在声明时给定初始值。

                 当一个方法被声明为final时,表示方法在子类中不可被重写。

                 当一个类被声明为final时,表示类不可被继承,因此一个类不能既被声明为abstract的,又被声明为final的。

      finally---异常处理语句块的一部分,表示总是执行

      finaliza---object类的一个方法,当一个对象被GC前会调用这个方法。可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

 

二、静态内部类和内部类的不同。

      1.静态内部类可以有静态成员(方法,属性),而非静态内部类则不能有静态成员(方法,属性)。
      2.静态内部类只能够访问外部类的静态成员,而非静态内部类则可以访问外部类的所有成员(方法,属性)。
      3.实例化一个非静态的内部类的方法:
        a.先生成一个外部类对象实例
        b.通过外部类的对象实例生成内部类对象
      4.实例化一个静态内部类的方法:
        a.不依赖于外部类的实例,直接实例化内部类对象
        b.调用内部静态类的方法或静态变量,通过类名直接调用

 

三、HashMap和Hashtable的区别

      HashMap是Hashtable的轻量级实现(非线程安全的实现),它们都实现了Map接口,将唯一键映射到特定的值上。

      HashMap允许空(null)键值(key),Hashtable则不允许空的键值。

      由于HashMap是非同步的所以效率上高于Hashtable。当多个线程访问同一个hashMap时,需要自己实现外同步。

 

四、说出ArrayList,Vector,LinkedList的存储性能和特性

      ArrayList和Vector都是采用数组方式存储数据,此数组元素数大于实际存储的数据,以便增加和插入元素,都允许通过下标直接索引元素,但是插入数据要涉及到数组元素移动等内存操作,所以索引数据快、插入数据慢。

      Vector由于使用了同步,所以速度上比ArraryList要慢。

      LinkedList使用双向链表实现存储,按序号索引元素需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入数据比较快。

 

五、Collection和Collections的区别

      Collection是集合类的上级接口,实现它的接口主要有Set和List。

      Collections是针对集合的一个帮助类,它提供了一系列的静态方法实现对集合的操作,比如:搜索、排序、线程安全化等。

 

六、什么是GC,为什么要GC?

      GC是垃圾收集器。内存处理是程序员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,java提供的GC功能可以自动监测对象是否不在有引用,从而达到自动回收内存的目的,java语言没有提供释放已分配内存的显式操作方法。

 

七、sleep()和wait() 有什么区别?

      1、sleep类是Thread的静态方法,wait是Object的方法。

      2、sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。

      3、wait只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用。

      4、sleep必须捕获异常,而wait则不需要捕获异常。

 

八、java有没有goto?

      没有。

 

九、Overload和Override的区别。overload的方法是否可以改变返回值的类型?

      重写和重载是java多态性的不同表现。

      重写是子类与父类之间多态性的一种表现,重载是一个类中多态性的表现。如果在子类中定义某方法与其父类有相同的名称和参数,则改方法重写了父类的方法,子类的对象使用这个方法时将调用子类中的方法。如果一个类中定义了多个同名的方法,它们或有不同的参数个数或不同的参数类型,则称为重载。

      Overload的方法是可以改变返回值的类型

 

十、抽象类和接口的区别

      1、abstract class和interface所反映出的设计理念不同。abstract class表示的是“is a”关系,interface表示的是“like a”关系。

      2、abstract class在java语言中表示的是一种继承关系,一个类只能有一个父类。但一个类可以实现多个interface。

      3、在abstract class中可以有非abstract的成员变量和方法,而在interface中,只能够有static final的成员变量,和abstract的方法

      4、抽象类中可以有非抽象的方法,接口中不能有实现的方法,接口中的方法默认都是public,abstract类型的。

 

十一、面向对象的特征有哪些方面

       面向对象的三个基本特征是:封装、继承、多态。

       1、封装:封装是把数据和过程隐藏起来,对数据的访问只能通过已定义的界面。它隐藏了细节,使得代码模块化,使得数据的访问更加安全。

       2、继承:继承是指这样一种能力,它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。增加了代码的重用性。新类继承了原始类的特征。新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。

       3、多态:它是通过重写和重载实现的。多态性语言具有灵活、抽象、行为共享的优势,也很好的解决了同名函数问题。

 

十二、String是基本数据类型吗?

      java的基本数据类型包括:byte、char、short、int、long、double、float、boolean。

      String不是基本类型,它final类型的类,因此不可以继承和修改这个类。

 

十三、String和StringBuffer的区别

       它们都可以存储和操作字符串,既包含多个字符的字符数据。

       String类提供了数值不可改变的字符串,StringBuffer类提供的字符串是可以修改的,如果程序要对字符串进行频繁修改的话,使用StringBuffer会提高效率,如果要得到String的话,可通过StringBuffer的toString()方法

       

十四、同步和异步有何区别,分别在什么情况下使用。

       同步:如果数据在线程间共享。例如正在写的数据以后可能被另外一个线程读到,或者正在读的数据可能已经被另外一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。

       异步:当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

 

十五、启动一个线程使用run()还是start()?

      start()

 

十六、数组有没有length()这个方法?String有没有length()这个方法?

      数组只有length属性。String有length()这个方法

 

十七、说出你知道的线程同步的方法

       wait():使一个线程处于等待状态,并且释放所持有的对象的lock。

       notify():唤醒一个处于等待的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

       allnotify():唤醒所有初入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

       synchronized:修饰语句块和方法。

       sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。

 

十八、描述一下JVM加载class文件的原理机制

      JVM中类的装载时由ClassLoader和它的子类实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值