首页 /  技术专区  /  面试题 宽屏模式 >

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

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

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

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

1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。

2、抽象类要被子类继承,接口要被类实现。

3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现

4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。

6、抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果

7、抽象类里可以没有抽象方法

8、如果一个类里有抽象方法,那么这个类只能是抽象类

9、抽象方法要被实现,所以不能是静态的,也不能是私有的。

10、接口可继承接口,并可多继承接口,但类只能单根继承。


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)后本线程才进入对象锁定池准备获得对象锁进入运行状态。


头像
0/200
图片验证码