『Java』JAVA程序员面试,必备基础知识点


『Java』JAVA程序员面试,必备基础知识点
文章图片
『Java』JAVA程序员面试,必备基础知识点
抽象类(abstract class)和接口(interface)有哪些不同之处?
首先我们得了解他们的特点
抽象类(abstract class)1.只有抽象类才有抽象方法2.抽象类必须被继承 , 而且其他final修饰的类和方法都是不能被继承的3.抽象类不能够实例化 , 只能被继承4.抽象类可以有属性 , 子类中都共用此属性 。 5.如果父类中某个方法在所有的子类中都能够实现 , 那么这个方法在父类中实现 。
抽象类和借口的概念
借口的特点:在抽象类中 , 可以包含一个或多个抽象方法;但在接口(interface)中 , 所有的方法必须都是抽象的 , 不能有方法体 , 它比抽象类更加“抽象” 。 1.所有的成员变量都是public、static、final类型 。 2.所有的方法都是public、abstract类型 。 3.所有的嵌套类型(类或接口)都是public、static类型
他们的区别和共性
【『Java』JAVA程序员面试,必备基础知识点】答:抽象类和接口都不能够实例化 , 但可以定义抽象类和接口类型的引用 。 一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现 , 否则该类仍然需要被声明为抽象类 。 接口比抽象类更加抽象 , 因为抽象类中可以定义构造器 , 可以有抽象方法和具体方法 , 而接口中不能定义构造器而且其中的方法全部都是抽象方法 。 抽象类中的成员可以是private、默认、protected、public的 , 而接口中的成员全都是public的 。 抽象类中可以定义成员变量 , 而接口中定义的成员变量实际上都是常量 。 有抽象方法的类必须被声明为抽象类 , 而抽象类未必要有抽象方法 。
静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?
答:Static Nested Class是被声明为静态(static)的内部类 , 它可以不依赖于外部类实例被实例化 。 而通常的内部类需要在外部类实例化后才能实例化
Java 中会存在内存泄漏吗 , 请简单描述 。
答:理论上Java因为有垃圾回收机制(GC)不会存在内存泄露问题(这也是Java被广泛使用于服务器端编程的一个重要原因);然而在实际开发中 , 可能会存在无用但可达的对象 , 这些对象不能被GC回收 , 因此也会导致内存泄露的发生 。 例如Hibernate的Session(一级缓存)中的对象属于持久态 , 垃圾回收器是不会回收这些对象的 , 然而这些对象中可能存在无用的垃圾对象 , 如果不及时关闭(close)或清空(flush)一级缓存就可能导致内存泄露
抽象的(abstract)方法是否可同时是静态的(static)是否可同时是本地方法(native) , 是否可同时被synchronized修饰?
答:都不能 。 抽象方法需要子类重写 , 而静态的方法是无法被重写的 , 因此二者是矛盾的 。 本地方法是由本地代码(如C代码)实现的方法 , 而抽象方法是没有实现的 , 也是矛盾的 。 synchronized和方法的实现细节有关 , 抽象方法不涉及实现细节 , 因此也是相互矛盾的 。
阐述静态变量和实例变量的区别 。
答:静态变量是被static修饰符修饰的变量 , 也称为类变量 , 它属于类 , 不属于类的任何一个对象 , 一个类不管创建多少个对象 , 静态变量在内存中有且仅有一个拷贝;实例变量必须依存于某一实例 , 需要先创建对象然后通过对象才能访问到它 。 静态变量可以实现让多个对象共享内存 。
从代码可以看出区别 , 一个是有修饰 , 一个没有修饰
是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?