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