Abstract class can extend only one class or one abstract class at a time
interface can extend any number of interfaces at a time
No.2:
Abstract class can be extended(inherited) by a class or an abstract class
Interfaces can be extended only by interfaces. Classes has to implement them instead of extend
No.3:
Abstract class can have both abstract and concrete methods
Interface can only have abstract methods, they cannot have concrete methods
No.4:
In abstract class, the keyword ‘abstract’ is mandatory to declare a method as an abstract
In interfaces, the keyword ‘abstract’ is optional to declare a method as an abstract because all the methods are abstract by default
No.5:
Abstract class can have protected and public abstract methods
Interface can have only public abstract methods
No.6:
Abstract class can have static, final or static final variables with any access specifier
Interface can have only public static final (constant) variable
- 单一职责原则:一个类应该只有一个引起它变化的原因。
- 开闭原则:软件实体应该对扩展开放,对修改关闭。
- 里氏代换原则:所有引用基类对象的地方都能透明地使用其子类对象。
- 依赖倒置:抽象不应该依赖于具体,具体应该就事于抽象。
- 接口隔离:使用多个专用接口而不是一个总接口
- 合成复用:尽量使用关联而不是继承来达到复用。
- 迪米特:一个软件实体尽量不跟其它实体发生相互作用。
我的电脑型号 thinkpad e450
如何阅读源码
=================================
第一部分J2SE
-
如果你进行过一年左右的开发,喜欢用eclipse的debug功能。好了,你现在就有阅读源码的技术基础。
我建议从JDK源码开始读起,这个直接和eclipse集成,不需要任何配置。
可以从JDK的工具包开始,也就是我们学的《数据结构和算法》Java版,如List接口和ArrayList、LinkedList实现,HashMap和TreeMap等。这些数据结构里也涉及到排序等算法,一举两得。
面试时,考官总喜欢问ArrayList和Vector的区别,你花10分钟读读源码,估计一辈子都忘不了。 - 然后是core包,也就是String、StringBuffer等。
如果你有一定的Java IO基础,那么不妨读读FileReader等类。我建议大家看看《Java In A Nutshell》,里面有整个Java IO的架构图。Java IO类库,如果不理解其各接口和继承关系,则阅读始终是一头雾水。
Java IO 包,我认为是对继承和接口运用得最优雅的案例。如果你将来做架构师,你一定会经常和它打交道,如项目中部署和配置相关的核心类开发。
读这些源码时,只需要读懂一些核心类即可,如和ArrayList类似的二三十个类,对于每一个类,也不一定要每个方法都读懂。像String有些方法已经到虚拟机层了(native方法),如hashCode方法。 - 当然,如果有兴趣,可以对照看看JRockit的源码,同一套API,两种实现,很有意思的。
如果你再想钻的话,不妨看看针对虚拟机的那套代码,如System ClassLoader的原理,它不在JDK包里,JDK是基于它的。JDK的源码Zip包只有10来M,它像是有50来M,Sun公司有下载的,不过很隐秘。我曾经为自己找到、读过它很兴奋了一阵。
第二部分:Java Web开发源码
在阅读Tomcat等源码前,一定要有一定的积累。我的切实体会,也可以说是比较好的阶梯是:
(1)写过一些Servlet和JSP代码。注意,不是用什么Struts,它是很难接触到Servlet精髓的。用好Struts只是皮毛。
(2)看过《Servlet和JSP核心编程》
(3)看过Sun公司的Servlet规范
(4)看过http协议的rfc,debug过http的数据包
如果有以上基础,我也不建议你开始读Tomcat源码。我建议你在阅读Tomcat源码前,读过Struts源码,Struts源码比 WebWork要简单得多。这个框架是可以100%读懂的,至少WebWork我没有100%读懂。我曾经因为读懂了Struts源码,自己写过一个 Web框架。
当然,在读Struts框架前,最好看过它的MailReader等demo,非常非常不错的。
如果你做过一些Struts项目,那么读它时就更得心应手了。
在读Struts前,建议看看mvnforum的源码,它部分实现了Struts的功能,虽然这个BBS做得不敢恭维。
果你读过Struts,再开始考虑Tomcat源码阅读吧。
不过,我还是不建议直接读它,先读读onJava网站上的系列文章《How Tomcat Works》吧,它才是Tomcat的最最简易版。它告诉你HttpServletRequest如何在容器内部实现的,Tomcat如何通过 Socket来接受外面的请求,你的Servlet代码如何被Tomcat容器调用的(回调)。
学习JSP,一定要研读容器将JSP编译后的Servlet源码。
为什么我总是称呼Tomcat为容器,而不是服务器?这个疑问留给大家吧。
如果你一定要读Tomcat,那么就读Jetty吧。至少它是嵌入式,可以直接在eclispe里面设置断点debug。虽然Tomcat也有嵌入式版本。
第三部分: JDBC源码阅读
我建议,先读读Sun的JDBC规范。
我想你一定写过JDBC的代码,那么这时候可以开始阅读源码了。
如果了解JDBC规范(接口),那么它的实现,JDBC Driver就一定要开始了解,我的建议是,读读mysql的jdbc驱动,因为它开源、设计优雅。在读mysql的JDBC驱动源码时,建议看看 mysql的内幕,官方正好有本书,《Mysql Internals》,我五年前读过一部分。比如你可以知道mysql的JDBC驱动,如何通过socket数据包(connect、query),给这 个C++开发的mysql服务器交互的。
通过上面的阅读,你可以知道,你的业务代码、JDBC规范、JDBC驱动、以及数据库,它们是如何一起协作的。
如果你了解这些内幕,那么你再学习Hibernate、iBatis等持久化框架时,就会得心应手的。
读过JDBC驱动,那么下一步一定要读读数据库了。而正好有一个强大的数据库是用Java开发的,Hsqldb。它是嵌入式数据库,比如用在桌面客户端软件里,如Mail Client。
Java通讯及客户端软件
我强烈推荐即时通讯软件wildfire和Spark。你可以把wildfire理解成MSN服务器,Spark理解成MSN客户端。它们是通过XMPP协议通讯的。
我曾经在一个项目中,定制过Spark,当然也包括服务端的一些改动。所以它们的源码我都读过。
我之所以推荐它们。是因为:
1、XMPP够轻量级,好理解
2、学习Socket通讯实现,特别是C/S架构设计
3、模块化设计。它们都是基于module的,你既可以了解模块化架构,还可以了解模块化的技术支撑:Java虚拟机的ClassLoader的应用场景。
4、Event Driven架构。虽然GUI都是Event驱动的,但Spark的设计尤其优雅
这么说吧,读它们的源码,你会为做一名程序员而自豪,因为无论是他们的架构设计还是代码,都太漂亮了。
第四部分:Java企业级应用
当然了,就是Hibernate、Spring这类框架。
在读Spring源码前,一定要先看看Rod Johnson写的那边《J2EE Design and Development》,它是Spring的设计思路。注意,不是中文版,中文版完全被糟蹋了。
在读Hibernate源码前,一定要读读Gavin King写的那本《Hibernate in Action》,同时,应该再读读Martin Fowler写的《企业应用架构模式》,它专门谈到持久化框架的设计思路。当你觉得这两本书读透了,再去看它们源码吧。
而且,在读源码前,你会发现它们用到很多第三方Jar包,二三十个,你最好把那些Jar包先一个个搞明白。
说到企业应用,一定会涉及到工作流。我当年读过jBPM的源码,网上有介绍jBPM内核的文章(银狐)。我感觉它的内核也就两千行,不要害怕。我曾经阅读jBPM源码的博客。
当然了,读工作流源码,前提是一定要对其理论模型有深入的了解,以及写过一些demo、或做过一些项目。
我上面介绍的这些,是我自己读过的,也适合一般人阅读。
我也读过一些非Java源码,感觉不错,也推荐给大家:
dojo源码 它的架构设计得很优雅,仿Java的import和extends。但实际应用起来一塌糊涂。我们当年基于这个开发了自己的框架,不过我不是主力。
Flex源码 Flex 08年底刚刚开源后,我就用它做过一个中型项目,应该说是国内的技术先行者。当时市面没有有深度的书,也没有开源项目。我纯粹是看Flex的Help文档和源码,把项目搞定的。两三年过去了,现在觉得系统设计得蛮优雅的。
好了,先介绍到这里。
上面说到的这些Java源码,我都是4年前、甚至更早读过的。技术变化这么快,像互联网的高速发展,催生很多高性能、分布式数据库,如hadoop。我一看,发现自己已经落伍了。
这几年,想必已经出现了很多优秀的框架,大家不妨分享出来。
源地址:http://www.hulian.top/zixun/post/4771.html
1. JAVA基础扎实,理解io、多线程、集合等基础框架,对JVM原理有一定的了解;
2. 3年及以上使用JAVA开发的经验,对于用过的开源框架,能了解到它的原理和机制;对Spring,ibatis,struts等开源框架熟悉;
3. 熟悉分布式系统的设计和应用,熟悉分布式、缓存、消息等机制;能对分布式常用技术进行合理应用,解决问题;
4. 掌握多线程及高性能的设计与编码及性能调优;有高并发应用开发经验优先;
4. 掌握Linux 操作系统和大型数据库(Oracle、MySql);对sql优化有丰富的经验;
5. 学习能力强,适应能力好;具备耐心/细心的品质;
6. 我们希望你对互联网或J2EE应用开发的最新潮流有关注,喜欢去看及尝试最新的技术,追求编写优雅的代码,从技术趋势和思路上能影响技术团队
相关推荐
《轻量级J2EE企业应用实践》这本书深入探讨了如何在实际开发中高效、灵活地运用J2EE(Java 2 Platform, Enterprise Edition)技术,尤其关注那些轻量级框架,以降低复杂性,提高开发效率。在这个PDF文档中,读者可以...
本文将详细介绍轻量级J2EE企业级应用实战的知识点,重点内容围绕JavaEE基础开发知识、三大框架Struts2.2、Spring3.0、Hibernate3.6的使用方法,以及如何将这些技术整合应用于实际项目中。 首先,我们需要了解JavaEE...
《轻量级J2EE企业应用实践-tructs+spring+hibernate整合开发》是一部深入探讨Java企业级应用开发的教程,特别是针对轻量级框架的整合使用。本部分内容聚焦于系列教程的第七章,可能涉及的是这些框架在实际项目中的...
《轻量级Java EE企业应用实战》是李刚编著的第三版书籍,该书主要针对Java EE在企业级开发中的实践应用进行深入探讨。Java EE(以前称为J2EE)是一个用于构建分布式、多层的企业级应用程序的平台,它提供了一系列的...
1. **Spring框架**:作为J2EE领域最流行的轻量级框架之一,Spring提供了依赖注入、AOP(面向切面编程)、MVC(Model-View-Controller)等核心特性,简化了企业级应用的开发。学习者将学习如何配置Spring IoC容器,...
**Hibernate** 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种轻量级的封装机制,允许他们使用面向对象的方式来操作数据库。Hibernate的目标是在任何使用Java的地方都可以使用,无论是在桌面应用...
1. **Spring框架**:Spring是J2EE领域最流行的轻量级框架之一,提供了依赖注入(DI)和面向切面编程(AOP)等功能。Spring MVC是其Web层的实现,用于构建RESTful Web服务。此外,Spring Boot简化了Spring应用的启动...
### 精通J2EE--Eclipse、Struts、Hibernate及Spring整合应用案例 #### J2EE基础知识 - **J2EE定义**:Java 2 Platform, Enterprise Edition(J2EE)是一种由Sun Microsystems(现已被Oracle收购)制定的企业级Java...
Spring是一个轻量级的Java开发框架,主要用于简化企业级应用的开发过程。它通过提供依赖注入(Dependency Injection, DI)和面向切面编程(Aspect Oriented Programming, AOP)等功能来实现这一目标。Spring2.0版本...
Spring框架,作为Java领域最流行的轻量级应用框架之一,提供了全面的基础设施支持,包括依赖注入(DI)、面向切面编程(AOP)、数据访问、事务管理、web服务等。Spring3是其的一个版本,该版本强化了与JSF、Struts等...
通过"轻量级J2EE架构"教程,读者将能够了解如何在不牺牲功能性和稳定性的同时,降低J2EE应用程序的复杂性,提高开发速度和维护性。这份高清PDF文档将详细讲解这些概念,并可能包含实例代码和最佳实践,为学习者提供...
**J2EE**(Java 2 Platform, Enterprise Edition)是Sun Microsystems推出的一个用于开发企业级应用的标准,它提供了多种服务和技术来支持大型分布式网络应用。J2EE的核心特性包括组件模型、事务管理、安全机制等。 ...
5. JavaScript:JavaScript是一种轻量级的脚本语言,主要用于Web页面的客户端交互。它在浏览器环境中运行,为用户提供了丰富的用户体验,如表单验证、动态内容更新等。随着Node.js的出现,JavaScript也可以用于...
- **Spring**:是一个轻量级的Java EE应用程序开发框架,核心特性包括依赖注入(DI)、面向切面编程(AOP)等。Spring框架通过管理对象的生命周期和依赖关系来简化企业级应用的开发。 - **Hibernate**:是一个面向...
REST(Representational State Transfer)是一种轻量级的Web服务架构风格。本章将介绍REST的基本原则,以及如何使用JAX-RS实现RESTful服务。 第12章:Maven与项目构建 Maven是一个强大的Java项目管理工具,本章将...
2. **Jetty**:另一个轻量级的Web服务器和Servlet容器。 3. **Glassfish**和**WildFly**:全功能的应用服务器,支持完整的J2EE/EJB规范。 **分布式服务与安全** 1. **JMS(Java Message Service)**:定义了消息...
10. **Tomcat与应用服务器**:Apache Tomcat是一个轻量级的应用服务器,常用于运行Servlet和JSP。更全面的企业级应用服务器如WebLogic、WebSphere则提供了更多的服务和管理功能。 11. **集成测试与持续集成**:...
Spring 作为一种轻量级的框架,主要解决的是企业应用中的“粘性”问题,即在传统 J2EE 开发模式下,由于复杂的容器管理机制导致的应用耦合度高、难以维护等问题。Spring 的出现极大地简化了 J2EE 应用的开发流程,...
Spring框架是一个轻量级的控制反转(IoC)容器,同时也是一整套企业级应用开发的解决方案。Spring的核心功能包括: - **依赖注入(DI)**:实现对象间的松耦合,便于代码的复用和测试。 - **AOP(面向切面编程)**...
- Spring MVC是Spring的核心模块之一,它是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架。 - Spring依赖注入(DI)和面向切面编程(AOP)是其核心特性。 Web基础: - HTML是构建Web页面的基础...