Java面试50问,女面试官最喜欢问的居然是它!

简介: Java面试50问,女面试官最喜欢问的居然是它!

[] 什么是try-catch-finally块?

在Java中,try-catch-finally块是异常处理的核心结构,用于捕获和处理程序运行时可能出现的异常。这个结构由三个部分组成:

1. try块:包含可能会抛出异常的代码。如果try块中的代码执行过程中没有发生任何异常,那么紧随其后的catch块将被忽略。

try {
   // 可能会抛出异常的代码
}

2. catch块:紧随try块之后,用于捕获和处理try块中抛出的异常。可以有多个catch块,每个catch块处理不同类型的异常。

catch (ExceptionType1 e1) {
   // 处理ExceptionType1类型的异常
}
catch (ExceptionType2 e2) {
   // 处理ExceptionType2类型的异常
}
// 可以有更多catch块

  注意:catch块中的参数通常是异常实例的引用,通常命名为e(代表exception,异常)。

3. finally块:无论是否发生异常,以及是否捕获了异常,finally块中的代码都会执行。这使得finally块成为执行资源清理操作(如关闭文件流或数据库连接)的理想位置。

finally {
   // 无论是否发生异常,这些代码都会执行
}

一个完整的try-catch-finally示例可能如下所示:

try {
   // 尝试执行的代码,可能会抛出异常
   FileReader reader = new FileReader("file.txt");
   // ...
} catch (FileNotFoundException e) {
   // 如果文件未找到,处理这个异常
   System.err.println("文件未找到: " + e.getMessage());
} finally {
   // 无论是否发生异常,都会执行的代码
   // 例如,关闭打开的资源
}

在上述示例中,如果FileReader构造函数抛出FileNotFoundException,那么这个异常将被相应的catch块捕获并处理。无论是否抛出异常,finally块中的代码都会执行,这通常用于确保资源被正确关闭,即使在发生异常的情况下。

需要注意的是,如果try块中的代码正常结束,那么紧随其后的catch块将被跳过。如果try块中的代码因为异常而退出,那么匹配异常类型的catch块将被执行。如果所有catch块都不能匹配抛出的异常类型,那么异常将向上抛到调用栈的上一层,直到被捕获或者程序终止。

[] 什么是Java的访问修饰符?

在Java中,访问修饰符用于定义类、方法、构造器和变量的访问级别。它们控制其他类对这些成员的访问权限。Java支持四种访问修饰符:

1. public:
 - public是最具包容性的访问修饰符。声明为public的类或成员可以被任何其他类访问,不受限制。

2. protected:
 - protected访问级别比public稍微受限。声明为protected的成员可以被同一个包内的其他类以及不同包中继承了该类的子类访问。

3. 默认(无修饰符):
 - 如果没有指定访问修饰符(也就是什么也不写),那么成员具有默认访问级别,通常称为“包访问级别”。
 - 默认访问级别的成员只能被同一个包内的其他类访问,不同包的类无法访问。

4. private:
 - private是访问限制最严格的修饰符。声明为private的成员只能被其所在的类访问,即使是同一个包内的其他类或继承了该类的子类也无法访问。

以下是每种访问修饰符的典型使用场景:

- public:当你希望成员被广泛访问时使用,例如,当创建一个API或库时。
- protected:当你希望子类能够访问父类的某些成员,但又不希望这些成员对同一个包内的非子类公开时使用。
- 默认:当你希望限制访问仅限于同一个包内时使用。
- private:当你希望隐藏类的内部实现细节,只允许通过类的公共接口与类的对象交互时使用。

访问修饰符是封装原则的关键部分,它们允许开发者隐藏内部实现,只暴露必要的操作和属性,从而提高代码的安全性和易于维护。

相关文章
|
19天前
|
缓存 Java 关系型数据库
【Java面试题汇总】ElasticSearch篇(2023版)
倒排索引、MySQL和ES一致性、ES近实时、ES集群的节点、分片、搭建、脑裂、调优。
【Java面试题汇总】ElasticSearch篇(2023版)
|
19天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
174 37
|
19天前
|
设计模式 安全 算法
【Java面试题汇总】设计模式篇(2023版)
谈谈你对设计模式的理解、七大原则、单例模式、工厂模式、代理模式、模板模式、观察者模式、JDK中用到的设计模式、Spring中用到的设计模式
【Java面试题汇总】设计模式篇(2023版)
|
19天前
|
存储 关系型数据库 MySQL
【Java面试题汇总】MySQL数据库篇(2023版)
聚簇索引和非聚簇索引、索引的底层数据结构、B树和B+树、MySQL为什么不用红黑树而用B+树、数据库引擎有哪些、InnoDB的MVCC、乐观锁和悲观锁、ACID、事务隔离级别、MySQL主从同步、MySQL调优
【Java面试题汇总】MySQL数据库篇(2023版)
|
19天前
|
存储 缓存 NoSQL
【Java面试题汇总】Redis篇(2023版)
Redis的数据类型、zset底层实现、持久化策略、分布式锁、缓存穿透、击穿、雪崩的区别、双写一致性、主从同步机制、单线程架构、高可用、缓存淘汰策略、Redis事务是否满足ACID、如何排查Redis中的慢查询
【Java面试题汇总】Redis篇(2023版)
|
19天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
19天前
|
缓存 Java 数据库
【Java面试题汇总】Spring篇(2023版)
IoC、DI、aop、事务、为什么不建议@Transactional、事务传播级别、@Autowired和@Resource注解的区别、BeanFactory和FactoryBean的区别、Bean的作用域,以及默认的作用域、Bean的生命周期、循环依赖、三级缓存、
【Java面试题汇总】Spring篇(2023版)
|
19天前
|
存储 缓存 监控
【Java面试题汇总】JVM篇(2023版)
JVM内存模型、双亲委派模型、类加载机制、内存溢出、垃圾回收机制、内存泄漏、垃圾回收流程、垃圾回收器、G1、CMS、JVM调优
【Java面试题汇总】JVM篇(2023版)
|
19天前
|
存储 缓存 安全
【Java面试题汇总】多线程、JUC、锁篇(2023版)
线程和进程的区别、CAS的ABA问题、AQS、哪些地方使用了CAS、怎么保证线程安全、线程同步方式、synchronized的用法及原理、Lock、volatile、线程的六个状态、ThreadLocal、线程通信方式、创建方式、两种创建线程池的方法、线程池设置合适的线程数、线程安全的集合?ConcurrentHashMap、JUC
【Java面试题汇总】多线程、JUC、锁篇(2023版)
|
8天前
|
消息中间件 NoSQL Java
Java知识要点及面试题
该文档涵盖Java后端开发的关键知识点,包括Java基础、JVM、多线程、MySQL、Redis、Spring框架、Spring Cloud、Kafka及分布式系统设计。针对每个主题,文档列举了重要概念及面试常问问题,帮助读者全面掌握相关技术并准备面试。例如,Java基础部分涉及面向对象编程、数据类型、异常处理等;JVM部分则讲解内存结构、类加载机制及垃圾回收算法。此外,还介绍了多线程的生命周期、同步机制及线程池使用,数据库设计与优化,以及分布式系统中的微服务、RPC调用和负载均衡等。
下一篇
无影云桌面