首页 > 技术专区 > 面试题 > 面试题基础三(JAVA基础部分) 屏幕太窄?试试伸展一下吧 >

面试题基础三(JAVA基础部分)

1.    静态变量与实例变量的区别

一种是被static关键字修饰的变量,叫类变量或者静态变量。另一种没有static修饰,为实例变量。类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期。

2.    抽象类和接口有什么样的区别?

(1)抽象类中可以包含抽象方法和实例方法,而接口中只能定义抽象方法。

(2)实现接口的类一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。

(3)继承只有单根继承性,一个类只内能继承一个抽象父类,但是可以实现多个接口。

(4)抽象类中可以有构造方法,接口中不能定义抽象方法。

(5)接口中定义的变量都是静态常量。

3.    Integer与int的区别(封装类和基本类型的区别)

(1)int是java提供的8种原始数据类型之一。Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。

(2)int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer。

(3)在JSP开发中,Integer的默认为null,所以用el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0,所以用el表达式在文本框中显示时,结果为0,所以,int不适合作为web层的表单数据的类型。

(4)在Hibernate中,如果将OID定义为Integer类型,那么Hibernate就可以根据其值是否为null而判断一个对象是否是临时的,如果将OID定义为了int类型,还需要在hbm映射文件中设置其unsaved-value属性为0

(5)Integer提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数,Integer中还定义了表示整数的最大值和最小值的常量。

4.    异常的抛出,throws、throw、try、catch、finally分别有什么意义

(1)try:指定一块预防所有“异常”的程序。

(2)catch:紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的“异常”的类型。

(3)throw:用来明确地抛出一个“异常”。

(4)throws:标明一个成员函数可能抛出的各种“异常”。

(5)finally:不管发生什么“异常”都被执行一段代码

5.    单例模式的两种形式有什么区别

    单例模式有以下特点:(1)、单例类只能有一个实例。(2)、单例类必须自己创建自己的唯一实例。(3)、单例类必须给所有其他对象提供这一实例。单例模式主要分为饿汉式和懒汉式。懒汉式单例模式代码如下:

1.      public class Singleton {  

2.          private Singleton() {}  

3.          private static Singleton single=null;  

4.          Public synchronized static Singleton getInstance() {  

5.               if (single == null) {    

6.                   single = new Singleton();  

7.               }    

8.              return single;  

9.          }  

10.  }  

 只有在调用getInstance方法时才会创建该类的对象。

 饿汉式单例模式代码如下:

1.      public class Singleton1 {  

2.          private Singleton1() {}  

3.          private static final Singleton1 single = new Singleton1();  

4.          //静态工厂方法   

5.          public static Singleton1 getInstance() {  

6.              return single;  

7.          }  

8.      }  

 饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变。

6.    Java 中 sleep 方法和 wait 方法的区别?

(1).sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,将执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

(2).wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。