Java基础

简介:

基础语法与面向对象
1.1 重载与重写的区别
● 重载是对象的方法之间,它们方法名相同,但方法的参数列表不同
● 重写是父子类(包括接口与实现类)中两个同名方法,它们方法名相同,且方法的参数列表相同
● 重载在编译阶段,由编译器根据传递给方法的参数来区分方法,例如
● 而重写是在运行阶段,由虚拟机解释器去获取引用对象的实际类型,根据类型才能确定该调用哪个方法,例如
● 有没有发生重写,可以使用 @Override 来检查
MyObject obj = ...
obj.test(123); // 应该是调用 test(int x) 这个方法
obj.test("abc"); // 应该是调用 test(String x) 这个方法
Super obj = ...
obj.test(); // 到底是调用父类,还是子类的 test 方法,必须检查引用对象的实际类型才能确定
P.S.
● 括号内的说明是为了严谨,自己知道就行,回答时不必说出,这样比较简洁
● 个人觉得,在回答方法重载时,不必去细说什么参数的类型、个数、顺序,就说参数列表不同就完了
● 个人觉得,重点在于点出:重载是编译时由编译器来区分方法,而重写是运行时由解释器来区分方法
● 语法细节,问了再说,不问不必说
○ 重写时,子类方法的访问修饰符要 >= 父类方法的访问修饰符
○ 重写时,子类方法抛出的检查异常类型要 <= 父类方法抛出的检查异常类型,或子类不抛异常
○ 重写时,父子类的方法的返回值类型要一样,或子类方法返回值是父类方法返回值的子类
1.2 == 与 equals 的区别
● 对于基本类型,== 是比较两边的值是否相同
● 对于引用类型,== 是比较两边的引用地址是否相同,用来判断是否引用着同一对象
● equals 要看实现
○ Object.equals(Object other) 的内部实现就是 ==,即判断当前对象和 other 是否引用着同一对象
○ 比如 String,它的内部实现就是去比较两个字符串中每个字符是否相同,比较的是内容
○ 比如 ArrayList,它的内部实现就是去比较两个集合中每个元素是否 equals,比较的也是内容

1.3 String,StringBuilder 和 StringBuffer 的区别
● 它们都可以用来表示字符串对象
● String 表示的字符串是不可变的,而后两者表示的字符串是内容可变的(可以增、删、改字符串里的内容)
● StringBuilder 不是线程安全的,StringBuffer 是线程安全的,而 String 也算是线程安全的
适用场景
● 大部分场景下使用 String 就足够了
● 如果有大量字符串拼接的需求,建议用后两者,此时
○ 此字符串对象需要被多线程同时访问,用 StringBuffer 保证安全
○ 此字符串对象只在线程内被使用,用 StringBuilder 足够了
另外针对 String 类是 final 修饰会提一些问题,把握下面几点
● 本质是因为 String 要设计成不可变的,final 只是条件之一
● 不可变的好处有很多:线程安全、可以缓存等

1.4 说说 Java 中的异常

异常的重要继承关系如图所示,其中
● Throwable 是其它异常类型的顶层父类
● Error 表示无法恢复的错误,例如 OutOfMemoryError 内存溢出、StackOverflowError 栈溢出等
○ 这类异常即使捕捉住,通常也无法让程序恢复正常运行
● Exception 表示可恢复的错误,处理方式有两种
○ 一是自己处理,用 catch 语句捕捉后,可以进行一些补救(如记录日志、恢复初始状态等)
○ 二是用 throw 语句将异常继续抛给上一层调用者,由调用者去处理
● Exception 有特殊的子类异常 RuntimeException,它与 Exception 的不同之处在于
○ Exception 被称之为检查异常,意思是必须在语法层面对异常进行处理,要么 try-catch,要么 throws
○ RuntimeException 和它的子类被称为非检查异常(也可以翻译为字面意思:运行时异常),在语法层面对这类异常并不要求强制处理,不加 try-catch 和 throws 编译时也不会提示错误
● 常见的非检查异常有
○ 空指针异常
○ 算术异常(例如整数除零)
○ 数组索引越界异常
○ 类型转换异常
○ ...

相关文章
|
22小时前
|
存储 关系型数据库 MySQL
|
22小时前
|
存储 算法 Java
|
22小时前
|
Java 应用服务中间件 Linux
|
22小时前
|
Java
|
22小时前
|
Java 程序员 数据库连接
|
22小时前
|
存储 消息中间件 开发框架
应用架构图
在上一节有了业务架构的基础之上,当我们需要落地具体的技术方案时,此时就需要技术人员开始考虑技术架构了。技术架构是应接应用架构的技术需求,并根据识别的技术需求,进行技术选项,把各个关键技术和技术之间的关系描述清楚。 基础结构解决的主要问题包括:如何进行技术层面的分层、开发框架的选择、开发语言的选择、涉及非功能性需求的技术选择。由于应用架构体系是分层的,那么对应的技术架构体系自然也是分层的。大的分层有微服务架构分层模型,小的则是单个应用的技术分层框架。大的技术体系考虑清楚后,剩下问题就是根据实际业务考虑选择具体的技术点。各个技术点的分析、方案选择,最终形成关键技术清单,关键技术清单应考虑架构本身的
|
22小时前
|
存储 安全 Java
|
22小时前
|
Java