您的位置 首页 java

Java基础面试题「3」

9. 构造器 Constructor 是否可被 override 在讲继承的时候我们就知道父类的私有属性和 构造方法 并不能被继承,所以 Constructor 也就不能被 override(重写),但是可以 overload(重载),所以 你可以看到一个类中有多个 构造函数 的情况。

10. 重载 和重写的区别 重载: 发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序 不同,方法返回值和访问修饰符可以不同,发生在编译时。 重写: 发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父 类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类 方法访问修饰符为 享学课堂 private 则子类就不能重写该方法。

11. Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法, 如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个 类没有提供给外界访问的方法,那么这个类也没有什么意义了。 继承 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加 新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过 使用继承我们能够非常方便地复用以前的代码。

关于继承如下 3 点请记住: 1. 子类拥有父类非 private 的属性和方法。 2. 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。 3. 子类可以用自己的方式实现父类的方法。(以后介绍)。 多态 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发 出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变 量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中 实现的方法,必须在由程序运行期间才能决定。 在 java 中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接 口(实现接口并覆盖接口中同一方法)。

12. String StringBuffer 和 StringBuilder 的区别 是什么 String 为什么是不可变的 可变性 享学课堂 简单的来说:String 类中使用 final 关键字字符数组保存字符串,private final char value[],所以 String 对象是不可变的。而 StringBuilder 与 StringBuffer 都继承自 abstract StringBuilder 类,在 AbstractStringBuilder 中 也是使用 字符数组 保存 字符串 char[]value 但是没有用 final 关键字修饰,所以 这两种对象都是可变的。 StringBuilder 与 StringBuffer 的构造方法都是调用父类构造方法也就是 AbstractStringBuilder 实现的,大家可以自行查阅源码。

Abstract StringBuilder.java abstract class AbstractStringBuilder implements append able, CharSequence { char[] value; int count; AbstractStringBuilder()

{ } AbstractStringBuilder(int capacity) { value = new char[capacity]; }

线程安全性 String 中的对象是不可变的,也就可以理解为常量,线程安全。 AbstractStringBuilder 是 StringBuilder 与 StringBuffer 的公共父类,定义了 一些字符串的基本操作,如 expandCapacity、append、insert、indexOf 等公 共方法。StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以 是 线程 安全的。StringBuilder 并没有对方法进行加同步锁,所以是非线程安全 的。 性能 每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将 指针指向新的 享学课堂 String 对象。

StringBuffer 每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用 StringBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升, 但却要冒 多线程 不安全的风险。 对于三者使用的总结: 1. 操作少量的数据 = String 2. 单线程操作字符串缓冲区下操作大量数据 = StringBuilder 3. 多线程操作字符串缓冲区下操作大量数据 = StringBuffer

13. 自动装箱与拆箱 装箱:将基本类型用它们对应的引用类型包装起来; 拆箱:将包装类型转换为基本数据类型;

14. 在一个 静态方法 内调用一个非静态成员为什么是 非法的 由于静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非 静态变量,也不可以访问非静态变量成员。

15. 在 Java 中定义一个不做事且没有参数的构造 方法的作用 Java 程序在执行子类的构造方法之前,如果没有用 super() 来调用父类特定 的构造方法,则会调用父类中“没有参数的构造方法”。因此,如果父类中只定 义了有参数的构造方法,而在子类的构造方法中又没有用 super() 来调用父类 中特定的构造方法,则编译时将发生错误,因为 Java 程序在父类中找不到没 有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数 的构造方法。

16. import java 和 javax 有什么区别 刚开始的时候 JavaAPI 所必需的包是 java 开头的包,javax 当时只是扩展 API 包来说使用。然而随着时间的推移,javax 逐渐的扩展成为 Java API 的组 成部分。但是,将扩展从 javax 包移动到 java 包将是太麻烦了,最终会破坏 一堆现有的代码。因此,最终决定 javax 包将成为标准 API 的一部分。 所以,实际上 java 和 javax 没有区别。这都是一个名字。

文章来源:智云一二三科技

文章标题:Java基础面试题「3」

文章地址:https://www.zhihuclub.com/183245.shtml

关于作者: 智云科技

热门文章

网站地图