Java基础面试题以及几个很有用的刷题网站.docx

preview
需积分: 0 38 下载量 118 浏览量 更新于2019-06-13 6 收藏 62KB DOCX 举报
### Java基础面试题知识点解析 #### 一、面向对象的三个基本特征 - **封装**:将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象的内部信息,而是通过该类提供的方法来实现对内部信息的操作和访问。 - **继承**:允许在一个现有类的基础上构建新类,新类称为子类或派生类,现有类称为基类或父类。子类继承了父类的数据结构和方法,并可以根据需要增加新的数据成员或覆盖父类的方法。 - **多态**:指同一个操作作用于不同的对象,会产生不同的执行结果。具体表现在方法的重写(Override)和重载(Overload)。 #### 二、多态的优点 - **可替换性**:子类可以替换父类出现的位置,提高了代码的复用性和可维护性。 - **可扩充性**:系统可以通过定义新的子类而无需修改已有代码的方式进行扩展。 - **接口性**:通过超类提供一个公共接口,由子类来实现具体的细节,提高了代码的灵活性。 - **灵活性**:多态使得设计更加灵活,能够适应不断变化的需求。 - **简化性**:通过多态,可以减少代码冗余,使得程序结构更为清晰。 #### 三、实现多态的方式 1. **接口实现**:通过实现接口,类可以在运行时表现出多种形态。 2. **继承父类重写方法**:子类继承父类并重写父类的方法,使得子类对象可以表现出不同于父类的行为。 3. **同一类中进行方法重载**:通过在同一类中定义多个同名但参数不同的方法来实现多态。 #### 四、虚拟机如何实现多态 - 虚拟机通过动态绑定技术实现多态。在运行时确定对象的实际类型,并根据实际类型调用相应的方法。 #### 五、接口的意义 - **规范**:接口定义了一组方法,作为类之间的一种约定。 - **扩展**:通过实现多个接口,一个类可以扩展多种行为。 - **回调**:接口可以用于回调机制,允许多个实现回调同一方法。 #### 六、抽象类的意义 - **提供公共类型**:抽象类作为多个子类的共同基础。 - **封装重复内容**:抽象类可以封装子类共有的属性和方法。 - **定义抽象方法**:抽象类中的抽象方法需要被子类实现,确保所有子类都实现了特定的功能。 #### 七、接口与抽象类的区别 - **实现限制**:类可以实现多个接口,但只能继承一个抽象类。 - **方法实现**:接口中的方法默认都是public abstract的,抽象类可以包含非抽象方法。 - **成员变量**:接口中的成员变量默认是public static final的,抽象类中的成员变量可以是任意类型的。 #### 八、父类的静态方法能否被子类重写 - **不能**:静态方法不属于对象实例,因此不能被重写,子类中的同名静态方法会被视为隐藏而非重写。 #### 九、不可变对象 - **定义**:对象创建后其状态不能改变,任何更改操作都会创建一个新的对象,例如String、Integer等包装类。 #### 十、静态变量与实例变量的区别 - **存储位置**:静态变量存放在方法区,属于类;实例变量存放在堆中,属于对象。 - **生命周期**:静态变量随着类的加载而加载,随着类的消失而消失;实例变量随着对象的创建而存在,随着对象的销毁而消失。 #### 十一、能否创建包含可变对象的不可变对象 - **可以**:只要不暴露可变对象的引用,就可以创建这样的不可变对象。如果需要修改可变对象,则返回它的拷贝。 #### 十二、Java创建对象的方式 - **使用new关键字**:最常用的方式,明确指定对象的创建。 - **通过反射**:利用Class类或Constructor类的newInstance()方法创建对象。 - **使用clone方法**:实现Cloneable接口并通过clone()方法复制对象。 - **通过序列化**:通过反序列化过程创建对象。 #### 十三、switch语句的支持类型 - 在Java 1.7之前,switch支持byte, short, char, int或它们的封装类型以及枚举类型。 - Java 1.7之后,switch还支持String类型。 #### 十四、关于字符串的比较 - **Strings1="ab"** 和 **Strings2="a"+"b"**:s2在编译时被优化为"ab",存放在常量池中;s5=s3+s4则是在运行时创建的新对象,因此s5==s2返回false。 #### 十五、String对象的intern()方法 - intern()方法检查字符串池中是否已经包含一个等于此String对象的字符串,如果存在,则返回池中的字符串;如果不存在,则将此String对象添加到池中并返回池中的字符串。 #### 十六、Object类的公共方法 - **equals()**:比较两个对象是否相等。 - **clone()**:创建对象的副本。 - **getClass()**:获取对象的类信息。 - **notify()** 和 **notifyAll()**:唤醒等待队列中的线程。 - **wait()**:让当前线程等待。 - **toString()**:返回对象的字符串表示形式。 #### 十七、Java中的四种引用类型 - **强引用**:最常用的引用类型,被强引用关联的对象不会被垃圾回收器回收。 - **软引用**:在内存不足时,软引用关联的对象可能会被回收。 - **弱引用**:弱引用的对象随时都可能被回收。 - **虚引用**:虚引用的主要用途是跟踪对象的垃圾回收状态。 #### 十八、WeakReference与SoftReference的区别 - **软引用**:当内存空间足够时,软引用可以长时间存在,只有在内存不足时才会被回收。 - **弱引用**:只要发生垃圾回收,不管内存是否足够,弱引用都会被回收。弱引用比软引用更容易被回收。 通过以上内容的详细介绍,我们可以看出Java语言的强大之处不仅在于其丰富的特性和灵活性,更在于其严谨的设计思想和强大的运行时机制。对于求职者来说,掌握这些基础知识是非常重要的,不仅能帮助他们在面试中脱颖而出,还能为今后的职业发展打下坚实的基础。