Java面试复习—Java基础

Java面试复习—Java基础


前言

本文是Java面试复习系列中的Java基础篇,后面会陆续有该系列其他篇章,并且会一直维护。本系列都为网上资源整理而来,如有问题,及时联系。


java基础

1.重载和重写

  • 重载:见名知意,就是重新载入该方法。所以方法名必须相同,但参数列表可以不同。在一个类中。
  • 重写:就是抄一遍该方法。所以方法名和参数列表必须相同。出现在继承中。

2.String、StringBuffer、StringBuilder

StringSTRING BUFFERSTRING BUILDER
可变性不可变可变可变
线程安全安全(对象不可变)安全(同步锁)不安全
性能
总结操作少量数据数据量大、多线程数据量大、单线程

3.装箱与拆箱

  • 装箱:将基本类型用对应的引用类型包装(基本–>引用)
  • 拆箱:将包装类型转换为基本的数据类型(引用–>基本)

4.==与equals

  • ==判断地址是否相等
  • equals重写之后比较对象的值是否相等,否则等效==
    • String重写equals,Object没有

5.final关键字

  • 变量
    • 基本类型:初始化之后不能更改
    • 引用类型:初始化之后不能指向另一个对象
  • 方法:锁定方法、效率
  • 类:不能被继承

6.Throwable类

  • Exception(异常)
    • 程序本身可以处理
  • Error(错误)
    • 程序无法处理
  • 方法:
    • getMessage():返回异常发生时的详细信息
    • toString():返回异常发生时的简要描述
    • printStackTrace():在控制台上打印Throwable对象封装的异常信息
  • try catcah以及finally
    • try 捕获异常
    • catch 处理捕获的异常
    • finally
      • 无论是否捕获或处理异常,finally块里面的语句都会被执行
      • 以下4种情况不会执行:
        • finally中发生了异常
        • 在finally前使用了System.exit()退出程序
        • 程序所在线程死亡
        • 关闭CPU

7.接口和抽象类

  • 相同点
    • 都不能被实例化
    • 实现了接口或者抽象类的方法之后才能实例化
  • 区别(从上而下记忆)
接口(注重扩展、维护性)抽象类(提供公共的实现代码)
publicpublic protect default
实例变量默认final不一定为final
一个类可以实现多个接口继承一个抽象类
实现接口的所有方法可以不实现所有方法
不能使用new实例化,但是可以声明不能实例化
在接口中的方法不能实现可以有非抽象的方法

8.System.out.println(3|9)输出什么?

正确答案:11.

考察知识点:&和&& |和||

  • &和&&:
    • 共同点:两者都可做逻辑运算符。它们都表示运算符的两边都是true时,结果为true;
    • 不同点: &也是位运算符。& 表示在运算时两边都会计算,然后再判断;&&表示先运算符号左边的东西,然后判断是 否为true,是true就继续运算右边的然后判断并输出,是false就停下来直接输出不会再运行后面的东西。
  • |和||:
    • 共同点:两者都可做逻辑运算符。它们都表示运算符的两边任意一边为true,结果为true,两边都不是true,结果就 为false;
    • 不同点:|也是位运算符。| 表示两边都会运算,然后再判断结果;|| 表示先运算符号左边的东西,然后判断是否为 true,是true就停下来直接输出不会再运行后面的东西,是false就继续运算右边的然后判断并输出。

回到本题: 3 | 9=0011(二进制) | 1001(二进制)=1011(二进制)=11(十进制)

9.面向对象的特征

  • 封装
  • 继承
  • 多态
  • 抽象

10.public、private、protected、default

作用域当前类同包子孙类其他
public
protect
default
private

11.heap 和 stack 有什么区别?

  • 栈是一种线形集合,其添加和删除元素的操作应在同一段完成,栈按照后进 先出的方式进行处理
  • 堆是栈的一个组成元素。

12.swtich 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上?

  • switch(expr1)中,expr1 是一个整数表达式。
  • 因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用 于 swtich。

13.用最有效率的方法算出 2 乘以 8 等於几?

答: 2 << 3。

  • 左移一位相当于*2
  • 右移一位相当于/2

14.有没有 length()这个方法?String 有没有 length()这个方法?

  • 数组没有 length()这个方法,有 length 的属性。
  • String 有 length()这个 方法。

15.是否可以继承 String 类?

  • String 类是 final 类,故不可以继承。

16.静态内部类和内部类的区别

  • 静态内部类是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。
  • 内部类需要在外部类实例化后才能实例化。

