java重点知识总结(面试)

1.集合框架

在这里插入图片描述
在这里插入图片描述

Java集合按照其存储结构可以分为两大类,即单列集合Collection和双列集合Map
Collection是单列集合类的根接口,其有两个重要子接口 ListSet
List接口的主要类有 ArrayList 和 LinkedList
Set接口的主要类有 HashSetTreeSet
Map接口的主要实现类有HashMapTreeMap

各接口的特点:
List 接口存储一组不唯一,有序(插入顺序)的对象
Set 接口存储一组唯一,无序的对象
Map接口存储一组键值对象,提供key到value的映射

ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高。

LinkedList采用链表存储方式。插入、删除元素时效率比较高。

2.equals和==的区别

equals():检查组成字符串内容的字符是否完全一致
==:判断两个字符串在内存中的地址(堆内存),即判断是否是同一个字符串对象。

3.字符串

Java把内存分成两种,一种叫做栈内存,一种叫做堆内存。
创建字符串对象有两种方式:一种是通过初始化的方式创建,例如以下代码:

String str="Hello";

另一种是使用new关键字创建,例如以下代码:

String str = new String("Hello");

Java为了避免产生大量的字符串对象,设计了一个字符串池(String Pool),通过初始化方式创建的字符串对象都会存在于字符串池中,且字符串池中的字符串不会重复,以便可以被共享使用,提高存储效率。

例子:

String str1 = new String(“Hello”);
在这里插入图片描述
String str3 = “Hello”;
在这里插入图片描述
总结一下:
初始化的方式,检查字符串池中是否有,如果没有,在字符串池中创建对象,如果有,则将该对象的引用赋给变量。
使用new关键字创建,先检查字符串池中是否有该对象,没有则在字符串池创建该对象,在堆内存也创建该对象,并将堆内存中的对象的引用赋给变量;如果在字符串池中存在该对象,则只在堆内存中创建该对象,将堆内存中的对象的引用赋给变量。

4.面向对象的三大特征?

1)封装
封装就是隐藏对象的属性和实现细节,仅对外公开接口,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。
封装的目的是增强安全性和简化编程。
2)继承
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
继承是Java面向对象编程技术的一块基石,它允许创建分等级层次的类。
3)多态
多态是指,同一个事件发生在不同的对象上会产生不同的结果。多态机制使具有不同内部结构的对象可以共享相同的外部接口。
多态的实现步骤:
(1)编写父类
(2)编写子类,子类重写父类方法
(3)运行时,使用父类的类型、子类的对象
实现多态的两种形式:
使用父类作为方法形参实现多态
使用父类作为方法返回值实现多态

5.重载和重写的区别?

重写
从字面上看,重写就是 重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型都相同的情况下, 对方法体进行修改或重写,这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。
重载

在一个类中,允许多个方法重名,只要保证方法签名(参数个数、参数类型、类型排列顺序)不同即可,这种特性称为方法重载(overload)。
注意:
返回值不影响方法重载。
构造方法也可以重载

两者区别:

方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类的重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。
(方法签名包括参数列表和方法名)

6.处理异常的方式?

1.捕获异常
try:执行可能产生异常的代码。
catch:捕获异常。
finally:无论是否发生异常,代码总能执行。
2.声明异常
throws:在声明方法抛出各种异常。
3.抛出异常
throw:手动建立异常对象抛出异常。

7.为什么使用泛型?

使用泛型可以在编译的时候检查类型安全,消除强制类型转换,泛型为较大的优化带来可能,这是他潜在的性能优势。

++i和i++的区别

在区分这两个之前,我们先来了解一下它们的运算规则

int i=1,a=0;

 i++ 先赋值在运算,例如 a=i++,先赋值a=i,后运算i=i+1,所以结果是a==1
 ++i 先运算在赋值,例如 a=++i,先运算i=i+1,后赋值a=i,所以结果是a==2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值