JavaSE面试知识点(3)

  JAVA基础面试总结(1)

JAVA基础面试总结(2)

JAVA基础面试总结(4)

1.接口

格式  public interface 接口名{}

接口不能定义构造器,所以接口不能被实例

在开发中我们通常都是让一个类去实现一个接口然后实现接口中的方法,然后使用这个类。如果这个类实现了接口中的全部方法那么这个类可以实例化对象。如果这个类只是实现了接口中的部分方法,那么这个类就必须声明为抽象类。

接口可以多继承

   格式 public interface C extedns A,B{}

一个类可以实现多个接口

  格式 public class C implements A,B{}  

一个类可以在继承一个父类的同时实现一个或多个接口,但是extends关键字必须在implements之前  所以是先继承后实现

public class D extends C implements A,B{}

接口使用完成体现了多态性

 接口又叫特殊的抽象类。

单继承   一个类只能继承一个父类

多实现   一个类可以实现多个接口

2.接口和抽象类有什么区别?

相同点: 1.都不可以实例化 2.接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能实例化。

不同点:1.接口只有定义不能有方法的实现,java1.8可以定义default方法体,而抽象类可以定义与实现,方法可在抽象类中实现

2.实现接口的关键字为implements 继承抽象类的关键字为extends 一个类可以实现多个接口但一个类只能继承一个抽象类 所以使用接口可以间接的实现多重继承。

3.接口强调的是特定功能的实现,而抽象类强调所属关系

4.接口的成员变量默认为public static final 必须赋初始值 不能被修改 其所有的成员方法都是public abstract 的,抽象类中成变量默认都是default的 可以子类中重新定义,也可被重新赋值;抽象方法被abstract修饰不能被 private static 等修饰,必须以分号结束不能带花括号

3.多态

重写和重载也是多态的表现

用子类给父类赋值  父类对象指向子类对象

总结:编译,看左边;运行,看右边;属性看左边,方法看右边;

4.==和equals有什么区别?

比较基本数据类型  比较的==俩边的值是否相等

比较对象是比较的是内存地址是否相等  每new 对象就意味着在jvm中开辟一块内存  对象的地址永远不会相等

如果我们想要比较对象是否相等可以比较对象的值是否相等 我们就可以重写equals方法了

String类就重写了equals方法用来比较值是否相等

5.OOM

OutOfMermoryError(内存溢出)或者叫oom 叫做内存溢出的错误

6.异常

如果程序员不处理这个异常则编译报错

   比如说

        IOException io流异常

        FileNotFoundException 文件未找到异常

        EOFException 读写文件异常

RuntimeException 运行时异常

     运行的时候可能会发生的异常,但是不需要程序员在写代码的时候显示的处理。就在在运行时出现的异常。

ArrayIndexOutOfBoundsException  数组下标越界

       ArithmeticException  数学计算异常

NullPointerException  空指针异常

ClassNotFoundException 类文件为找到异常

NumberFormatException 数字格式转化异常

StringIndexOutOfBandException 字符串下标越界

IndexOutOfBandException 索引下标越界

7.throw和throws有什么区别

Throw 用来抛出异常对象 用在方法内部

Throws 用来声明异常类  用在参数列表和方法体之间 表示抛出的异常类

调用了声明异常的方法需要处理异常。

8.final finally finalize 这三者有什么区别?

Final 修饰的变量是常量 值不能被改变 在定义的时候需要初始化值

Final修饰的方法为最终方法不能被重写但是可以被重载

Final修饰的类不能被继承

Finally 是与try catch连用的语句 finally里的代码一定会被执行

Finalize() 是来自object类的一个方法  当对象要被GC垃圾回收时会调用该对象的finalize方法

9.Try catch finally 必须同时出现吗?

有try可以没有catch 但时后边得有finally

 Finally可以直接跟在try后边

有catch必须有try

Catch语句可以有多个  但是try和finally只能有一个 而且try catch finally都不可以单独存在

10.String类能不能被继承

String类是被final修饰的所以不能被继承

11.String StringBuffer  StringBuilder都有什么区别?

String 是不可变的字符串类型 连接效率低

StringBuffer是可变的字符串类型  连接效率高于String 线程安全

StringBuilder 是可变的字符串类型  连接效率高于StringBuffer  线程不安全

 了解: 线程安全和不安全要放在多线程环境下来说

12.SimpleDateFormat

format(参数) 参数为时间类型  它可以把时间类型转化为字符串类型

Parse(参数)  参数为字符串类型  它可以把字符串类型转化为时间类型

因为parse方法中声明了异常所以我们在调用的时候需要处理异常

13.ArrayList  LinkedList以及Vector有什么区别

ArrayList 作为List接口的主要实现类底层使用Object[] elementData存储  线程不安全,查询添加(添加不是插入) 速度快

LinkedList 线程不安全  底层使用双向链表存储  其内每个对象除了数据本身外还有俩个引用分别指向前一个和后一个元素

Vector  作为List接口的古老实现类  线程安全效率低  底层也是使用Object[] elementData存储

总结: ArrayList存取速度快  插入删除慢

LinkedList 存取速度慢  插入删除速度快

14.Set和List有什么区别?

有序和无序 是指你在添加数据时的顺序和输出的顺序

List 是有序的 有下标  list中的对象可以重复

Set 无序  无下标  set中存储的对象不可以重复

List中可以存放null 而set中可以存储null但是treeSet中存储后不能调用否则空指针。

15.Collection Collections Set List有什么区别?

1.List和set都是接口 他们都是继承与接口Collection ,list是一个有序的可重复的集合而set是无序不可重复的集合。2.Collection是集合的顶层接口,Collections是一个封装了众多关于集合操作的静态方法的工具类因为构造方法是私有的所以不能被实例化。List接口的实现类有ArrayList LinkedList Vector  ,ArrayList和Vector是基于数组实现的。所以查询的时候速度快,而在进行增加和删除的时候速度较慢,LinkedList 是基于链表的所以在查询的时候速度较慢 但是在进行增加和删除是速度较快,又因为Vector是线程安全 的,所以它和ArrayList相比,查询速度要低。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值