Java面试题整理

时间:2019-10-06
本文章向大家介绍Java面试题整理,主要包括Java面试题整理使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Java基础部分

  • Java的基本数据类型有哪些?String是基本数据类型?
    共八种:
    byte(8位),short(16位),int(32位) 默认值 0
    long(64位) 默认值 0L
    float(32位) 默认值 0.0f
    double (64位) 默认值 0.0d
    boolean(1位) 默认值 false
    char(16位) 单一的Unicode字符
    String不是基本类型,引用类型的对象。

  • 一个“.java”源文件中是否可包含多个类?有什么限制?
    一个java文件中可包含多个类,但只能有一个public类,且其类名与文件名相同。

  • &和&&的异同
    同:&和&&和都可以作逻辑与运算符
    异:
    &&作逻辑与运算符时具有短路功能
    &可用作位的与运算符
// 若str为null时,不会抛出异常,因短路,equals不执行
if(str != null && !str.equals(""))
// 若若str为null时,抛出NullPointerException异常,equals执行
if(str != null & !str.equals(""))
  • switch语句能否作用在byte上,能否用在long,String上?
    switch(expr)中变量类型可以是byteshortintchar及对应的包装类
    从JavaSE 5 后可以是枚举类型
    从JavaSE 7后可以支持String
    不可用作longdoublefloatboolean及其包装类上

  • short s1 = 1;s1 = s1+1;有什么错?short s1 = 1;s1+=1;呢?
    前者会报需要强制转换类型的错,因:
short s1 = 1;
// s1 + 1运算时结果会转化为int类型
// int无法自得转为short
s1 = s1 + 1;

后者编译通过,因:
在Java中编译器会对s1 += 1作特殊处理
(Tyep) a + = b操作等于(Type) a = (Type)(a + b)
所以已经转型过了,无错误。

  • 使用final关键字修饰一个变量时,时引用不能变,还是引用对象不能变?
    final修饰的变量,引用不能变,但引用的对象能变

    <https://www.cnblogs.com/guweiwei/p/6594552.html>
    补充: final关键字

  • “==”和equals方法的区别?
    ==操作符专门用来比较两个变量的值是否相等, 也就是用于比较变量所对应的内存中所存
    储的数值是否相同, 要比较两个基本类型的数据或两个引用变量是否相等, 只能用==操作
    符。
    如果一个变量指向的数据是对象类型的, 那么, 这时候涉及了两块内存, 对象本身占用一块
    内存(堆内存) , 变量也占用一块内存, 例如 Objet obj = new Object();变量 obj 是一个内存,
    new Object()是另一个内存, 此时, 变量 obj 所对应的内存中存储的数值就是对象占用的那块
    内存的首地址。 对于指向对象类型的变量, 如果要比较两个变量是否指向同一个对象, 即要
    看这两个变量所对应的内存中的数值是否相等, 这时候就需要用==操作符进行比较。
    equals 方法是用于比较两个独立对象的内容是否相同, 就好比去比较两个人的长相是否相
    同, 它比较的两个对象是独立的。 例如, 对于下面的代码:
    String a=new String("foo");
    String b=new String("foo");
    两条 new 语句创建了两个对象, 然后用 a,b 这两个变量分别指向了其中一个对象, 这是两个
    不同的对象, 它们的首地址是不同的, 即 a 和 b 中存储的数值是不相同的, 所以, 表达式
    a==b 将返回 false, 而这两个对象中的内容是相同的, 所以, 表达式 a.equals(b)将返回 true。

  • 静态变量和实例变量的区别?
    语法定义上的区别:静态变量要用static修饰,实例变量不用;
    程序运行时的区别:静态变量在加载字节码文件时就会分配到空间,而实例变量要创建对象后才分配空间。
    使用时的区别:静态变量通过类名.变量调用,实例变量对象.变量调用。

  • 是否可从一个static方法内发出对非static方法的调用?
    不可以,要调用非static方法必须要有对象,但调用static方法时可能还没有产生对象。

  • Integer与int的区别?
    Integerint的封装类,Integer的默认值为null,int的默认值为0
    Integer可区分0和null的情况,int则不行
    Integer中还提供了多个与整数相关的方法。

  • Overload和Override的区别,Overloaded的方法是否可以改变返回值的类型?
    Overload是方法重载,指同一类中可以有多个相同名称的方法,但参数不同,返回值可相同也可不同。
    Override是方法重写,指子类在继承父类时,重写父类中的同名同参的方法,相当于将其方法内容覆盖。但子类只能抛出比父类更少的异常,或者父类的子异常。

  • Servlet的生命周期?
    Servlet 被服务器实例化后,容器运行其 init 方法, 请求到达时运行其 service 方法, service方法自动派遣运行与请求对应的 doXXX 方法(doGet, doPost) 等, 当服务器决定将实例销毁时候调用其 destroy方法。

  • 面向对象编程的特性?
    抽象,封装,继承,多态

  • 接口和抽象类的区别?
    1.接口中所有的方法都是抽象的,而抽象类里既可以有抽象方法,也可有非抽象方法;
    2.类可以实现多个接口,但只能继承一个抽象类;
    3.抽象类可以在不提供接口方法的情况下实现接口;
    4.接口中声明的变是默认是final的,抽象类可包含非final的变量;
    5.接口和抽象类都不可以被实例化,但抽象类中若有main方法的话是可被调用的。

  • 创建线程有几种不同的方式
    1.继承Thread类;
    2.实现Runnable接口;
    3.可使用Executor框架来创建线程池

原文地址:https://www.cnblogs.com/flytree/p/11628289.html