Java常考笔试面试(一)

1.重载重写的区别

重载:

        在一个类里,方法名相同,参数列表不同,包括参数个数,参数类型,参数顺序不同。访问权限修饰符和返回值类型没有要求。

        当调用重载方法时,根据参数个数和类型决定调用哪个重载函数。

重写:

        在父子类中,父类定义了方法无法满足子类特有要求,子类重新定义该方法。要求访问权限修饰符不能比父类严格,返回值类型相同或者是父类返回值类型的子类,方法名和参数列表必须一致,子类异常不能比父类多。              

        如果父引用指向子类,子类重写方法调用子类,没有重写调用父类。

2.抽象类和接口的区别

1)   定义抽象类用class,只能有一个父类,abstract不能省略

         接口用interface,可以有多个父接口

2)   抽象类的属性默认是default,没有static final修饰

         接口中属性默认是public static final修饰

3)   抽象类中可以有构造函数,供子类调用

         接口中不能有构造函数

4)   抽象类中可以有普通方法,甚至可以全是普通方法而没有抽象方法。abstract不能省略

        接口中必须全是抽象方法,不能有普通实例方法,可以有静态方法包含方法体,abstract可省略

5)   抽象类定义多个子类公共的属性和方法

         接口定义的是多个无关类的公共的属性和方法

3.final,finally,finalize

final:

        修饰类不能被继承

        修饰方法不能被重写

        修饰全局变量,声明时赋初始值;修饰局部变量可以先声明后赋值;

        修饰基本数据类型赋值后不能更改,修饰引用数据类型赋值后不能指向其他对象,指向对象里的属性可以改变

finally:

        finally和try-catch一起使用,表示无论是否抛异常都执行finally中代码,一般用于资源释放。

finalize:

        是Object类中的方法,可以被子类重写,垃圾回收机制回收对象时调用该方法,该方法有可能使对象复活取消回收。

4.static

1)  静态变量 (类属性): 成员变量(实例变量,全局变量,属性)被static修饰

        静态方法 (类方法): 成员方法(实例方法)被static修饰

        静态内部类

        静态代码块

2)     静态方法或静态代码块 只能访问静态的,因为非静态的还没有分配空间。

        非静态的方法或代码块可以访问所有包括静态和非静态。

3)      访问:

        类名.静态成员变量   

        类名.静态成员方法

        对象.静态成员变量

        对象.静态成员方法    

        对象.实例成员变量

        对象. 实例成员方法  

       (类方法和类属性,如果在同一个类中,可以直接访问)

解释说明:

1)  如果数据在内存中存在,可以访问和使用。反之则不能访问和使用

2)  static修饰的所有数据在类加载的时候分配内存,只分配一次。当执行main函数的时候,静态修饰的类属性类方法已经在内存中存在,所以可以通过类名直接访问。

3)  非静态实例属性实例方法在new创建对象的时候分配空间,才在内存中存在,所以必须通过对象访问。

4)  static修饰在加载代码时分配一次内存,一直存在直到程序销毁。

        static修饰的方法或者代码块中不能使用this关键字、super关键字。

5)  静态代码块在类加载时执行,执行一次。

       自由代码块在创建对象时执行。先执行自由代码块,后执行构造函数

注意:碰到new关键字:堆内存开辟空间,调用构造函数,自由代码块

5.单例模式(二选一记住)

1)  懒汉式(线程安全--同步代码块,双重检查):

public class Singleton {

         private static Singleton singleton;

         private Singleton() {}

         public static Singleton getInstance() {

                 if (singleton == null) {//--------1 ,第二次第三次调用,不进入到同步代码块中

                         synchronized (Singleton.class) {

                                if (singleton == null) {//如果第一个线程执行到1cpu时间到,第二个线程可以全部将getInstance执行完。再回到线程1,此处如果不判断又开辟空间,违反单例

                                singleton = new Singleton();

                                }

                          }

                   }

        return singleton;

        }

}

2)  静态内部类

public class Singleton {

        private Singleton() {}

        private static class SingletonInstance {//私有静态内部类

                private static final Singleton INSTANCE = new Singleton();

         }

        public static Singleton getInstance() {

                return SingletonInstance.INSTANCE;

        }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值