我是je的新人,大学刚毕业,入司后就一直在看别人的代码。
今天看到前人的两行注释让我思考——
……也许我所述不是问题for YOU,但是我迷茫
public synchronized void putInCache(String cacheName, String key, Object value){
CacheExt cache= getCache(cacheName);
// if (cache == null) {
// throw new NeedsRefreshException("Cache is not exist");
// }
cache.putInCache(key, value);
}
为什么要注释掉呢?可能是作者认为调用它的代码过滤了cache为空的可能,例如:
public synchronized boolean hasCache(String cacheName) {
return cacheMap.getKeys().contains(cacheName);
}
……
if(hasCache(cacheName)) { putInCache(……);}
……
但下面:
public synchronized Object getFromCache(String cacheName, String key){
CacheExt cache = getCache(cacheName);
if(cache == null)
return null;
try {
return cache.getFromCache(key);
} catch (NeedsRefreshException e) {
cache.cancelUpdate(key);
return null;
}
}
作者又在方法内部过滤这种异常,是作者的逻辑有问题吗?
当面对外部对本方法调用有多种可能性,而每种可能性的处理又个不相同时,就出现这样的问题:
本方法不能确定外部调用是否已经过滤了异常,而自己又很迫切的需要保证这一点时,你就得在自己内部过滤掉可能的异常。但是对于许多人来说:注意防止异常的发生是基本原则(至少老师是这么教我的——),所以对于一个充分解耦的程序来说多级的调用中,或者是分组开发里,出现这样的调用A-调用->B-调用->C-调用->D-调用->E-调用->F-调用->G的调用栈,G是最终的方法即本方法,内部有过滤,同样的A-调用->B有过滤,其他一样,既
if (cache == null) {
throw new NeedsRefreshException("Cache is not exist");
}
出现多次,判断N次(影响效率!?)。这样我看起来很不爽,这么麻烦!一点都不简约,不朴素。
当然,也可以不处理这样就简约了,朴素了-
待续……去看奥运会开幕式——
接续:
也就是说在类的外部和内部都不处理这种异常(有这样写代码的吗?),假设程序中不会出现异常;或者捕获这种异常的代价远远大于了重启的代价——
当然,这里依然还有一种方法,也就是整个系统的通用异常处理框架或机制。如此的话,在函数方法的内部和外部(不包含最外部)不用理睬过滤的事情了……
总结:当我们不确定异常发生的时机、异常处理的种类(也许有些异常出现后,可以使用默认参数代替,有些则报错崩溃)、异常处理代价时,就出现了异常处理的切面问题,也就是说在哪里会出现异常、哪里需要处理异常、如果处理异常的问题!
我认为有4种模式:
- 原始社会模式——个体与个体之间社交的匮乏,可以忽略任何一个人的错误(对应不处理方式)
- 封建社会模式——个体在不经意见的错误会有官府等机制来纠正(对应方法外部过滤)
- 资本主义模式——当每个个体的意识和法制强度达到一定程度时,个体对外界是干净的(对应内部过滤)
- 社会主义模式——社会主义的每个公民都是优秀的,既是偶尔犯错,也会有社会主义的政府来处理(对应统一框架或机制处理)
如果是这样的话,我想Java代码在我们面前突然就变得优雅起来。
但在日益复杂的系统里,这可能实现吗?
分享到:
相关推荐
1. **spring-core-5.3.3.jar**:Spring框架的核心模块,包含IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)的基础工具,是其他Spring模块的基础。 2. **spring-beans-...
本主题将深入探讨Java Web开发中的异常处理方式以及Aspect-Oriented Programming(面向切面编程,简称AOP)技术,这两种技术在构建健壮和可维护的应用程序中起着核心作用。 首先,让我们了解Java Web开发中的异常...
在Java开发中,Spring框架是广泛使用的,而Spring AOP(面向切面编程)则提供了一种优雅的方式来处理全局的异常。本篇文章将深入探讨如何使用Spring注解AOP进行异常处理,特别是基于`@ControllerAdvice`的方式。 一...
6. **异常处理**:学习如何优雅地捕获和处理程序运行时可能出现的异常,保证程序的健壮性。 7. **集合框架**:深入理解List、Set、Map等各种集合类的使用场景和优化技巧。 8. **IO流与NIO**:包括文件操作、字符流...
Java企业级应用广泛使用Spring框架,它提供了依赖注入、AOP(面向切面编程)、事务管理等功能。在“pay-java-parent-develop”中,Spring Boot可能是主要的技术栈,用于快速搭建微服务架构。 4. **微服务架构**: ...
Java AOP(面向切面编程)是Java编程领域中的一个重要概念,它允许程序员定义横切关注点,并将这些关注点与应用程序的业务逻辑分离。在实际开发中,公共异常处理是一个常见的AOP应用场景,用于统一处理可能出现的...
在事务管理中,动态代理通常用于实现AOP(面向切面编程),将事务逻辑与业务逻辑分离。 1. **Java动态代理基础**: - Java动态代理基于Java反射API实现,主要涉及到`java.lang.reflect.Proxy`和`java.lang.reflect...
Spring框架提供依赖注入(IoC)和面向切面编程(AOP),简化企业级应用的开发。Hibernate作为ORM框架,消除了Java代码与数据库之间的直接耦合,提高了开发效率。 总结这些知识点,不仅有助于Java面试的准备,也是...
- Spring作为Java企业级应用的主流框架,其依赖注入(DI)和面向切面编程(AOP)是核心概念。理解Bean管理和事务管理,可以提高开发效率。 这些知识点构成了Java开发者的必备基础,不断学习和实践将有助于提升编程...
理解何时何地抛出异常,如何优雅地捕获和处理,是提高程序稳定性的关键。 8. **IO流**:从基本的字节流和字符流,到缓冲流、转换流,再到文件操作和对象序列化,Java IO流的掌握能让你更好地处理输入输出。 9. **...
这两者在插件开发、测试和AOP(面向切面编程)中有广泛应用。 8. **JVM内存管理**:理解JVM的内存模型和垃圾收集机制对于优化程序性能至关重要。代码可能会涉及内存泄漏检测、性能调优等方面,帮助开发者更好地理解...
- Spring框架简化了Java EE应用的开发,提供了依赖注入、AOP(面向切面编程)和MVC等模式。 9. **测试与调试**: - JUnit是Java的单元测试框架,用于编写和执行测试用例。 - IDE(如IntelliJ IDEA、Eclipse)...
5. **框架技术**:可能使用了Spring MVC或Struts等框架,这些框架简化了Web应用的开发,提供了依赖注入、AOP(面向切面编程)等功能,提高了代码的可维护性和可扩展性。 6. **数据库设计**:系统中可能包括用户表、...
- Spring框架:提供了依赖注入、AOP(面向切面编程)和MVC(模型-视图-控制器)模式。 以上只是Java集成开发中的冰山一角,实际的学习和实践中还需要结合具体的项目需求和框架,如Spring Boot、MyBatis等,以及...
15. **Spring框架**:作为Java应用开发中最流行的框架,Spring提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)模式等,极大地简化了Java EE应用的开发。 16. **Android开发**:Java也是Android应用...
Spring提供依赖注入(DI)和面向切面编程(AOP),简化了对象的创建和管理,同时它的MVC模块可以替代原生Servlet和JSP,提供更高级的控制流程。 六、数据持久化 图书馆系统中的数据需要持久化存储,Spring框架结合...
5. **异常处理**:Java的异常处理机制使得程序能优雅地处理错误情况,通过try-catch-finally语句块捕获和处理异常。 6. **集合框架**:Java集合框架包括List、Set、Map等接口及其实现,如ArrayList、HashSet、...
Spring框架是Java企业级应用的常用选择,它提供了依赖注入、AOP(面向切面编程)等功能,简化了开发过程。MyBatis作为持久层框架,简化了数据库操作。 以上就是“达内java培训笔记”中可能包含的主要知识点。通过...
9. **异常处理**:Java的异常处理机制(try-catch-finally语句)和Spring的全局异常处理器可以帮助系统捕获并优雅地处理可能出现的错误。 10. **测试**:单元测试和集成测试是保证代码质量的关键。JUnit和Mockito等...
4. **异常处理**:Java异常处理允许程序在遇到错误时优雅地恢复,通过try-catch-finally语句块进行捕获和处理异常。 5. **输入输出流**:Java的I/O流系统支持读写文件、网络通信和其他数据源。理解流的概念和不同的...