在互联网大厂的 Java 求职者面试现场,面试官严肃地看着面前的程序员王铁牛,开始了第一轮提问。
面试官:请你说说 Java 的基本数据类型有哪些? 王铁牛:有 byte、short、int、long、float、double、char、boolean 这几种。 面试官:不错,那这些数据类型在内存中的存储大小分别是多少呢? 王铁牛:byte 占 1 字节,short 占 2 字节,int 占 4 字节,long 占 8 字节,float 占 4 字节,double 占 8 字节,char 占 2 字节,boolean 占 1 比特。 面试官:很好,那你再说说 Java 中的访问修饰符有哪些及其作用? 王铁牛:有 private、protected、public 和默认(不写修饰符)。private 用于类内部访问,protected 用于子类和同一包内访问,public 可在任何地方访问,默认修饰符用于同一包内访问。
第一轮提问结束,面试官微微点头,露出赞许的表情。
接着进入第二轮提问。
面试官:请解释一下 Java 中的面向对象三大特性是什么? 王铁牛:分别是封装、继承和多态。封装是将数据和操作封装在类中,隐藏内部实现细节;继承是子类继承父类的属性和方法;多态是同一操作作用于不同的对象可以有不同的表现形式。 面试官:那在继承中,子类构造函数的执行顺序是怎样的? 王铁牛:子类构造函数会先调用父类的构造函数,然后再执行自身的构造函数。如果父类有多个构造函数,会根据参数选择合适的父类构造函数调用。 面试官:很好,那你说说多态是如何实现的? 王铁牛:通过方法重写和父类引用指向子类对象来实现。当调用父类的方法时,实际执行的是子类重写后的方法。
第二轮提问完毕,面试官再次点头,脸上露出满意的神色。
开始第三轮提问。
面试官:请谈谈 Java 中的异常处理机制。 王铁牛:异常处理机制主要用于处理程序运行时可能出现的异常情况。可以使用 try-catch 语句捕获异常,也可以使用 throws 关键字将异常抛出给调用者处理。 面试官:那在 try-catch 语句中,finally 块的作用是什么? 王铁牛:finally 块用于无论是否发生异常,都会执行的代码,通常用于资源释放等操作。 面试官:最后,说说常见的运行时异常和受检异常有哪些? 王铁牛:常见的运行时异常有 NullPointerException、ArrayIndexOutOfBoundsException 等;受检异常有 IOException、SQLException 等。
第三轮提问结束,面试官微笑着对王铁牛说:“今天的面试就到这里,你可以先回去等通知,我们会尽快给你回复。”
以下是各问题的答案:
- Java 的基本数据类型及内存存储大小:
- byte:占 1 字节,范围是 -128 到 127。
- short:占 2 字节,范围是 -32768 到 32767。
- int:占 4 字节,范围是 -2147483648 到 2147483647。
- long:占 8 字节,范围是很大的整数。
- float:占 4 字节,用于表示单精度浮点数。
- double:占 8 字节,用于表示双精度浮点数。
- char:占 2 字节,用于存储字符。
- boolean:占 1 比特,只有 true 和 false 两个值。
- Java 中的访问修饰符及其作用:
- private:用于类内部访问,限制属性和方法只能在本类中被访问,保证了类的封装性。
- protected:用于子类和同一包内访问,子类可以访问父类的 protected 成员,同一包内的其他类也可以访问。
- public:可在任何地方访问,用于公开类、属性和方法,方便其他类调用。
- 默认(不写修饰符):用于同一包内访问,在同一包内的其他类可以访问默认修饰的成员,包外不可访问。
- Java 中的面向对象三大特性:
- 封装:将数据和操作封装在类中,通过设置访问修饰符来控制对内部成员的访问,隐藏了内部实现细节,提高了代码的安全性和可维护性。
- 继承:子类继承父类的属性和方法,子类可以扩展父类的功能或重写父类的方法,实现代码的复用和层次结构的建立。
- 多态:同一操作作用于不同的对象可以有不同的表现形式。通过方法重写和父类引用指向子类对象来实现,增加了代码的灵活性和扩展性。
- Java 中的异常处理机制:
- try-catch 语句用于捕获异常,try 块中放置可能会抛出异常的代码,catch 块用于捕获并处理特定类型的异常。
- throws 关键字用于将异常抛出给调用者处理,方法声明中使用 throws 关键字可以声明该方法可能会抛出的异常。
- finally 块用于无论是否发生异常,都会执行的代码,通常用于资源释放,如关闭文件、数据库连接等,确保资源的正确释放。
- 常见的运行时异常和受检异常:
- 运行时异常:是程序在运行时可能出现的异常,通常是由于程序员的错误导致的,如 NullPointerException(空指针异常)、ArrayIndexOutOfBoundsException(数组越界异常)等。这些异常不需要在方法声明中声明抛出。
- 受检异常:是必须在方法声明中声明抛出的异常,通常是由于外部因素导致的,如 IOException(输入输出异常)、SQLException(数据库操作异常)等。如果方法可能会抛出受检异常,必须在方法声明中使用 throws 关键字声明,或者在方法内部使用 try-catch 语句捕获并处理异常。