17.静态变量和实例变量的区别

  • 静态变量也称为类变量,归全类共有,它不依赖于某个对象,可通过类名直 接访问
  • 实例变量必须依存于某一实例,只能通过对象才能访问到它

18.是否可以从一个 static 方法内部发出对非 static 方法的调用

  • 不可以,如果其中包含对象的 method(),不能保证对象初始化

19.String s=new String(“xyz”);创建了几个 String Object?

  • 两个对象
    • 一个是"xyx"
    • 一个是指向"xyx"的引用对象 s。

20.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

  • 接口可以继承接口。
  • 抽象类可以实现(implements)接口。
  • 抽象类可继承实体类,但前提是实体类必须有明确的构造函数

21.内部类可以引用他包含类的成员吗?有没有什么限制?

  • 一个内部类对象可以访问创建它的外部类对象的内容。

22.java 中实现多态的机制是什么?

  • 方法的覆盖 Overriding 和重载 Overloading 是 java 多态性的不同表现
    • 覆盖 Overriding 是父类与子类之间多态性的一种表现,重载 Overloading 是一个 类中多态性的一种表现

23.日期和时间

  • 如何取得年月日、小时分秒?
    • 创建 java.util.Calendar 实例(Calendar.getInstance()),调用其 get() 方法传入不同的参数即可获得参数所对应的值
      • 如: calendar.get(Calendar.YEAR);
  • 如何取得从 1970 年到现在的毫秒数?
    • Calendar.getInstance().getTimeInMillis(); System.currentTimeMillis()
  • 如何取得某个日期是当月的最后一天?
    • Calendar time = Calendar.getInstance(); time.set(Calendar.DAY_OF_MONTH, time.getActualMaximum(Calendar.DAY_OF_MONTH))
  • 如何格式化日期?
    • 利用 java.text.DataFormat 类中的 format()方法可将日期格式化。

24.java 和 javasciprt 的区别

  • JavaScript 与 Java 是两个公司开发的不同的两个产品。
    • Java 是 SUN 公司推 出的新一代面向对象的程序设计语言,特别适合于 Internet 应用程序开发, Java 的前身是 Oak 语言。
    • JavaScript 是 Netscape 公司的产品,其目的是为了扩展 Netscape Navigator 功能,而开发的一种可以嵌入 Web 页面中的基于对象和事件驱动的解释性语言,它的前身是 Live Script;
  • 下面对两种语言间的异同作如下比较:
    • 基于对象和面向对象:
      • Java 是一种真正的面向对象的语言,即使是开发简单的程序,必须设计对象;
      • JavaScript 是种脚本语言,它可以用来制作与网络无关的,与用户交互作用的复杂软件。它是一种基于对象(Object Based)和事件驱动(Event Driver) 的编程语言。因而它本身提供了非常丰富的内部对象供设计人员使用;
    • 解释和编译:
      • Java 的源代码在执行之前,必须经过编译;
      • JavaScript 是一种解释性编程语言,其源代码不需经过编译,由浏览器解释执行;
    • 强类型变量和类型弱变量:
      • Java 采用强类型变量检查,即所有变量在编译之前必须作声明;
      • JavaScript 中变量声明,采用其弱类型。即变量在使用前不需作声明,而是 解释器在运行时检查其数据类型;
    • 代码格式不一样

java异常

1.error 和 exception 有什么区别?

  • error 表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况;
  • exception 表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。

2.try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会不会被执行,什么时候被执行,在 return 前还是后?

  • 会执行,在 return 前执行。

3.JAVA 语言如何进行异常处理,关键字:throws,throw,try,catch,finally 分别代表什么意义?在 try 块中可以抛出异常吗?

  • Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。
  • 在 Java 中,每个异常都是一个对象,它是 Throwable 类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。
  • Java 的异常处理是通过 5 个关键词来实现的:try、catch、throw、throws 和 finally。
    • 一 般情况下是用 try 来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理;
    • try 用来指定一块预防所有“异常”的程序;
    • catch 子句紧跟在 try 块后面,用来指定你想要捕捉的“异常”的类型;
    • throw 语句用来明确地抛出一个“异常”;
    • throws 用来标明一个成员函数可能抛出的各种“异常”;
    • Finally 为确保一段代码不管发生什么“异常”都被执行一段代码;

4.运行时异常与一般异常有何异同?

  • 异常表示程序运行过程中可能出现的非正常状态
  • 运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。
  • java 编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值