常见面试题之java基础

常见面试题之java基础

1.java面向对象的三大特征

  • 封装:将客观事物抽象成类,每个类对自身的数据和方法进行保护;
  • 继承:对象的一个新类可从现有的一个类派生,这个过程被称为继承(也就是一个新的类可以继承原有类的属性和方法);
  • 多态:同一个行为具有多个不同的表现形式或形态的能力(我的理解是不同子类继承父类的方法后,各子类在方法中的实现是不同);

2.int与integer的区别

  1. int是java的一种基本数据类型,integer是int的包装类;
  2. integer必须要实例化(实例化是指面向对象的编程中,类创建对象的过程称为实例化)后才能使用,而int不需要;
  3. integer实际是对象的引用,当new一个integer时,实际上是生成一个指针指向对象,而int则是直接存储数据值;
  4. integer的默认值是null,int默认值是0;

3.String,StringBuffer,StringBuilder的区别

java中字符串属于对象,java提供了String类来创建和操作字符串
(1)字符操作上的区别:

  1. String:不可变字符序列;
  2. StringBuffer:可变字符序列、效率低、线程安全;
  3. StringBuilder:可变字符序列、效率高、线程不安全;

(2)初始化上的区别,String可以赋值为空,而StringBuffer和StringBuilder不行
小结:

  1. 如果操作少量的数据用String;
  2. 多线程操作字符串缓冲区下操作大量数据用StringBuffer;
  3. 单线程操作字符串缓冲区下操作大量数据用StringBuilder;

4.异常的种类

Exception:可捕获异常,出现的问题是可以捕获的;
Error:系统错误,通常有JVM处理;
可捕获异常又分为两类:

  1. RuntimeException类及其子类异常,又被称为非强制性异常,通常可以由throw语句抛出这种异常(编译时被检查的异常);
  2. check异常,又被称为强制性异常,基本上由Exception类派生而来(编译时不被检查的异常,编译通过)。

5.运行时异常和check异常的区别

  1. 运行时异常在定义方法是不需要声明也会被抛出,不需要被捕获;非运行时异常在调用这个方法时必须声明捕获这个check异常;
  2. 运行时异常通常是代码编译错误引起的,是一种调用方本身也无法处理的异常;非运行时异常是一种调用方法捕获抛出就可以处理的情况。

6.final,finally,finalize的区别

  • final声明属性、方法、类,分别表示属性不可变,方法不可被覆盖(即方法不可被重写),类不可被继承;
  • finally是处理异常结构try/catch模块的一部分,表示总是被执行;
  • finallize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法。

7.转发与重定向的区别

  • 转发url地址保持不变,只发送了一次请求(举个例子,转发就相当于甲托乙办事,乙找到丙办理此事,请求没变化,只有一次);
  • 重定向url地址发生变化,发送了两次请求(重定向相当于甲托乙办事,乙办不成,甲又重新找到丙办理的此事,甲相当于有了两次请求);

8.方法重写和方法重载的区别
(1)方法重载

  • 方法重载在同一个类中,方法名相同
  • 使用重载时只能通过不同的参数列表;
  • 方法的异常类型和数目不会对重载造成影响;
  • 与访问修饰符,返回类型无关;
  • 可以抛出不同的异常;

(2)方法重写

  • 方法重写必须写在继承关系中,子类方法名和父类一样
  • 父类的参数列表和子类重写方法的参数列表相同;
  • 父类的返回类型和子类重写方法的返回类型相同;
  • 子类的访问修饰符不能严于父类;

(3)构造函数不能被继承,构造方法可以重载不能被重写

9.抽象类与接口的区别

  1. 抽象类中可以有构造方法,接口中不能有构造方法;
  2. 抽象类中可以有普通成员变量,接口中没有普通成员变量;
  3. 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须是抽象的。

10.静态方法与实例方法的区别

  1. 静态方法用static修饰,实例方法没有;
  2. 静态方法在访问本类的成员时,只允许访问静态成员(即本类中静态成员变量和静态方法),实例方法没有限制条件;
  3. 在访问外部类时,调用静态方法可以用“类名.方法名”,也可以用"对象名.方法名",而实例方法调用只能用后面那种形式。

11.List和Set的区别

  • List存储数据是有序的队列,允许有重复的元素(有序不唯一);
  • Set存储数据是无序的队列,不允许有重复的元素(无序不唯一),Set一般对基本数据类型的数据会自动去重,对象不可以;
  • Map存储键值对的数据;
  • List和Set是继承Collection接口的,而Map不是。

12.ArraryList、LinkedList、HashSet、Vector比较

  • ArraryList是数组结构,增删慢,查找快,非线程安全;
  • LinkedList是链表结构,增删快,查找慢,非线程安全;
  • HashSet是非线程安全;
  • Vector是线程安全的。

13.HashMap和HashTable比较

  • HashMap是非线程安全的,HashTable是线程安全的,HashMap的效率要高于HashTable;
  • HashMap允许将null作为key或value,HashTable则不允许。

14.访问修饰符比较

作用域当前类同一包中子类其他
public
protected×
default××
private×××

15.运算符i++和++i的区别

  1. i++是先赋值再加,++i是先加再赋值;
  2. ++i的效率要高于i++;
  3. ++i可以左值,i++不可以。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值