nullJava学习交流Java学习交流吴林静学问的境界学问的境界古今之成大事业、大学问者,必经过三种之境界:
‘昨夜西风凋碧树。独上高楼,望尽天涯路’。此第一境也。
‘衣带渐宽终不悔,为伊消得人憔悴。’此第二境也。
‘众里寻他千百度,蓦然回首,那人却在,灯火阑珊处’。此第三境也。” 王国维 人间词话ContentsContents1.初学java应注意哪些问题
2.纷繁复杂的框架如何入手
3.利用好开源项目
4.设计模式:程序员必备的知识
5.Java学习的优秀资源 Java简介Java简介Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。
Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Application Programming Interface、简称API)构成。Java 应用编程接口为Java应用提供了一个独立于操作系统的
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
接口,可分为基本部分和扩展部分。
在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。Java应用编程接口已经从1.1x版发展到1.2版。目前常用的Java平台基于Java1.4,最近版本为Java1.7。Java简介Java简介Java分为三个体系JavaSE,JavaEE, JavaME.
J2SE:主要 用于桌面应用软件的编程。
J2EE:用于分布式的网络程序的开发,如电子商务网站和ERP系统.
J2ME:主要应用于嵌入是系统开发,如手机和PDA的编程.
2009年04月20日,oracle(甲骨文)收购sun,java因此并归甲骨文公司。Java的特点与优势Java的特点与优势Java语言是简单的。
Java语言是一个面向对象的。
Java语言是分布式的。
Java语言是健壮的
Java语言是安全的。
Java语言是体系结构中立的。
Java语言是可移植的。
Java语言是多线程的。 Java包含的基本技术Java包含的基本技术JAVAJSPServletELJSTLRMISOAPJMSJAVAMailEJBJNDIJTAMVCUMLDesign PatternJDBCJAXP……Java基础知识Java基础知识1.J2SE:
基本编程环境的搭建:JDK的安装,环境变量
Java的基本语法:变量、操作符、面向对象
Collection:set、arraylist、map
IO:文件读写API
JDBC:数据库连接API
JDK1.5新特性:泛型、for-each、枚举、可变参数……
Multithread, Reflection, Network, Swing, AWT
J2SE的桌面应用程序开发与VC、VB、Delphi相比并无明显优势
推荐资料:《Java核心技术》(上下册)机械工业出版社Java基础知识Java基础知识2.web开发基础知识
JSP:Java server pages
Servlet:担当Web浏览器或其他HTTP客户程序发出请求,与HTTP服务器上的数据库或应用程序之间的中间层。
EL:Expression Language ,表达式语言
JSTL:JSP Standard Tag Library,JSP标准标签库
推荐资料:《Java Web开发详解》孙鑫Java基础知识Java基础知识3.基本web开发的其他相关知识
HTML & JavaScript
SQL
XML:xslt,xpath,dtd……
Regular Expression:正则表达式
……Java基础知识Java基础知识4.web开发进一步学习:
UML:统一建模语言
CSS:样式表
AJAX:异步JavaScript与XML
OOA&OOD
……
Java基础知识Java基础知识5.Java web开发的相关工具软件
容器:
Tomcat:轻量级,使用、配置方便,免费
JBoss
WebLogic
WebSphere
商业软件,功能强大,但是要钱,研究中用得少,企业用的多Java基础知识Java基础知识5.Java web开发的相关工具软件
IDE
JBulider
NetBeans
Eclipse+MyEclipse 可直接下载打包的安装文件
文本编辑工具
EditPlus/UltraEdit
网页布局与样式编辑
DreamwaverJava基础知识Java基础知识5.Java web开发的相关工具软件
代码构建工具:Ant 、 Maven
单元测试工具: JUnit
日志工具:log4j
XML解析工具:JDOM/DOM4j
数据库管理系统:Oracle、MySQL、SQL ServerJava的重要特性:面向对象Java的重要特性:面向对象面向对象的重要特点:增强程序的灵活性,快速地适应需求的变化。
面向对象编程(Object Oriented Programming,简称OOP)描述的是对象之间的相互作用。
面向对象编程与面向过程编程的区别:
过程化程序设计先确定算法,再确定数据结构;面向对象编程先确定数据结构,再确定运算。
面向过程编程的程序员,习惯于建立数据结构存放数据并定义方法(函数)来操作数据;面向对象编程的程序员则构造一个对象模型,将数据与方法组织在一起。面向对象编程的难点面向对象编程的难点掌握面向对象的困难之处在于思路的转换。
我们通常习惯于考虑解决问题的方法,而不是考虑将问题抽象成对象再去解决它。
一个简单的例子一个简单的例子编写一个驾驶汽车的方法
面向过程的程序设计:
编写一个方法,void drivecar();
面向对象的程序设计:
将一辆汽车看成一个对象,将所有汽车对象的共性抽取出来,设计一个类Car,类中有一个方法void drive(),用Car这个类实例化一个具体的对象car,调用:car.drive()。面向对象的基本概念:对象和类面向对象的基本概念:对象和类对象是对问题域中客观存在的事物的抽象。每个对象都有自己的特征(特性和行为)。
类是对具有共同特征的对象集的抽象:分类。
类是生成对象的模版
对象是类的一个实
Class Car
{
int color;
int door_number;
int speed;
char manufacturer[
char style [10];
int price;
void brake() { …
void speedUp() {…}
void slowDown()
}
Car car1;
Car car2;对象和类对象和类为什么要使用类?
把现实问题中的对象映射为程序中的一个整体——类。
突破了传统数据与操作分离的模式。
数据和操作存放在统一的结构中,作为整体响应其他对象的请求。
int day1, month1, year1;
int day2, month2, year2;class Date
{
int day,month,year;
public int tomorrow()
{
……
}
}
Date mybirthday;
Date yourbirthday;封装与消息封装与消息封装与消息封装与消息Packaging an object‘s variables within the protective custody of its methods is called encapsulation.
外部对象不能直接操作对象的属性,只能通过与定义的接口使用对象提供的服务。封装与消息封装与消息消息传递模型:
Destination(接收消息的对象)
Operation (接收对象需要完成的操作)
Arguments (参数,完成操作所需的信息)
发送和接收对象不一定在同一进程中,也不一定在同一机器上。
TVSet tv;
tv.ChangeChannel (5);继承继承如果一个类A继承自另一个类B,就把这个A称为“B的子类”,而把B称为“A的父类”。继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码。在令子类继承父类的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类的原有属性和方法,使其获得与父类不同的功能。 车自行车公交车小轿车Java只支持单继承
C++支持多继承方法的覆盖(override)方法的覆盖(override)在子类中定义一个与父类同名、返回类型、参数类型均相同一个方法,称为方法的覆盖(多态)。
覆盖发生在子类与父类之间。车自行车公交车小轿车车都有煞车方法
自行车煞车:用手捏
小轿车煞车:用脚踩方法的重载(overload)方法的重载(overload)重载构成的条件:方法的名称相同,但参数类型或参数个数不同,才能构成方法的重载。
① double calculate(double);
② double calculate(double,double);
③ double calculate(double, int);
④ double calculate(int, double); 接口与继承接口与继承一般认为:接口的意义在于顶替多重继承。众所周知Java没有c++那样多重继承的
机制
综治信访维稳工作机制反恐怖工作机制企业员工晋升机制公司员工晋升机制员工晋升机制图
,但是却能够实现多个接口。 (错)
接口的作用,一言以蔽之,就是标志类的类别(type of class)。把不同类型的类归于不同的接口,可以更好的管理他们。 例子:家鸭(不会飞)与野鸭(会飞)例子:家鸭(不会飞)与野鸭(会飞)flyduck
-color
-sex
+eat()
+swim()
+fly()public interface Fly { void fly(); }
public class FlyDuck extends Duck implements Fly{
public FlyDuck(){ }
……
public void fly()
{ System.out.println("会飞"); }
}
public class FamilyDuck extends Duck{
……
}
Java面向对象的基本原则Java面向对象的基本原则1. 开闭原则(the Open Closed Principle OCP)
一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。因此在进行面向对象设计时要尽量考虑接口封装机制、抽象机制和多态技术。
以收音机的例子为例,讲述面向对象的开闭原则。收听节目时需要打开收音机电源,对准电台频率和进行音量调节。但是对于不同的收音机,实现这三个步骤的细节往往有所不同。比如自动收缩电台的收音机和按钮式收缩在操作细节上并不相同。因此,我们不太可能针对每种不同类型的收音机通过一个收音机类来实现(通过重载)这些不同的操作方式。但是我们可以定义一个收音机接口,提供开机、关机、增加频率、降低频率、增加音量、降低音量六个抽象方法。不同的收音机继承并实现这六个抽象方法。这样新增收音机类型不会影响其它原有的收音机类型,收音机类型扩展极为方便。此外,已存在的收音机类型在修改其操作方法时也不会影响到其它类型的收音机。Java面向对象的基本原则Java面向对象的基本原则2. 替换原则 (the Liskov Substitution Principle LSP) 子类应当可以替换父类并出现在父类能够出现的任何地方。这个原则是Liskov于1987年提出的设计原则。 一个能够反映这个原则的例子时圆和椭圆,圆是椭圆的一个特殊子类。因此任何出现椭圆的地方,圆均可以出现。但反过来就可能行不通。Java面向对象的基本原则Java面向对象的基本原则3.依赖原则 (the Dependency Inversion Principle DIP)
在程序设计中,如果一个模块a使用/调用了另一个模块b,我们称模块a依赖模块b。
高层模块与低层模块:往往在一个应用程序中,我们有一些低层次的类,这些类实现了一些基本的或初级的操作,我们称之为低层模块;另外有一些高层次的类,这些类封装了某些复杂的逻辑,并且依赖于低层次的类,这些类我们称之为高层模块。
为什么叫做依赖倒置(Dependency Inversion)呢?
面向对象程序设计相对于面向过程(结构化)程序设计而言,依赖关系被倒置了。因为传统的结构化程序设计中,高层模块总是依赖于低层模块。 Bad DesignBad DesignRobert C. Martin在原文中给出了“Bad Design”的定义:
系统很难改变,因为每个改变都会影响其他很多部分。
当你对某地方做一修改,系统的看似无关的其他部分都不工作了。
系统很难被另外一个应用重用,因为你很难将要重用的部分从系统中分离开来。
导致“Bad Design”的很大原因是“高层模块”过分依赖“低层模块”。解决方法解决方法在高层模块与低层模块之间,引入一个抽象接口层 .
在进行业务设计时,与特定业务有关的依赖关系应该尽量依赖接口和抽象类,而不是依赖于具体类。具体类只负责相关业务的实现,修改具体类不影响与特定业务有关的依赖关系。
我们在进行业务设计时,应尽量在接口或抽象类中定义业务方法的原型,并通过具体的实现类(子类)来实现该业务方法,业务方法内容的修改将不会影响到运行时业务方法的调用。
Java面向对象的基本原则Java面向对象的基本原则4.接口分离原则(the Interface Segregation Principle ISP)
永远不要让一个类存在多个改变的理由。
如果一个类需要改变,改变它的理由永远只有一个。如果存在多个改变它的理由,就需要重新设计该类。
存在多个
职责
岗位职责下载项目部各岗位职责下载项目部各岗位职责下载建筑公司岗位职责下载社工督导职责.docx
,则类的改变会影响到多个用户。
总结总结面向对象的精髓在于考虑问题的思路是从现实世界的人类思维习惯出发的,只要领会了这一点,就领会了面向对象的思维方法。
例子例子当用户输入一个球体的半径,程序将显示该球体的体积与表面积。一.普通实现方法一.普通实现方法class Sphere { public static void main(String[ ] args) { EasyReader console = new EasyReader(); System.out.print("Enter the radius: "); double radius = console.readDouble(); System.out.println("Radius = " + radius); double volume = 4.0 / 3.0 * Math.PI * radius * radius * radius; System.out.println("Volume = " + volume); double surfArea = 4.0 * Math.PI * radius * radius; System.out.println("Surface area = " + surfArea); }
} 既没有采用结构化编程,也没有采用面向对象编程:
用户界面与计算过程混在一起二.结构化编程二.结构化编程class Sphere { private static double volume(double r) {return 4.0 / 3.0 * Math.PI * r * r * r;} private static double surfaceArea(double r) {return 4.0 * Math.PI * r * r;} public static void main(String[] args){ EasyReader console = new EasyReader(); System.out.print("Enter the radius: "); double radius = console.readDouble(); DecimalFormat f3 = new DecimalFormat("0.000"); System.out.println("Radius = " + f3.format(radius)); System.out.println("Volume = " + f3.format(volume(radius))); System.out.println("Surface area = " + f3.format(surfaceArea(radius))); } } 添加两个方法,分别计算体积与表面积
该程序采用了结构化编程的风格,并不是面向对象编程。首先,计算过程仍与用户界面实现在同一个类中。另外,对于不同的用户界面,不能体现出面向对象编程的好处,即不能重用这些计算过程。 三.面向对象编程:三.面向对象编程:每个Java应用程序中的每一个类或对象,必须单独实现自己的任务。
优点在于:
容易扩展----添加其他的方法
容易迁移----添加图形用户界面 Java面向对象编程的参考资料Java面向对象编程的参考资料资料:
《JAVA面向对象编程》作者:孙卫琴)
http://hi.baidu.com/qljwm/blog/item/b578dd2308ec7045ad34de87.html
框架的学习框架的学习J2EE的框架五花八门
表示层:Struts、JSF、webwork
业务逻辑层:Spring
数据库持久层:Hibernate
ejb ……
框架是一种设计思想,是把servlet编程中很麻烦的重复简单劳动封装了一下,架构不同,则封装的思路不同 。
夯实基础,再学框架,则事半功倍。Struts与MVC模式Struts与MVC模式“模型-视图-控制器”(MVC) 就是用来帮助控制变化的一种设计模式。MVC 减弱了业务逻辑接口和数据接口之间的耦合。Struts 是一种 MVC 实现,它将 Servlet 2.2 和 JSP 1.1 标记(属于 J2EE 规范)用作实现的一部分。 JSP与ASP的差别JSP与ASP的差别一个 JSP 文件就是一个 Java servlet 。
在jsp中,数据、业务逻辑和界面显示被组合在一起。存放于work目录下单一页面的缺点单一页面的缺点HTML 和 Java 强耦合在一起 :
JSP 文件的编写者必须既是网页设计者,又是 Java 开发者。其结果通常要么是很糟的 Java 代码,要么是难看的网页,有时甚至 Java 代码和网页都很糟。
内嵌的流程逻辑
要理解应用程序的整个流程,必须浏览所有网页。试想一下拥有 100 个网页的网站的错综复杂的逻辑。
调试困难
除了很糟的外观之外,HTML 标记、Java 代码和 JavaScript 代码都集中在一个网页中还使调试变得相当困难。
强耦合
更改业务逻辑或数据可能牵涉相关的每个网页。
美学
在很大的网页中,这编码样式看起来杂乱无章。难以阅读和理解这些代码。 模型-视图-控制器 (MVC)模型-视图-控制器 (MVC)Model(模型) 模型包含应用程序的核心功能。模型封装了应用程序的状态。有时它包含的唯一功能就是状态。它对视图或控制器一无所知。
View(视图) 视图提供模型的表示。它是应用程序的 外观。视图可以访问模型的读方法,但不能访问写方法。此外,它对控制器一无所知。当更改模型时,视图应得到通知。
Controller(控制器) 控制器对用户的输入作出反应。它创建并设置模型。 MVC Model 2MVC Model 2在web开发中客户端与服务器是无状态连接的,无状态行为使得模型很难将更改通知视图。在web上,为了发现对应用程序状态的修改,浏览器必须重新查询服务器。
对于 Web,需要修改标准的 MVC 形式。图 4 显示了 MVC 的 Web 改写版,通常也称为 MVC Model 2 或 MVC 2。Struts,MVC 2 的一种实现Struts,MVC 2 的一种实现Struts 是一组相互协作的类、servlet 和 JSP 标记,它们组成一个可重用的 MVC 2 设计。这个定义表示 Struts 是一个框架,而不是一个库,但 Struts 也包含了丰富的标记库和独立于该框架工作的实用程序类。 Struts 概览Struts 概览
Client browser(客户浏览器) 来自客户浏览器的每个 HTTP 请求创建一个事件。Web 容器将用一个 HTTP 响应作出响应。
Controller(控制器) 控制器接收来自浏览器的请求,并决定将这个请求发往何处。就 Struts 而言,控制器是以 servlet 实现的一个命令设计模式。 struts-config.xml 文件配置控制器。
业务逻辑 业务逻辑更新模型的状态,并帮助控制应用程序的流程。就 Struts 而言,这是通过作为实际业务逻辑“瘦”包装的 Action 类完成的。
Model(模型)的状态 模型表示应用程序的状态。业务对象更新应用程序的状态。ActionForm bean 在会话级或请求级表示模型的状态,而不是在持久级。JSP 文件使用 JSP 标记读取来自 ActionForm bean 的信息。
View(视图) 视图就是一个 JSP 文件。其中没有流程逻辑,没有业务逻辑,也没有模型信息 -- 只有标记。Struts只是MVC模式的一种实现,你可以实现自己的MVC模式学习资料学习资料精通Hibernate,精通Struts,孙卫琴.
Spring从入门到精通 郭锋.
Struts,Hibernate,Spring 集成开发宝典.利用好开源项目利用好开源项目阅读开源程序,迅速提高编程能力
我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力。
学Java必读的两个开源程序就是Jive 和Pet Store。JiveJiveJive是一个开放的Java源代码项目。其目标是建设一个开放结构的,强壮的,易于扩展的基于JSP的论坛。在其设计目标的指导下,其结构设计得非常得好,融合了很多新的观念,比如Design Pattern,可更换的Skin,可插入Plug等等。详细解读其源代码对于理解这些新的设计上的概念是很有裨益的。如果你对Design Pattern和Java语言有一定的了解,但是还是会时常迷惑于其中的话,不妨研究研究Jive源代码,一定会对其中的很多概念有更深入的理解。 Jive的基本架构Jive的基本架构基于一个OO的设计原则:面向接口编程,而不是针对实现编程。Jive在设计的时候,把其大部分的基本对象都设计为接口或者抽象类。在Jive中,基本的接口有Forum,ForumMessage,ForumThread,Group,User,Authorization和Query。 使用接口的好处在于:可扩展性。在Jive给出的实现中,所有接口都使用数据库来实现
的,一条消息,或者一个用户对应于数据库中的一条记录。Jive使用了DbForum,DbForumMessage,DbUser等类来实现这些接口,通过JDBC来操作数据库,使之作为论坛的底层支撑。
然而,有时候,如果想只是使用文件系统来作为论坛的底层支撑,这时候,需要做的只是编码实现了Forum等等接口的诸如FileFroum,FileForumMessage等对象
,然后嵌入Jive中即可,原有的任何代码都可以不用改变!!!这就是面向接口编程的威力了!Jive的学习资料Jive的学习资料www.jivesoft.com Jive源代码 v1.2.4
从Jive2.5版本开始,不再无条件的开放源代码,同时有licence限制。
汉化的Jive版本------J道,全中文,增加了贴图,用户头像和用户资料查询等,在不断升级。http://www.jdon.com/ Pet StorePet Store是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,用于演示J2EE平台的强大功能和灵活性。
Petstore的J2EE设计模式和组件框架思想是最值得学习的两种技术,在PetStore中,真正有关宠物这个具体应用相关的代码很少,整个宠物店是构架在一系列可重用的EJB组件上,这种架构思想值得借鉴。利用好开源项目利用好开源项目从开源项目中找到自己所需要的
几年前,在开源领域还是Perl/PHP的天下,但是现在随着开源运动的滚滚热潮,在sourceforge.net这样的网站上浏览时,Java项目的数量已经超过了其他语言的数量,Java本身和Java的开源项目都在不断走向成熟。
Java开源项目Java开源项目步骤步骤确定需求
查找是否有相关的开源项目
下载源码,整理相应的试验数据,运行程序,查看效果
开源程序与实际需求的差距:如何运用与改进
全部采用?框架?核心算法?多个项目整合?
是否有汉化版本,是否需要汉化?
集成创新与原始创新好的开源论坛好的开源论坛湖北省软件公共开发平台http://gro.clinux.org/
共创联盟http://cosoft.org.cn/
Jive中文论坛http://www.jdon.com
各类开源软件的website设计模式设计模式设计模式(Design Pattern)描述了软件开发过程中若干重复出现的问题的解决
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
,这些方案不是由过程、算法等底层程序构造实体实现,而是由软件系统中类与类之间或不同类的对象之间的共生关系组成。
设计模式可以帮助软件设计人员学习、重用前人的经验和成果。
掌握设计模式与否是衡量程序员设计水平高低的主要依据。
设计模式的基本思想与终极目标:可重用与应对需求改变。常用设计模式常用设计模式创建模式:
Factory(工厂模式)、Prototype(原型模式) 、Singleton(单态模式)
结构模式
Facade、Proxy 、Adapter 、Composite 、Bridge、Decorator 、Flyweight
行为模式
Template 、Observer 、Chain of Responsibility 、 Command、Visitor 设计模式的学习方法设计模式的学习方法具备Java基础后,阅读一本详细讲解设计模式的
书
关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf
,形成总体上的印象
深入研究一个设计模式成功运用的案例,推荐:J道;在http://www.jdon.com有详细的源码、设计模式解析与学习笔记。
板桥里人 :Patterns in Java是不错的入门资料设计模式学习的相关资料设计模式学习的相关资料1995年,Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides合著的《Design Patterns:Elements of Reusable Object_Oriented Software》,详细阐述了23种设计模式(gof模式)
Alan shalloway,James R.Trott著《设计模式解析》有中文版,人民邮电出版社。
强烈推荐:http://www.jdon.com 与Jive源码一起学习还应了解的内容还应了解的内容软件Refactoring(重整)
极限XP编程
SOA 与 Web service
外语
…………好的java学习论坛好的java学习论坛CSDN论坛 http://www.csdn.net/.中国最有名的技术论坛,《程序员》杂志就是他们出版的,你可以在上面提出问题,马上就有人回答你,如果你觉得好,你可以给那人加分;
Java研究组织http://www.javaresearch.org/上面有很多原创文章,高手还是挺多的;
Java开发者http://www.chinajavaworld.com/那里Java资料比较全;
http://www.java.com.cn/ 看这域名就知道有多牛,注册用户快接近一万了,同时在线人数也在一千左右,人气很旺的;
IBM的开发者网络 http://www-900.ibm.com/developerWorks/cn/java/index.shtml编程之道编程之道所谓道可道,非常道。编程之道犹如武学之道,语言和开发工具就好比是各门各派的武功招式,基础理论就好比是内功心法和武学原理。内力深厚,则任何招式到了手上都能够化腐朽为神奇;掌握了武学原理,才能够达到无招胜有招的至高境界。 null谢谢大家!ELELEL(Expression Language) 目的:为了使JSP写起来更加简单。
表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法。
语法结构: ${expression}
[ ]与.运算符:EL 提供“.“和“[ ]“两种运算符来存取数据。
${user["My-Name"] } 返回JSTLJSTLJSTL(JSP Standard Tag Library ,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的 。
如果要使用JSTL,则必须将jstl.jar和 standard.jar文件放到classpath中。
返回