admin管理员组

文章数量:1531346

2024年7月30日发(作者:)

研发中心技术架构设计规范 2020-2021

JAVA技术架构及开发规范文档

1引言

1.1目的

通过对系统整体架构和技术规范的描述.为下一步大 规模设计开发提供基础和规范。也

希望广大JAVA项 目开发的程序猿们提出宝贵的建议.不断完善。

1.2对象与范围

架构师.高级工程师.项目经理.项目管理人员,开发 人员.测试人员。

1.3概述

系统实现方案,以实现功能为主.效率性能为辅. 但设计兼顾未来性能的扩展,以减少未来

重构的工作 量。

wcbapp按逻辑分为两层.第一层用户服务接入. 第二层内部服务。第一层项目不分模

块,以二级目录 形式表示不同模块,第二层根据不同服务分模块,第

一层和第二层之间使用hessian通信。

第一层和第二层独立部署.第二层的不同模块也 可以独立部署。

下项目考虑第一层分模块的二级域名独立部署. 并实现单点登荥。

web app采用集群负载均衡,数据库采用负载均 衡和读写分离.以满足一定的性能需

求。

文档描述了各层结构和模块使用的技术和框架。 最后描述了开发的规范和用到的开发

工具。

文档只是描述了项目的架构.

2系统架构图

系统架构如下

研发中心技术架构设计规范 2020-2021

研发中心技术架构设计规范 2020-2021

3层次和模块

3.1前端负载均衡

Nginx是一个口碑很好的开源免费WEB服务器, 国内很多大型网站都转选Nginx平

台.比如將讯,豆 瓣等。Nginx可以实现动靜分离和web app的负载均 衡。

3.1.1动静分离

动靜分离可以很好得分担服务器的负载,有两种方 式实现动靜分离。

1. 使用2级域名,配置专门的靜态文件服务 器。

2. 利用Nginx的url转发功能,把静态请求 转发到靜态服务器或在Nginx本地込理.

动 态请求转发到应用服务器。

我们目前部署上采用第二种方式.同时也实现第 一种方式。系统可以配置动态服务器地

址和静态服务 器地址,在生成页面时获取这两个地址.对图片、js脚 本、css和靜态页面使

用静态配置生成url,对ajax清 求和动态页面使用动态服务器地址生成urlo

3.1.2负载均衡

Nginx可以配置upstream服务器组,实现组内的 负载均衡。通过ip_hash的方式把

动态请求转发到组 内的某台服务器.同时保证客户端在IP不变的情况下 —直访问同一台服

务器.解决session保持问题。

3.2 Web app

网站前端,基Tj2ce. spring框架开发。

3.2.1页面展示和控制

系统有三种页面方式。

动态同步请求.通过velocity模板生成页面.客户端刷新整个页面。

ajax异步请求。Ajax舁步请求又有三种形式: 与velocity模板结合返回html串:返

回json格 式;直接返回简单的字符串。

3模板生成的纯静态页面

前台页面采用的框架和第三方技术有:

研发中心技术架构设计规范 2020-2021

jqucry-corc (事件处理.ajax请求,页面刷 新......)o

Jqzoom (图片放大器)

3. Jqucry-validator(输入验证)

3.2.2权限安全控制

使用apache shiro框架实现权限控制。Shiro是一个 强大、使用简单的权限安全框

架。同时Shiro也能与 cas单点登录整合,方便在下项目扩展多个应用模块。

框架把权限系统分成subject(当前用户). manager(管理所有用户),rcalms(权限数据)

三层。支持

基于实际资源和基于角色的权限校验.同时

我们扩展 shiro 的 Username Password? oken, Realm 实 现基于验证码和数据库用

户密码的用户登录验证。

在过滤器层.我们暂时只使用shiro的3种类型过 滤器控制访问:

1. AnonymousFiltcr匿名过滤器 任何人可以

访问。

2. AuthcnticatingFillcr认证过滤器必须通过身 份认真才能访问(跳转到登录页面)。

可以对当前subject直接调用方法完成判断是否 登录,登录.注销等操作.方便对登录功

能的扩展。

3.2.3控制器层

采用spring 基于注解的控制器.控制器支持

velocity视图返回.ajaxjson返回和ajax text返回。

3.2.4数据验证

使用和扩展 apache 的 common-validator。

3.2.5逻辑层

研发中心技术架构设计规范 2020-2021

采用spring基于注解的事务控制。

3.2.6数据持久层

采用ibatis框架,基于sqlmap配置实现数据的读写, sqlmap配置可以控制底层sql

语句,便于数据库的调 优。

3.2.7缓存的处理

使用缓存可以降低与数据库的交互次数.极大提高系 统性能。我们采用ehcache缓存框

架。用到两种缓存方 式:

1 口页面缓存:直接在过滤器层对页面进行缓存処理, 在过滤器层就可以返回缓存的页

面.不用转到控 制器去处理。对于页面比较复杂.调用业务逻辑比 较多的页面.采用页面缓存

效果很好.比如首页。

2口基于注解的方法缓存.可以对方法的返回值缓存. 存入的参数可以组成key。可以在

逻辑层使用缓存, 也可以在持久层试用。对于请求简单.访问呈大, 但修改频率比较低的数

据进行缓存可以达到很好 的效果。比如商品分类.系统数据字典,地区等数据。

Ehcachc支持分布式缓存.chcachc支持服务器之间通 过rmi调用保持所有服务器之间

缓存同步。

缓存的两种过期机制:

!□定时过期.直接通过ehcachc的配置确定缓存 过期频率。

2口主动通知.管理员在后台系统进行某些操作 后.通过hessian远程调用通知应用服务

器缓 存过期。只需通知一台应用服务器.应用服务 器之间通过ehcache自带分布式缓存复

制方 式同步缓存。

后台管理系统可以提供刷新缓存功能,管理 员在后台管理系统主动刷新缓存。

3.2.8去其他模块之间的通信

通过hessian远程调用框架,实现与其他模块功能之冋 的通信。

Hessian是一个基于http的二逬制远程过程调用框架, 比websenuce更高效。与

Spring框架很好结合,开发 简单。

3.3后台管理系统

研发中心技术架构设计规范 2020-2021

管理员用来维护网站的系统。基于j2cc spring框架。 与网站前台使用到的技术差不

多.现只介绍不同点:

3.3.1页面的展示

大部分请求采用页面刷新的机制。

头部,中部左侧菜单和底部固定不变。中部右ffll] iframc 为主操作区,毎次操作刷新

页面。

商品描述的编辑需要使用到富文本编辑器,我们采用 开源的TinyMCE, TinyMCE在国

内应用比较广泛。

332缓存机制

后台系统访问不是很频繁.同事管理员需要的是实

时的数据.所以后台管理系统不对数据进行缓存。

3.3.3权限管理

采用sping security框架进行权限的控制.基于用户、 角色和资源的授权机制。

3.4支付模块:

支付模块主要功能是订单的管理.与银行等支付系统 的交互。基于j2ec spring框架。

采用spring mvc模式。

3.4.1与银行和其他支付系统的

交互

需要提供一个Url地址,供银行在用户完成支付后 回调.通知系统已经支付成功。

3.4.2与内部模块之间的通信

主要来自网站前端的调用。基于hessian机制。

3.5物流模块

研发中心技术架构设计规范 2020-2021

支付模块目前主要功能是调用物流公司的接口跟踪物 流状态,随着系统的不断发展,在

拥有自己的物流后, 可能发展成一个庞大的系统。基于j2ee spring框架。 采用spring

mvc模式。基于hessian机制对外提供远程 效用服务。

3-6邮件模块

邮件模块主要用来向客户发送邮件。基于j2cc spring 框架。采用spring mvc模式。

3.6.1邮件发送

使用java mail包发送邮件,支持以固定模板发送邮件。

3.6.2定时发送

使用spring+quartz框架实现定时任务发送邮件。

3.6.3与内部模块之间的通信

为网站前端和后台管理系统提供远程调用服务。基于 hessian 机制。

3.7短信模块

短信模块主要用来向客户发送短信。基于j2ce spring 框架。采用spring mvc模式。

3.7.1邮件发送

调用短信设备api发送短信.支持以固定模板发送短 信。

3.7.2定时发送

使用spring+quartz框架实现定时任务发送短信。

3.7.3与内部模块之间的通信

为网站前端和后台管理系统提供远程调用服务。基于 hessian 机制。

3.8进销存模块

调用A8系统接口,实现库存的管理。基于j2ec spring 框架。采用spring mvc模式。

3.8.1 Web service 调用

研发中心技术架构设计规范 2020-2021

采用spring+xfilc框架调用a8系统wcbscn(iceo

3.8.2与内部模块之间的通信

为网站前端和后台管理系统提供远程调用服务。基于 hessian 机制。

3.9搜索模块

为网站提供搜索服务。包括商品检索和问答式搜索的 问题检索。基于j2ec spring框

架。采用spring mvc模 式。

3.9.1检索框架

我们使用国产开源corcScck搜索引擎.基于俄国 开源项目Sphinx研发并独立开发的搜

索引擎。自带中 文分词器mmscg.有大量中文文档。提供JAVAAPL 索引建立效率高并且

与业务无关。在国内有大量成功 案例。

3.9.2与内部模块之间的通信

为网站前端提供远程调用服务。基于hessian机制。

3.10第三方服务调用模块

调用第三方合作服务商的接口。基于j2ee spring框架。

采用spring mvc模式。

3.10.1 Web service 调用

采用spring+xfilc框架调用第三方服务webscrvicco

3.10.2与内部模块之间的通信

为网站前端和后台管理系统提供远程调用服务。基于

hessian 机制。

3.11对外服务接口

对外部系统提供webscrvicc接口服务

3.11.1 Web service 服务

研发中心技术架构设计规范 2020-2021

采用spring+xfilc框架对外提供wcbscrvicc服务。

3.11.2与内部模块之间的通信

调用内部其他模块的服务。基于hessian机制。

3.12数据库

使用mysql5.5数据库存储数据,并使用读写分离机制

提高数据库性能。

3.12.1数据库读写分离

我们使用开源的mysql代理Amoeba实现数据库的读 写分离.把写请求发送到主服务

器.读请求发送到从 服务器.主从之间通过mysql自带的复制机制实现数 据的同步。

3.12.2数据库负载均衡

Amoeba支持轮询和权重两种负载均衡机制,我们使 用权重负载机制实现读服务器的

负载均衡。

3.12.3数据库表引擎的选择

主服务器必须使用innodb支持事务的存储引擎.行级 锁表。而从服务器可以考虑使用

myisam引擎.不支持 事务.表级锁表.具有更高的读写效率,但不支持外键。

3.12.4主从数据库的差异优化

主服务器只需要建立唯一索引和外键约束.其它针对 对查询优化的索引可以不建立,这

要可以提高主服务 器的性能。

从服务器字段使用char而不用varchar,没有varchar, text, blob字段的表是靜态表,

反之是动态表,静态表 的检索效率要比动态表好若干倍。

4工程命名

工程以动物命名.结合了各种动物特征与我们各工程 的职责:

公共接口工具magpie(喜鹊) 网站前台服务bull(公牛) 物流cheetah (猎豹) 支付lion

(郷子) 进销存接口 fox(狐狸) 搜索dog (狗) 邮件eagle (鹰) 短信pigeon (鸽子) 后台管理

horse(马) 调用第三方合作接口 mouse(老鼠) 对外服务接口 camcl(骆驼)

研发中心技术架构设计规范 2020-2021

5工程规范

5.1工程目录结构

sre源码

WebContent

WEN-INF

lib jar 包

config配置文件

views 视图模板

layout布局模板

screen页面模板

. 各模块

common公共的

styles样式文件

resources资源文件

scripts js 文件

common 公共 js

…… 各模块.各开源js项目

5.2包结构

包命名基本原朋:小写字母开头.如果有多个单词.除 第一个单词之外的单词首字母大写

5.2.1公共工具接口工程

公共工具:

各层的公共基类:下的各子 包

研发中心技术架构设计规范 2020-2021

远程调用公共dto:.提供服务的工程

名.rcmoting .dto.业务子模块

远程调用公共接口 :.提供服务的工程 名.rcmoting. interfaces.业务

子模块

第三方开源包的扩展:.第三 方开源包名

5.2.2各模块工程

数据对象:.工程名.domain.业务子模 块

持久层dao接口 : .工程名.dao.业务子 模块

持久层 dao 接口实现:.工程名.dao. 业务子模块.持久层框架名

(ibatis)

持久层 sqlmap: .I程名.dbMap.业务 子模块.数据库类型(mysql)

业务逻辑接口 : .I程名.service.业务 子模块

业务逻辑实现:.I程名.service.业务 子模块.impl

Web 控制器 action: com. .工程名.

.业务子模块

Web 验证器:com. .工程名.tor. 业务子模块

Web 过滤器:com. .I程名.

工具:.工程名.util

远程调用接口实现:.工程名. accs.业务子模块.impl

5.3类、接口命名

类命名基本原则:首字母大写.多个单词的首字母大写

接口命名基本原则:以大写字母"【”开头.如果有多个 单词.毎个单词头字母大写I

研发中心技术架构设计规范 2020-2021

数据对象:数据库表名.java

Dao接口:]+数据对象名+

dao实现:数据对象名+Dao+框架名(Ibalis).java

sqlmap:数据对象名.xm【

业务逻辑接口 :1+数据对象名+

业务逻辑实现:数据对象名+

Web action: domain 名 +

Web validator: domain 名 + Validator .java

Dto:***

远程调用接口: 1+数据对象名+

远程调用实现:数据对象名+

5.4变量和方法命名

类変量、局部変量命名规范:

变量名首字母必须小写.如果该变呈名有多个单 词组成,后面的单词首字母大写,单词

与单词之间不 要使用、'做连接。

类當量命名规范:

所有字母大写.如果有多个单词组成.单词与单 词之间以隔开。而且该变量必须是公共、

靜态、final 类型。

方法命名规范:

方法名首字母必须小写.如果该变量名有多个单 词组成,后面的单词首字母大写,单词

与单词之间不 要使用二做连接。

方法参数名命名规范

研发中心技术架构设计规范 2020-2021

参数名首字母必须小写.如果该变量名有多个单 词组成,后面的单词首字母大写.单词与

单词之间不 要使用'•做连接。

5.5注释

5.5.1类、接口的注释

类、接口必须要有注群。描述类、接口的功能.作者. 版本,最近修改时间。

类的注釋必须写在该类的声明语法之前。在注卷中要 描述该类的基本作用,作者.日

期,版本。

* XXXX功能类

* ©author XXX

• ©version X.X.X 修改时冋 作者

*/

5.5.2类、接口的变量和常■注

类、接口的変量和常量必须有注释,变量和常量 注释必须写在変量和常量定义之前.简单

描述其代表 的意义。

/**

* xxxxxx

•/

5.5.3类、接口方法注释

方法必须要有注释.方法注释必须写在方法定义 之前。该注释包括:方法其功能的简单

描述,方法的 参数、返回值类型、返回值意义简单的描述,跑出异常 描述

/**

* xxxxxx 功能

研发中心技术架构设计规范 2020-2021

• @parama a参数的意义

* @paramb b参数的意义

• @retum返回类型返回的意义

• @throwsXXXX异常

• @lhrowsXXXX异常

*/

5.5.4逻辑代码注释

逻辑代码必须注释。毎个条件判断和毎个循环都 需要有注释。

其它关键代码也需要注释

/**

•当XXXX的时候xxxx

*/

If()(

*循环xxxx

•/

for () (

*xxxxxx

*/

程序代码

6开发环境和工具

JDK1.6

Eclipsc3.7

研发中心技术架构设计规范 2020-2021

Jboss5.1.0

Mysql5.5

7部署环境

Red Hat Enterprise Linux Server release 5

JDK 1.6

Jboss5.1.0

Amoeba for mysql

Mysql5.5

8需要掌握的JAVA技术

知识点的明细:

-:J2SE面向对象-封装、继承、多态

内存的分析

递归

集合类、泛型、自动打包与解包* Annotation

10

多线程、线程同步

TCP/LDP

AIT.事件模型、匿名类

正则表达式

反射机制

2:数据库(Oracle或者MySQL)

SQL语句

研发中心技术架构设计规范 2020-2021

多表连接,内外连接,子査询等

管理表、视图、索引、序列、约束等

树状结构存储

存储过程、触发器

数据库设讣三范式、

3: JDBC

JDBC基础

连接池

树状结构存储与展现

DataSource & RowSet

JDBC 连接 Oracle 及 MySQL

4: iuwl_cssjavascript

htnd、css、javascript 基础语法

JavaScript Form 判断

Dom编程基础(事件处理等)

JS常用效果如TreeView.下拉联动等

JS学习方法

JS调试方法

DreamWeaver 新罗(建立 HTML、Table* Form, CSS)等

tomcat基础

servlet 基础

,eb. xml配置基础

研发中心技术架构设计规范 2020-2021

web application 的结构

servlet生命周期

request response等常用方法

ServletContext 类

HTTP 协议基础(GET POST)

Cookie

Session

Application

JSP的几种语法(包括JSTL等)注意在项目中练习,不要拘泥于语法细节而裏步不前。

6: Struts

多层架构理论

Model 1 and Model 2

Struts基木概念

MVC

Action与业务逻辑类的关系

在Struts与JSP之间传递数据

Struts处理流程(控制流)

Struts TagLib (了解常用的)

JSTL

ActionFonn

字段收集

上传文件

研发中心技术架构设计规范 2020-2021

类型转换

DTO

动态 Action Form

验证框架

Ac t ionForward转发与重定向

动态生成 Act ionForward

全局与局部的Act ionForward

Action Forward Scope

UnknowiiAc t i onMapping

Action的线程安全

I18N

如何切换湃言环境

Struts异常处理机制程序处理自动处理自定义异常处理卷

Struts的多模块配置

7: XML

(XUL/XSL、XSLT/DTD. SCHEMA等基础的概念、关于Java的编程可以暂时扔在一

边)

8: Hibernate

OR Mapping 原理

Hibernate基础开发步骤

Hibernate 基木接口(重点 Session)

普通属性映射

研发中心技术架构设计规范 2020-2021

关联关系映射

Native SQL

inverse lazy cascade

缝承关系映射

HQL

性能优化一级緩存二级緩存査询缓存

事务与并发悲观锁、乐观锁

OpenSessioninView

CurrentSession

(至于JTA、联合主键、自然主键、动态主键、Any类型Creteria Queries

Intercept er and Event句定义类型等,可以暂时扔在一边)

9: Spring

1OC/DI

Spring配置

Spring架构

AOP 及 Spring AOP

声明式事务(AOP)

Spring + Hibernate Spring 支持 Web

Scope

(其他的Spring模块对于。学来说可以暂时扔在一边)

J2EE架构基础

EJB基础(地位及基本理论、分类等)

研发中心技术架构设计规范 2020-2021

Annotation

Ant编译与部署EJB

Session Bean

EJB的依赖注入

Persistence API

(可以用JBoss学习EJB3. 0)

11:至于SOA.对于自学的同学来说,暂时不用特别关注。

梳理一下,你就会发现东西不是想象中的那么多呀!

建议大家可去B站上面搜索JAVA.然后再去找参考书,因为这个时候就能分辨出来哪

些书 适合你了。

2> Java基础常见英语词汇

00: object-oriented ,而向对象

OOP: object-oriented programming,面向对象编程 JDKJava development kit. java

开发工 具包

JVM: java virtual machine Java 虚拟机

Compile:编绎 Run:运行 Class:类 Object:对象 System:系统 out:输出 print:打印 line:

行 variable:变量 type:类型

operation:操作,运算

array激组 parameter:参数

method:方法 function:函数

member-variable:成员变量 member-function:fife员函数 gel:得到

set:设置

研发中心技术架构设计规范 2020-2021

public:公有的 private:私有的 protected:受保护的 default獄认 access:访问

package:包 import:

导入static:静态的mid:无(返回类型)

extends:继承 parent class:父类 base class:基类 super class:超类 child class:子类

derived class:派生类 override:重写,覆盖 overload:垂践

final:最终的,不能改变的abstract:抽象

interface:接口 implements:实现

exception:5^常 Runtime:运行时

Arithn»et icExcept ion:算术异常 ArraylndexOutOfBoundsException:数组 F标越界

异常

NuilPointerException:空引用异常 ClassNotFoundExceplion:类没有'发现异常

XumberFonnatException:数字格式异常(字符串不能转化为数字)

Catch:捕捉 Finally:最后 Throw:拋岀

Throws:(投掷)表示强制异常处理

Ihrowable:(可抛出的)表示所有异常类的祖先类

Lang:language.语言 Util:工具 Display:显示 Random:随机 Collection:集合

ArrayList:(数组列表)表示动态数组Hash血p:散列表.哈希表

Swing:轻巧的

Awtabstract window toolkil:抽象窗口 工具包

Frame:窗体 Size:尺 'J' Title:标题 Add:添加 Panel:面板 Layout:布局 Scroll:滾动

Vertical:垂 直

Horizonalal:水平 Label:标签 TextField:文木框 TextArea:文木域 Button:按钮

Checkbox:复选框Radiobulton:準选按钮Combobox:复选框Event:事件

研发中心技术架构设计规范 2020-2021

Mouse:鼠标

Key:健 Focus:焦点 Listener:监听 Border:边界 Flow:流 Grid:网格

UenuBar:菜単栏Menu:菜单Menu i I em:菜単项PopupWenu :弹出菜単

Dialog:对话框Message:消息【con:图标Tree:树

Node:节点

Jdbcjava database connectivity, java 数据库连接

DriverManager:驱动管理器Connection:连接Statement:表示执行对象

Preparedstatement:表示预执行对象Resultset:结果集

Next:下一个

Close:关闭 executeQuory:执行査询

.Ibuilder中常用英文(共33个)

File:文件New:新建

New Project:新建项目New Class:新建类3 File:新建文件Open project:打开项目

Open file:打开文件Reopen:重新打开Close projects:关闭项目

Close all except :除了 ..全部关闭 Renane:重命名

Exit:退出Vie■■:视图Panes:面板组Project:项目Content:内容

Structure:结构 Message:消息 Source:源文件 Bean:豆子 Properties:属性 Make:编绎

Build:编 绎

Rebuild:重编绎 Refresh:刷新

Project properties:项目属性

Default project properties:欧认的项目属性

Run:运行Debug:调试 Tools: T具

研发中心技术架构设计规范 2020-2021

Preferences:参数配置 Configure:配置 Libraries:库

JSP中當用英文

URL: Universal Resource Location:统一资源定位符

IE: Internet Explorer 因特网浏览器 JSPrjava server page, java 服务书页面 Model:

模型

View:视图

Cxontroller:控制器

Tomcat:—种jsp的web服务器

WebModule:web 模块 Servlet:小服务程序 Request:请求 Response:响应

Init: initialize,初始化 Service:服务 Destroy:销毁 Startup:启动 Mapping:映射

pattern:模式

Gelparameler:获取参数 Session:会话 Application:应用程序 Context:±T文 redirect:

重定向 dispatch:分发

forward:转交 setAttribute:设置届性 getAttribute:获取属性 page:页面 conlenlType:

内容类型 charset:字符集 include:包含

lag:标签taglib:标签犀

EL: express ion language,表达式语言 Scope:作用域

Empty:空

JSTL: java standard tag library java 标准标签库

Tl.D:taglib description.标签库描述符

Core:核心Test:测试

Foreach:表示循环 Var:variable,变量 Status:状态 Items:项目集合 Fmt:format,格式化

Filter:

过滤器

研发中心技术架构设计规范 2020-2021

报惜英文

第一章:

JDK(Java Development Kit) java 开发工具包 JVM (Java Virtual Machine) java 虚拟

机 Javac 编洋命令

java解祥命令

Javadoc生成java文档命令

classpath类路径Version版木author作者public公共的class类

static静态的void没有返回值String字符串类System系统类

out输出

print同行打印

print in换行打印

JIT(juSt-in-time)及时处理第二章:

byte字节char字符boolean布尔short短8?型int整形long长整形float浮点类型

double双綃度 if如果

else否则switch 多路分支case与常值匹配break终止default耿认while当到循

环d。宜到循环

for已知次数循环

continue结束木次循环进行下次跌代

length获取数组元素个数第三章:

COPobject oriented programming 面向对象编程

(fcject对象

Class 类

研发中心技术架构设计规范 2020-2021

Class member 类成员 Class method 类方法 Class variable 类变量 Constructor 构

造方法

Package 包

Import package 导入包

第四章:Extends继承Base class基类Super class超类

S -5 管藉 e5 -2 "S & 5 都仅

渣三 城笑

45 u § fe 靈依

Public 公有 Private 私有 Protected 保护

Static 静态 Abstract 抽象 Interface 接口

Implements interface 实现接 口

第五章:

Exception 意外,异常 RunlineExcepiton 运行时异常 ArithmeticException 算术异常

HlegaiArgumentException 非法数据异常

ArraylndexOutOfBoundsException 数组索引越界异常 NullPointerException 空指

针异常

ClassNotFoundException 类无法加载异常(类不能找到)

XumberFonnat Except ion 字符串到 float类型转换异常(数字格式异常)

lOException输入输出异常FileNotFoundException找不到文件异常EOFException

文件结束异常

InterruptedException (线程)中断异常 try 尝试

catch捕捉finally最后throw投、掷、拋

Ihrows投、掷、抛

研发中心技术架构设计规范 2020-2021

print Stack Trace ()打印堆栈信息get Message ()获得错误消息get Cause < )获得异

常原因 method方法

able能够instance实例check检査第六章:

byte (字节)char (字符)int (整型)long

研发中心技术架构设计规范 2020-2021

Interrupted (中断的)第七章:

Date日期,日子After后来,后而Before在前,以前Equals相等,均等toString转

换为字符串 SetTime设置时间Display显示,展示Calendar日历

研发中心技术架构设计规范 2020-2021

Add添加,増加Get Instance获得实例getTime获得时间Clear扫除,清除Clone

克隆.复制Util工 具,龙套

Components成分.组成Random随意,任意Next Int下一个整数Gaussian髙斯

ArrayList对列

LinkedList 链表

Hash无用信息,杂乱信号

Map地图Vector向量,矢£ Size大小Collection收集Shuffle混乱,洗牌

RemoveFirst移动至开头RemoveLast移动至最后lastElement最后的元素Capacity

容量.

生产® Contains包含,容纳Search捜索,査询

InsertEiementAl插入元素在某一位置第八章:io-〉in out输入/输出File文件

import导入

exists存在isFile是文件 isDirectory是目荥getName获取名字getPath获取路径

gelAbsolutePalh获取绝对路径lastUodified最后修改日期length长度

Inputstream 输入流

Outputstream 输出流

Unicode统一的字符编码标准,釆用双字节对字符进行编码

Information 信息 FilelnpulStreaa 文件输入流 FileOutputStreaa 文件输出流

lOExceplion 输入输出

异常fileobject文件对象available nJ获取的

read读取

write 写

BufferedReader 緩冲区读取FiieReader文本文件读取Bufferedfriter 缓冲区输出

Filewriter 文木文件写出flush清空

研发中心技术架构设计规范 2020-2021

dose关闭

DatalnputStream二进制文件读取

DulaOutputStream二进制文件写出

EOF最后encoding编码Remote远程release释放第九章:

JBuiderJava集成开发环境(IDE ) Enterprise企业版

Developer开发版Foundat ion基础版Messages消息格Structure结构窗格

Project工程

Files文件Source源代码Design设计History历史Doc文档File文件Edit编辑

Search査找Refactor 要素View视图Run运行Tools工具Window窗口 Help帮助

Vector矢

addElcment添加内容Project linzard工程向导Step步骤

Title 标题 Description 描述 Copyright 版权 Company 公司

Aplech Limited Aplech 有限公司

author作者Back后退Finish完成version版木Debug调试New新建Error insight

调试第十章:

JFraBe 窗 口框架 J Panel 而板 JScrollPane 滚动面板 title 标 题 Dimension 尺寸

Component 组件

SringJAVA轻量级组件getContentPane得到内容面板LayoulManager布局管理器

setVerticalScrolIBarPolicy 设置垂直滚动条策略 AWT ( Abstract Window Toolkit )抽象

窗口工具 包 GUI < Graphical User Interface )图形用户界而

VERTICAL_SCROLLEARAS_NEEDED 当内容大大而板出现滾动条

VERTICAL_SOROI1EARAS_ALWAYS 显示滾动 条 VERT1CAL_SOROLLEARAS_NEVER 不

显示滚动条

J Label标签Icon图标image图象LEFT左对齐RIGHT右对齐

JTextField単.行文本getColumns得到列数setLayout设置布局Borderlayout边框

布局CENTER居中对 齐JTextArea多行文本setFont设置字体

研发中心技术架构设计规范 2020-2021

setHorizontalAlignment设置文本水平对齐方式setDefaultCloseOperation设置默

认的关闭操作add 増加

JButton按钮JCheckBox夏选框JRad ioButton単选按钮add item増加列表项

getltemAt 得到位置的列表项getlte戒ount 得到列表项个数set Ro 11 over Icon当

鼠标

经过的图标setSelecledlcon 当选择按钮的图标getSelectedltem得到选择的列表项

gelSelectedlndex 得到选择的索引 ActionListener 按钮监听 ActionEvent 按钮事件

act ionPerformed 按 钮单击方法

附加可能有重复

编程英语:(手摘)

abstract (关键字)抽象 r?bstr?kt] accessvt. W 问,存取 C?kses]' (n.入口 ,使用权)

algorithmn.算法 C?lg?riem]

Annotat ionjjava]代码注释 [?n?u* tei??n]

anonynousadj.匿名的(?'n?nim?s「(反义:directly adv.宜接地,立即[di'rektli,

dai'rektli]) apply v.应用,适用[?'piai] application n. ®用,应用程序(,?pli'kei??nr

(application crash 程 序崩溃)

arbitrarya.任意的 Co:bitr?ri]

arguwent n.参数:争论、论据[argent f < 缩写 args) assert (关键字)断言[?'S?:t] -

(java

1.4之后成为关键字)

associate!).关联(同伴,伙伴)[?*s?u?ieitj attribulen.属性(品质,特征)(?'tribju:t)

boolean (关键字)逻辑的,布尔型call n. v.调用:呼叫:[k?:l]

circumstancen.事件(环境,状况)['s?:k?mst?ns] crash n.崩溃,破碎

cohesion 内聚,黏聚,结合[k?u*hi:??n]

研发中心技术架构设计规范 2020-2021

(a class is designed with a single, weil-focoused purpose.应该不止这点)connand

n.命令,指 令[k?. m a:nd](扌旨挥.控制)(commandTine 命令行)Comments

[java]文木注释(*k?Bents]

compile (java] v.编洋[k?nrpuil]' Conpilation n.编辑[.k?mpi'lei??n] const (保留字)

constant n.常量,常数,恒量['k?nst?nt] continue (关键字)

coupling耦合,联结

nuking sure that classes know about other classes only through their APIs, dec

1 arejjava]声明 [d fkl??]

default关键字)默认值:缺省值[di*f?:l订

delimiter定义符:定界符

Encapsulation]java]封装 (hiding implementation details) Exception [java]例外:

异常

[ik‘ sep??n]

entry n.登录项,输入项,条目卩entri] enun (关键字)

execute vt.执行(*eksikju:订

exhibit v.显示,陈列[ig' zibit]

exist 存在,发生[ig'zist] (SQL 关键字 exists) extends (关键字)继承、扩展[ik'stend]

false (关键字)

final (关键字)finally (关键字)fragments 段落;代码块['fr?gm?nt] Framework

[java]结构,框架(’freiow?:k] Generic [java]泛型[d?i'nerik]

golo (保留字)跳转heap n.堆(hi:p]

implements (关键字)实现[inplim?nt] import (关键字)引入(进口’输入)

研发中心技术架构设计规范 2020-2021

Info n.信息(infonnation (. inP'mei??n] ) Inheritance [java]继承[in'herit?ns}(遗

传,遗产) initialize 预置初始化(i ni??laiz)

instanceof (关键字)运算符,用于引用变量,以检査这个对象是否是某种类型。 返

回 boolean

值。

interface (关键字),妾口 [*int?feis]

invokevt,调用[in v?uk]' (invocation [, inv?u kei??n])

Iterator [java]迭代器,迭代程序

legal合法的logn.日志,记荥[l?g]

native (关键字)? ? fneitiv]

nested [java]嵌套的 fnestid]'如:内部类(nested classes) Object [java]对象

[,?bd?ektl

Overload [java]方法的重裁(不同参数列表的同名方法)[.?uv?i?ud] Override [java]方

法的覆盖

(覆盖父类的方法)(.?□*?* raid] polymiorphismfjava]多态(polymorph ism 多形性

[,p?li'n?:fizm]) al loving a single object to be seen as having many types.

principlen.原则,原理,主义 fprinsipl] priority n.优先级[praif?riti] process n.程序.进

(♦pr?ses)

protected (关键字)受保护的.私有的[pr?'tektid] providev.规定(供应,准备,预防)

Ipr?' vaid]

refer to v.引用[ri*f?:][tu:]

referencen.参考(引用,涉及)['ref?r?ns], Preference variable 参堡,参考变量,弓I

用变 S Reflection [java]反射[ri* flek??n] scriptn.手写体,小型程序[skript]

研发中心技术架构设计规范 2020-2021

serialized vt.序列化,串行化['si?ri?laizl,(serializable adj.) (deserialize 反序列化,反

串行 化)

Socket (java]网络套接字 C s?kit[

stack n.堆栈[st?k](对应 heap 堆)

statement 程序湃句:语句V steitnTnt]* n.陈述,指令 subclass n.子类 J' s?bkl a:sj*

(supertype 父 类)

switch (关键字)选择语句。n.开关,道?]

synchronized (关键字)同步(锁)['si?kr?naiz] Thread [java]线程[9 red)

throw (关键字)throws (关键字)[0 r?u]抛出(异常)transient (关键字)瞬变:临时的

「tr?nzi?ntr (可序歹0化)valid正确的,有效的[Slid]

variable n.变量 a.可变的 C v??ri?bl] volatile (关键字)不稳定的 <'v?l?tail]

while (关键字)循环语句。 当...的时^[hwail] abstract (关键字)抽象

[»?bslr?kl] access".访问,存取?kses]' (nA 口,使用权)algorithmn.算法 J'?】g?riem]

.Annotation (java]代码注祥[?n?u' tei??n]

anonymousadj.匿名的卩'n?nim?sr (反义:directly adv.直接地,立即[di' rektli. dai'

rektli] ) apply v.应用,适用[?'plai]

application n.应用,应用程序(.?pli'kei??n]' (application crash 程序崩溃)arbitrarya.

任 意的 Ca:bilr?ri]

argunent n.参数:争论,论据['a:gjum?ntj'(缩写 args)

assert (关键字)断’(java 1.4之后成为关健字)

associate!).关联(同伴,伙伴)[?* s?u?ieit] attributen.属性(品质,特征)(?'tribju:t)

boolean (关键字)逻辑的,布尔型call n.v.调用:呼叫;(k?:l]

circumstanced 事件(环境,状况〉(*s?:k?msl?ns) crash n.崩溃,破碎(kr??]

研发中心技术架构设计规范 2020-2021

cohesion内聚,黏聚,结合[k?u・hi:??n]

(a class is designed with a single, «ell-focoused purpose.应该不止这点)connand

n.命令,指 令[k?'m a:nd](指挥,控制)(connand-1 ine 命令行)Comments

[java]文本注释('k?mnts]

compilef java] v.编洋(k?m' pail]' Compilation n.编辑(,k?tnpi'lei??n] const (保留

字)constant

n.常量,常数,恒量('k?nst?nt] continue (关键字)

coupling 耦合,联结['k?pli?]

making sure that classes know about other classes only through their APIs, dec

1 arejjava]声明 印 kl??]

default]关键字)黙认值:缺省值

delimiter定义符:定界符

Encapsulation[java]封装 (hiding implementation details) Exception [java]例外:

异常

[ik'sep??n]

entry n.登荥项,输入项,条目[* entri] enum (关键字)

execute vt.执行[*eksikju:t] exhibit v.显示,陈列[ig'zibit]

exist 存在,发生(ig. zist] [SQL 关健字 exists)

extends (关键字)继承、扩展[ifstend] false (关键字) final (关键字)finally (关键

字)fragments 段落;代码块['fr?gm?nt]

Framelork (java]结构,框架 C freimw?:k] Generic [java]泛型[d?i' nerik] goto (保留

字)跳转 heap n.堆(hi:pl

implements (关键字)实现

import (关键字)引入(进口,输入)

研发中心技术架构设计规范 2020-2021

Info n.信息 (infonnation [, inP'mei??n] ) Inheritance [java]继承

[in. herit?ns](遗传,遗产)initialize 预置初始化(i*ni??laiz>

instanceof (关键字)运算符,用于引用变量,以检査这个对象是否是某种类型。 返

回 boolean

值。

interface (关键字)接口 [' int?feis]

invokevt.调用 (in'v?uk]" (invocation [, inv?u' kei??n])

Iterator [java]迭代器,迭代程序

legal合法的Cli:g?I] 】ogn.日志,记荥[l?g]

native (关键字)? ? [* neitiv]

nested [java]嵌套的{' nest id],如:内部类(nested classes) Object [java]对象

[*?bd?ekt]

Overload ( java]方法的'重栽(不同参数列表的同名方法)[.?uv?i?ud]

Override ( java] 方法的覆盖(覆證父类的方法)(,?uv?' raid] polymiorphism[java]多 态

(polymorphism 多形性[,p?li'n?:fizm] ) allowing a single object to be seen as having

many types.

principles 螟则,原理,主义 Cprinsipl] priority n. 优先级[prai'?riti] process n.程

序, 进程 Cpr?ses]

protected (关键字)受保护的,私有的(pr?' tektidi providev.规定(供应,准备,预防)

[pr?* vaid]

refer to v.引用 (ri'f?: Htu:] referencen.参考(引用,涉及)[-ref?r?ns]' -

'referencevariable参量,参考变量,引用变量

Reflection [java]反射[ri* flek??n] scriptn.手写体,小型程序[skript]

研发中心技术架构设计规范 2020-2021

serialized vt.序列化,串行化('si?ri?laiz]' (serializable adj. ) (deserialize 反序列化,

反串行 化)

Socket (java]网络套接字 |'s?kit]

stack n.堆栈[st?k](对应 heap 堆)

siateaent 程序语句:语句( steiu«?nt]' n.陈述,指令 subclass n.子类[*s?bkl a:s]'

(supertype 父 类)

switch (关键字)选择语句。n.开关,道岔(s«it?] synchronized (关键字)同步(锁)

['si?kr?naiz] Thread [java]线程(0 red]

throw (关键字)throws (关键字)[0 r?u]抛出(异常)

transient (关键字)瞬变:临时的[• tr?nzi?nt]-(可序列化)valid正确的,有效的[*v?lid]

variable n.变量 a.可变的 C v??ri?bl] volatile (关键字)不稳定的[*v?l?tail]

-hile (关键字)循环语句。当...的时候(hwail]

argument 参资 abstract 抽象 ascent 提升 already 已经 A#T(Abstract Window

Toolkit)抽象窗 口工具 API (Application Programing Interface)应用程序接口

B. byte 字节 Boolean 布尔 banana 香蕉 base 基础 buffer 緩冲器 button 按钮

break

中断body身体

C. color 颜色 class 类 count 计数 client 客户 code 代码 calculation 计算 cell 单元

circle 圆 capital 首都 catch 捕获 check 检査 container 容器 component 组件 conmind

命令 cube 立方,三 次方 char(=characler)字符 cancel 取消 case 悄况 choice 选择 click

単击 center

中心compile编译clone克隆,复制continue继续create建立

D. draw 绘图 data 数据 demo 示例 DLL (Dynamic Link Library)动态链接库

document 文档

descent继承division分裂,除法define定义,说明display显示

研发中心技术架构设计规范 2020-2021

E. error 错误 extends 扩展 executed 执行 event 事件 enter 输入,回车健

exception

异常except除外enployee雇员environment环境east东方equal相等Echo重复

F. false假的float 度型fruit水果file文件find发现found发现field域final终结的

friend朋友fill填充focus焦点font字体factorial阶乘

G.

graphic图像grid方格GUI图形化用户接口

H. host 主机 height 高度 1. inil(=initialize)初始化 input 输入实例

io(=input/output)输出输入 interrupted 素interface接口 inner内部的 import导入

index索引image图像

JJava 爪哇 JDK(Java DevelopmentKit) Java 开发工具 页 JVMQava Virtual

Machine) Java 虚拟机

K-Kit工具

LJanguage语言loop循环long长整型label标签layout布局list列表listener收听

M. move移动menu菜単• mode模式method方法metric米的,公尺motion运

manager 经理 main 主要的 msg(=message)消息

研发中心技术架构设计规范 2020-2021

N. new新的number数字 north北方null空的native本地的

□. override过薮orange橘子output输出object对象out外部的oval椭圆

P. public 公共的 protected 保护的 private 私有的 property 属性 point 点 price

problem 价格 问题package打包,包裹print打印path路径polygon多边形program

prompl提示parse分 程序 析press按,压panel面板paint画

Q. q无

R. return 返回 runnable 可捕获的 radius 半径 round 环绕 release reel

(=rectangle)长方形 释放 radio无线电resolve解析

S. short短整型south南方的string字符串static靜态的system系统 种子seasonal

季节的 set设置super超级square平方,二次方sub替代的screen屏 幕sound声音

state状态 salary薪水sleep睡觉size大小.尺*]' start开始sort排序status状态

synchronize同步发生 switch 开关 strean 流 symbol 符号

T. true 真的 title 标题 type 类型 temp(=leiBporarv)暂时的 throw 扔 ihread 线程

temperate

温度tool工具try试图

□. undefined 未定义 UI (User Interface)用户接口 update 更新 URL (Uni form

Resource

Locator)统一资源定位器

V. volatile挥发性visible不可见的virtual虚拟的variable变量value数值void无返

回值的 volume列viewer观察者vector矢量

•我喜欢式」:constructor建构式declaration宣告式

definition 定义式

destructor 构式 expression 算式(运算式)function 函式

pattern范式、模式、样式

program 程式

signature标记式(签名式/署名式)

研发中心技术架构设计规范 2020-2021

•我喜欢「件」:(这是个弾性非常大的可组合字)

assembly (装)配件 component 組件 construct 构件 control 控件

event 事件 hardware 硬件 object 物件 part 孝件、部件 singleton 单件 software 软

件 work I 件、机件

,我喜欢『器」:adapter配接器allocator配置器compiler编译器container容器

iterator迭代 器linker连结器listener监听器interpreter宜译器

translator转洋器/翻译器

•我喜欢「别」:

class类别

type型別

,我喜欢「化」:generalized泛化specialized特化overloaded多载化(重载)

,我喜欢「型」:polymorphism 型 genericity 泛型

•我喜欢I■程」:

process行程/进程(大陆用语)thread绪程/线程(大陆用语)programming编程

•英中繁简编程术语对照英文繁体洋词

(有些是候捷个人喜好,普及与否难说) 大陆惯用术语

"define定义预定义

abstract抽象的抽象的

abstraction抽象体、抽象物、抽象性抽象体、抽象物、抽象性

access存取、取用 存取、访问access level存取级别 访问级别access function /f-取

函式访问函数activate活化激活

actig作用中的adapter配接器适配器address位址 地址

研发中心技术架构设计规范 2020-2021

address space位址空间,定址空间

address-of operator取址运算子取地址操作符

aggregation聚合algorithm演算法 算法allocate配置分配

allocator (空间)配置器分配器

application应用程式应用、应用程序

application framework应用程式框架、应用框架应用程序框架

architecture架构、系统架构体系结构

argument引数(传给函式的值)。冬见parameter富数、实质矣数、实冬自变量array

阵列数组 arrow operator arrow (箭头)运算子箭头操作符

assembly装配件

assembly language组合语言 汇编语言

assert (ion)断言

assign指派、指定、设值、賦值赋值

assignment指派、指定賊值、分配

assignment operator指派(赋值)运算子=賊值操作符

associated相应的、相关的相关的、关联、相应的

associative container 关朕式容器(对应 sequential container)关联式容器

atomic不可分割的原子的attribute属性属性、特性audio音讯音频

A.I.A工智慧 人工智能

background背景背景(用於图形若色)後台(用於行程)

研发中心技术架构设计规范 2020-2021

bandwidth频宽带宽

base class基础类别基类

base type基础型别(等同於base class) batch批次(意思是整批作业)批处理benefit

利益收 益

best viable function 最佳可行函式 最佳可行函式

(从viable functions 中挑出的最佳吻合者)

binary search二分捜寻法二分査找

binary tree二元树二叉树

binary function 二元函式 双冬函数binary operator 二元运算子 二

元操作符binding系结绑定

bit位元位

bitfield位元栏?位域

bitmap位元图?位图

bitwise以bit 为単•元逐 ?

bitwise copy以bit为単元进行复制:位元逐一复制位拷贝

block区块,区段块、区块、湃句块

boolean布林值(直假值,true或false)布尔值

border边框、框线边框

brace (curly brace)大括弧、大括号花括孤、花括号bracket (square brakcet)中括

孤、中括号 方括弧、方括号breakpoint中断点 断点

研发中心技术架构设计规范 2020-2021

build 建造、构筑、建置(MS用语)

build-in内建内置

bus汇流排总线business商务,业务 业务buttons按钮按钮

byte位元组(由8bi ts组成)字节 cache快取高速缓存call呼叫、叫用调用callback回

呼回调 call operator call (函式呼叫)运算子()週用操作符

(同 function call operator )

candidate function候选函式 候选函数

(在函式多裁决议程序中出现的候选函式)chain串链(例 chain of function calls

)链character字元字符

check box 核取方块(i.e. check button)复选框

checked exception 可控式异常(Java)

check button 方钮(i.e. check box) 复选按钮

child class 子类别(或称为 derived class, subtype)子 类

class类别类

class body类别本体类体? class declaration类别宣告、类别宣告式类声明class

definition 类别定义、类别定义式类定义class derivation list类别衍化列类继承列表class

head类别表 头类头?

class hierarchy类别继承体系,类别阶层类层次体系

class library类别程式库、类别库类库class template类别模板、类别范本 类模板

class template partial specializations

类别模板偏特化类模板部分特化

class template specializations

类别模板特化 类模板特化

研发中心技术架构设计规范 2020-2021

cleanup清理、善後清理、清除client客端、客户端、客户客户client-server主从架

构客户/ 服务器clipboard剪贴簿剪贴板

3、java基本关键字和常用方法

异常列表

受检异常列表

1Unhandled exception type Exception

有抛出的异常没有处理! !

2xception in thread *main* java. util. NoSuchElementException

调用 gMap$PrivatQEnlry】try 时,访问越界。

建议在调用nexlEntry前,先用HasNexlEntry方法确认是否还有数据没有遍历

3java. eption已经到达文件末尾还多读了内容:

4java. lang. 11legaiThreadStateException 试图打开一个死掉的线程:

常用类和常用方法

异常类

基木关键字

Try( }catch: java处理异常的基木关建字,try 中写的异常可以使父类捕获子类,但不

能反过来,exception是所有异常的父类:

Throw:拋.它将把异常抛出到上一层去处理.它是语句级别的,跟在语句后面

Throws同上,但是他是跟在方法后面的。

Finally :无论有没有检査到异常finally语句块中的内容都要执行,finally语句块中 最

好不要 添加 return语句,这可能导致throw语句受到干扰无法将异常抛出.

jdk系统的比较器

研发中心技术架构设计规范 2020-2021

Comparable comparable是lang包中的一个接口,使用时方法compareTo必须被

重写

他通常是写入到要撞序的(类/集合)的内部,当被数组调用的时候直接用Arrays, sort

(数组)

引用即可,当被集合调用的时候主函数不需要做任何处理:

设计模式 工厂模式单列模式装修工模式面向对象

基本关键字

Private仅仅木类成员可以访问(包括方法和内部类等等)

Protected 仅仅同一个包和子类可以访问:

Public所有内容可以访问

abstract抽象类/f方法,抽象类必须被继承不能实例化. 抽象类不能是私有类,

抽象方法必须被重写

default类的默认访问级别在同一个包中可以访问:

extends继承关键字,继承会导致子类拥有父类的全部属性和方法:接口体必须全部被

重写,接 口体中的方法声明不需写出方法体,直接以分号结尾:

eplenment 接口继承关键字:一个类可以实例化多个接口,但只能继承一个父类:

interface接口定义关健字:注意接口中的属性都是常量.被public static final定义,

被称为 接口常量:

final最终关键字,此定义的变量一经賦值便不可更改.此定义的方法不能被继承:

注意final

和finally的区别;

sialic静态关键字,静态方法可以被直接调用,(非静态的方法必须产生对象才能调用)

研发中心技术架构设计规范 2020-2021

小贴士:静态内部类也可以直接调用,调用方式和调用静态方法类似:另外静态的上下

文中不 能去访问非静态的内容(除非将非静态内容实例化):所有必须被继承的常量必须在声

明的时 候就初始化,因为在后而初始化可能得到不同的值那样他就不是常量了:

继承

1.子类可以继承父类的方法和字段,要让调用的时候调用出来的是子类的字段必须加

super, super 了儿个字段父类就必须有一个构造方法写了凡个字段:

super ()必须有父类的空构造方法对应, ).

如果不加super对象调用的将是父类的字段:

Stringbuffer:因为string不能改变大小所以要使用 Stringbuffer .

〈Texlends B〉泛型的上限

2.子类继承自父类的,不能扩大访问权限

内部类和静态内部类

接口

接口的字段默认是 public static final类型:

重写和重裁

方法的重栽:参数不同,返回值可以相同也可以不同.

方法的重写:名字,返回类型,参数都一样:

研发中心技术架构设计规范 2020-2021

正则表达式

匹配模式

Pattern pattern=Pattern, complie ("匹配规则 ”)Matcher mat=pattem. matcher

(匹 配 目标)

Boolean a= mat. matchsO:// 返回匹配结果:

集合

名词解释

ArrayList :(这是一个有序,但是可以重复的集合)ArrayList相当于是一个可以改变大小

容蛰 的数组.它的访问速度可以很快:

KindeUsrt (有序可重复)KindeLiSt内部是一个链表式的结构他通过这条链来访问链上

的元素所 以执行除和插入动作的时候比较慢:

HashSetH: ashSet是乱序不重复集合,它是先比较hashcode然后在比较hashcode是

否重 复,如果 没有重复就直接写入,如果重复了才继续调用equals进行比较,因为他的这

个特点导致其实 他还是有可能重复一当你new 了一个一模一样的元素时:

hashMap:(乱序不可重复的集合,访问速度快),不能直接迭代:

TreeMap:(有序不可重复的集合,它通过哈希码和equals 两种方式来进行判定,

Treemap

通过key值来査重,为了避免key值相同的元素被覆孟可以重写equals

Map (包括HashMap和TreeMap) 一般无法直接迭代,将键或者键值对映射给Set的

方法来迭代

lterator

Eg:Setitor=map. enlrySet(): 1

lterator

Integer) e = itor. next。: 3

研发中心技术架构设计规范 2020-2021

〃这是键值对迭代:迭代器的苴接对象是Entry.所以引用Treemap的对象还要再加上

第3句:

eg: lterator ktor = kmap. keySet (). iterator():// 这是键迭代: 0 句和 12 两句

的结果是一样的:

小贴士:用for-each代替Iterator进行迭代处理时需要注意for只能迭代一个可以迭

代的对象 或者数组,目前看来这个对象应该是集合的泛型的类的对象:

小贴士:键值对映射迭代比键映射迭代更抉:

关系网络

灰色部分已经不建议使用

«Interface»

Iterator

«lnterface» Collection

«lnterface»

Map

«lnterface» Lisllteralor

«lnterface» Ust

«lnterface»

Set

«lnterface»

SortedSet

«lnterface»

SortedMap

研发中心技术架构设计规范 2020-2021

ArrayList LinkedList

Vector

HashSet

TreeSet liashtable

IhshMap

TreeMap

«lnterface»

Comparator

«lnterface»

Comparable

Stack «lnterface»

Enumeration

Properties

Collections

迭代器

Iterator由可排序的链表对象直接调用方法Iterator获得,

Eg: lterator diedai=xiaoaxei. iteratorO : 此法得到的是一个迭代器对象 diedai

,

注意:使用迭代器不要在一次引用中多次 diedai. nextf)这会导致迭代器的指针向后移

动两次:

list

ArrayList LinkList

研发中心技术架构设计规范 2020-2021

Set

HasHset TreeSet

Map

HashMap TreeMap

名词解释

绝对路径:完整的路径名:

相对路径:当前工程的目录下的路径抽象路径:包含盘符的路径:

exists:测试对象带代表的文件或者目录是否存在:

Deleted:删除文件和目录的方法,删除成功返回true •失败false:注意必须在关闭

10流后才能删除:

小贴:t:各种流的关闭最好写在 finally中以免被各种异常干扰流的关闭过程,10

流中出现各种异常的概率很大,全都要写笄常处理:

Inputstream

字节输入流,用于输入,从文件,内存和其他设备中输入字节型内容:

Outputstream

字节输出流,用于输出,向文件,内存和其他设备中输出字节型内容:

Reader

用于从文件中读取字符,:用于从文件中写入字符:

Writer

缓冲流

BufferedReader :字符读入缓冲流接Reader: BufferedOutputStream :字节输出缓

冲流接

研发中心技术架构设计规范 2020-2021

Outputstream: BufferedlnputStream :字节输入缓冲流 接

inpulstream:

BufferedWriter :字符写緩冲流接 writer:

转换流:

InputStreamReader:得到字符

是Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变为字

符流的输 入对象。

InputStreamReader需要和Inputstream套"接二它可以将字节流中读入的字节解码

成字符

OulputStreamM'riter :得到字节

是Writer的子类,将输出的字符流变为字节流,即:将一个字符流的输出对象变为字

节流的 输出对象。

OutputStreamlriter 要和Outputstrea-套”接”,它可以将要写入字节流的字符编码

成字节,

转换流中如果 读入的字符编码格式和系统的不一致(系统默认为GBK)则需要重新

设置,设置方法如下:

Eg: InputStreamReader isr=new 1nputStreamReader(new FileInputStrean( ».

a. txt ), *

UTF-8'):

这是一个简单的匿名调用: 注意:转换流有且仅有这两种,没有

FilelnputStreamReader^型,不要无中生有:

打印流:

Printwriter :将类容输出到声明时给的目标,这个目标可以是其他输出流(不含内存流)

和文件:

研发中心技术架构设计规范 2020-2021

Printstrewn :同上,此外他的输出目标还可以是内存流:

printT (Locale I, String foraal. args)

使用指定格式字符串和参数将格式化的字符串写入此输出流的便捷方法。

以上两个方法两个类都有类似用法:此外prinlwriter,和printstream都可以在定义

时加一个 true这样他们可以在写入byte数组、调用其中一个printin方法或写入换行符或

字节Cn.) 时都会刷新輸出緩冲区如果对此不熟悉同时要求严格则最好选择手动

刷新:

内存流

ByteArraylnputStream主要完成将内容从内存读入程序之中

ByteArrayOutputStream的功能主要是将数据写入到内存中

EG: ByleArray1nputStream bis= new ByteArraylnputStrean (shuzu) : //

从shzu中读内容,这里不能填其他流’緩冲流也不行: ByteArrayOutputStream

bos= new

ByteArrayOutputStreamO : // 文件将被写入到 bos 中去! ! !

注意:内存流的输出是从程序输出到内存! !这一点和其他输入输出流将内容读入到内

存写入到文件不同 1!

对象序列化

ObjeclOutputStream

对象输出流可以也仅可以输出序列化的对象, 它可以将对汝写到文件里(将会看不

到. 是乱码,但是可以读取).也可以将对象写到内存中:

ObjectinpulstreuBi

同上:

让一个类实现 Serializable接口,那么这个创建的对象就是序列化的:

研发中心技术架构设计规范 2020-2021

java提供的绝大多数对象都是序列化的:

随机读写流:

RandooAccessFile既不是输入流也不是输岀流,但是他的对象既可以是源也可以是流

目的地:所 以他的构造方法有两种:

RandoaAccessFile(String name/filename,Siring mode) 相当于一个输入流,mod

是选填

的(r/rw)表示读写权限:上文中的name/fiiename及是读的对象,也是写的对象:该

类下的常 用方

法较多详情参阅API:

Seekflong a):用来移动流的读写指针在文件中的位置:

getFilePointerO:获取当前流的读写指针在文件中的位置:

线程

名词解释

目标对象:指由runable创建的对象.通过runable创建的线程是不是共内存的?同步:

指在使用 时不能被多个目标同时使用该内容:

安全同步

关键字:Synchronized.它可以用于加在方法前面也可以写在代码块前面:

加在代码块的前面时它必须加入监视器(对象锁) :为了更好的实现线程对同一

资源的修改的一致性,最好使用被并发访问的共享资源作为监视器: 当监视器相

同的时候才能保持同步:总之:同步加锁的是对象(内存),而不是代码一(思考用同一目

标对 象创建的多个线程的 同步一如果目标对象中的方法(不管是不是静

态的)被加锁就可以锁住所有线程的该方

法,,?):对于很多时候同步时写的 (类型名.class)它表示的是类创建的时候的一

块内存(类似一个对象),它是唯一的! !

研发中心技术架构设计规范 2020-2021

同步的写法:

LSynchronize (d类型名. class)类型. class返回的是一个该类被定义时系统生成的一个

对象,这 个对象不能被外部代码改变因此可以锁住整个类的全部对象:

2. Static object inm=new object 0 :

Synchronized(mm)(}:所有.共享 皿字段的内容不能同时调用关键字里面的内容:

onized Static void test() {}:锁住了这个静态的方法,这个静态的的方法不能

同时被 调用:

-Synchronized (this).此句锁住的是this所指向的对象.使其不能被其他代码同时调

用:

5. Synchronized (th is) {} Synchronized void test() {}=Synchronized(ne» Object)

深。刻理解这其 中的原理! ! !(他们都是对不对象同步但不对其他对象同步,另外最后一个

例子的

Object中不能是被final修饰的,因为final是共内存的:)

冋络编程

Tcp/ip

关键字:serversocket Socket

注意:使用套接字输出流的时候用完最好要关闭, 不然会经常岀现很

多匪夷所思的错误,例如程序无法关闭等现象:UDP

Web htmel

动态网絡

Sqlite httpUrlConnection xml

SAXParser parser = factory. ncwSAXParserO :

3. 自定义Myliandler继承De fault Handler类这个类中你将要定义一套解析规则。

三个主要函数的重写和调用:

研发中心技术架构设计规范 2020-2021

startElement ( String uri. String localName. String qXame. Attributes attributes :

析的开始.参数有用.如果标签中有属性,则attributes参数有用.

endElement ( String uri. String localNaae. String qName ):节点解析的结

束.qNiune characters (chart] ch. int start, int length):文本节点的解析.设置对象属性.所

4. 引用Handle方法开始解析

parser, parse(new File(*student. xml*), handler);

Pull解析器

Pull解析是安卓内置的,如果要在Jee中引用需要架包,PU11解析器不需要handle

方法,

1. 创建pull解析器的工厂

创建 pull 解析的工厂类对象 XmlPullParserFactory factory

=XmlPulIParserFactory. nevlnstanceO:

应该注意调用方法的大小写:

2. 创建pull解析器

创建鮮析潞 Xn>l Pull Parser parser = factory. ne«Pu 11 Parser () : 3.解析文件

指定解析文件:注意对于Pull解析器来说由于没有handle方法它的解析规则是直接写

入到 解析器中的.pull解析器是事件驱动型的。

研发中心技术架构设计规范 2020-2021

parser, setinput (nev FileReaderCstudent. xnl*)) :// 在项目根目荥 F,形参是

Reader 类 型.

parser, set Input (ne« FilelnputStrcamCstudent. xml"), "utf-8"): 〃 解析中文,形

参是 Inpulstrean 类型.

4.获得事件状态码int eventType = parser. getEventTypeO :在开始解析之前要先获

取一次

parser. next 0写在每次循环的末尾以便获取下次解析的状态码,这个状态码是一个

int型的整 数。

json

I基本定义:

JavaScript Object Notation符号基J- JavaScript语言的轻量级的数据交换格式;

即:用来传输数据的一种格式.

名值对 name:value

json 对象(namel: value】. name2:value2 json 数組[valuel, value2, value3,...]

2. json解析模式:

当json字符串以T开始,用JSONArray解析当json字符串以 开始,用

JSONObject 解析

3. 解析流程:

创建一个用来存放解析结果的java对象,再产生一个 json对象,解析json中的值

分别赋值给解析目标的对象:

4. 写入流程

研发中心技术架构设计规范 2020-2021

得到一个 java对象.再产生一个json 对象•(如果有链表之类的要产生一个

json数组对象)

EG: JSONArray arr = new JSONArray(list) ://List>»JSONArray 将包含多个目标对

象 Person

的链表存放到 JSOKArray中:

再依次将 java对象的值駐值给json对象:

4、JAVA常用基本算法

什么是算法?对一个现有的问题我们采取的解决过程及方法,即为算法。一个用铮法实

现的程 序会耗黄两种资源:处理时间和内存。

算法的效率分析标准:

时间复杂度

空间复杂度

简単性和清晰性

对J时冋夏杂度,可以通过SystenrcuiTeutTimeMilhsO方法来测试。例如:

public class Test

public static void iuaui(Struig args[])

Systes out pnnthi(System currentTitneMillisO):

Systetn. out. pnnt 1 n(SystemcurrentTiiueMi 11 isO).

)

public static void fiuiQ

double a = 0.

for(nl i = 0:i< 10000 i++)

研发中心技术架构设计规范 2020-2021

fbr(int J = 0: j < 10000: j+t) fbr(intk = 01k< 100, k++) 前后两次拱得,与前系统

时间的差偵就是运行所消註的时间(臺秒为単位)・

通过System currenlTuneNfiilisO方法来测试的缺点:

,不冋的平台执行的时间不冋

b冇些算法随音输入数据的加大,测试时冋会变得不切实际!

4.2査找

4.2.1査找之线性査找(直接査找)

算法思路:从数组的第一个兀素开始査找•并将其与實找偵比较,如果相等则停止,杏

则继续 下一个元素査找,直到找到匹配值.

注意:被査找的数组中的元索可以是无序的、随机的。

実例:

unport java. util. *;

public class Deiuol

public static void inain(Stnng argsQ) mt iArr(] = (32,9. 78、44. 29.18. 97.49. 56.

61}:

Systein. (M数组的所有元戎为:”):

fbitint I: iAit)

System, out. print (i +**"):

System, out pnutlnO,

System out pnnt(M清输入你要査找的元素、:,

Scanner scan = new Scanner(System in):

int iXuiD = scan. nextlntO:

int index = stiaight Search(iAiT, iNuin). i£(ndex = T)

研发中心技术架构设计规范 2020-2021

Systeoi (*没仃找到元成"+ iNum), else

System out printhifll 找到元素仙 + iNum 十二 卜标为 + index):

public static int straightSearch(n!t[] an» int num)

mt i = 0,

for(: i v arr length: i++)

retuiu i:

return-k

4.2. 2査找之折半査找(二分査找)

算法思路:假设被苴找数组中的元素是升序排列的.那我们査找伉时.首先会直接到数组

的中冋 位置(数组长度/2),并将中间值和査找値比较,如果相等则返回,否则,如果当前兀

素價小

『査找值,则继续在数组的后面一半査找(重复上面过程):如果当前元素偵大于査找

值,则继 续在数组的前而一半査找.直到找到目标值或舌无法再二分数组时停止。

注意:二分査找只是针对有序排列的各种数组或集合。

实例:

“不利用递团实现

unport java .util ♦:

public class Derool

public static void iuaiu (Stnug args[])

int lArrQ = (I. 2, 3.4. 6. 8, 22, 44,99. 11U 112.116):

System out pllntlnC,数组的所有元素为 fbr(«t 1 iAit)

System out print(i 十”・

Sy st col out. pnntlnO.

研发中心技术架构设计规范 2020-2021

System out pniit(M清输入你要卉找的元索:"),

Seamier scan = new ScanneriSystem in). mt iNuin = scan. nextlntO:

mt index = binaryScareh(iArrJ Nuni. 0. iAn* length-1): i f(mdex =. 1)

System, out. prmtIn (•没石找到元素” + iXum):

else

System out. pnutlnO1 找到元素”十 iNuo + F 标为 + index):

public static int binarySearch(nit[] air, uit num. mt iMm. int iMax)( while(iKfii)<=

iMax)

int iMid = (iNlin + iUax) / 2.

由 num = arr(illidj) return iMid:

else ifinuB < aiTJiMid]) iMax = iMid-1:

else

iMin = iMid*b

I

return -L

"利用递归实现

unport java util •:

public class Demol public static void inain(Stnng args[]) at iArr[] = (1.2,3. < 6. 8.

22.44. 99, 111. 112.116):

System out pruitlnCEl 的所有元素为:"):

fbr(int i lArr)

System out print(i ♦

研发中心技术架构设计规范 2020-2021

Sy stein, out . pnntlnQ

System, out pnnt (* 清输入你要査找的兀素:").Scanner scan = new Scanner 1 Sys

tern in), ml iNuin = scan nextlutO.

int index = binarySearch(iArr. iNiim 0、 iAn. length-!):

if(index = -1)

System, out. priulluC,TS 冇找到元素"+ iXum),

else

SystetD. out. print In (M 找到元素"+ iXum 十二 H 标为:"+ind(?x):

I

public static mt binarySearch(mt□ arr. mt num. ml iMin. int iMax)

int iMid = (iMin + iMax) 2y

if (num < arrfiMin] 11 mini > arrpMax])

return -I:

else if (num = an[iMid])

return iMid:

else if (num < arr(iMid]) rehini binarySearch(arr, ihmd, iMin. iMid -1):

else

return binarySearch(air, num. iMid + I. iMax):

4.3排序

4-3.1 rt序之插入排序

4.3. 1.1插入捧序之直接插入排序

研发中心技术架构设计规范 2020-2021

算法思路:宜接抽入排序(stiaiehl inseitionsort)是一种最简单的排序方法.它的基本操

作是将 一个i己录捕入到一个长度为iu(lH设)的白-序衣中,使之仍保持有序,从而得到-个

新的长度 为"I的有序表•设有一组关键字{KI, K2.-. Kn|:捍序开始就认为KI是一个有序序

列:让K2插 入上述表长为1的有序序列.使之成为一个表长为2的有序 序列:然后让

K3插入上述表长为2的冇序序列.使之成为一个表长:为3的有序序列:依次类推,最

后让Kn插 入上述表长为n-1的有序序列,得一个表长为n的有序序列。

实例:

“49, 38. 65. 97, 76.13.27 初始情况

"[49] , 38.65, 97. 76. 13.27 从下标 1 开始

“[38, 49], 65. 97, 76,13,27

頂&49,65]. 97. 76. 13. 27

“[38, 49. 65. 97], 76. 13, 27

//(38, 49,65,76,97], 13,27

"[13.38.49. 65.76. 97]. 27

“{13, 27. 38, 49.65. 76. 97]

代码实现3

pubhc class Test public static void nain(Stnng [] args)(

mt a(| = (49, 38, 65.97.76.13. 27): straighthisertSort (a); for (nt i = 0: i < a

length: i卄)

System, out. print (a(i] + *).

System out printlnO: public static void straightlnsertSort(int a[])( uxt I m,

for (i = 1: i < a. length,[卄)〃共进行 n-1 趙插入

while (d >= I && a(in] < "短路衣送式

aW = (aW+a[rIJ) - (atari] =a[«l):w 比前一个小,则,j 之交换

研发中心技术架构设计规范 2020-2021

4.3. L2插入排序之折半插入擂序

算法思路:折半插入捶序(Binary insertion sort)直接插入排序进行到某-越时.对于a [i]

来洪, 前边1-1个记录己经按们乳此时不用仃接插入排序的方法,而改为先用折半査找法

找出币]应 插的位置,然后再插入。这种方法就是折半插入排序.

基本步驱h

a、 初始化:设定有序区为第-个元末,设定无序区为后而所有元素

b、 依次取无序区的每个元素

c、 通过二分法査找有序区,返回比这个数小的最大数

d、 保留此位置数据

e、 从此位置的元素到冇序区的最后一个元素.依次后移

f、 用保留的数据填充此位置

代码实现:

public class Test

(

public static void tnain(Stnng [] args) ( mt a[] = (49,38, 65,97,76, 13. 27): bi nary

insert Sort (a):

for (mt i = 0, i < a length, ii) System, out. pnut(a(i] + " H), System out pruithiQ

public static void binaryhisertSort(in! a[])(

for (mt 1 = 1: i < a length: if 共进行 n~l 趙插入

int iTmp = a[i],"将待插入散据临时保存到 iTmp 中去.int m = findPosition(at a[i]. 0,

i -1): * m是a[i]应该呆的位置for (mt j = i, j > m:广)

ab] =a(j-lir整体向后移动一个位置

a[a] = iTmp; * .是a[i]应该呆的位置 public static mt fiudPosition(nt a[]. at aim. uit

iMin,

研发中心技术架构设计规范 2020-2021

int iMax) ( if (num < a(iMin])

return iMm; 〃超出■围值接返回

if (num > a(iMaxl)

return iMax + 1:"超出范1刊,直接返回 int iMid = (iMrn + iMax) / 2,//选取中偵,

准备:分 if(a[iMid]>=num) 〃継续二分:递归 return findPosition(a. num iMm. iMid -

1): 〃目标在左边,递左边(p[tn)已经比较过,排出査找 范围)

else //if (a[a] < num)

return findPosition(a. num, iMid + 1. iMax):*冃标在右边,递归右边(p[m]己经比

较过,排出査 找范围)

4-3. 13插入排序之希尔排序

算法思路:布尔据序(Shell Sori):是插入排序的一种.因D.L Shell f 1959年提出而得

名。先 取一个小J•数组长度n的整数dl (—皴为n/2)作为第一个増量.把文件的全部记荥分

成dl个組。 所仃正崗为dl的倍敢的记录放在冋一个组中•先在各组内诳行直接插入拌序:

然后,取第二 个増d2

① 先电一个正整致飪相I <:n).把全部记荥分成d】个组,所有距髙为山的倍枚的记荥

看成一 组,然后在各組内逬行插入排庠,

② 然后取d2(d2

国更鳧上述分组和捧序操作,直到取di=l(i>=l),即所有记荥成为一个组为止。一船透

山约为 n/2.飽为 dI/2.心为 d2/2 •…,di。。

【例】有—組美强享(76 811 60 I 22 98 1 33 • 12 I 79

).将苴技由小到大的的摩梓停。这里n=8. Sldl=4. d2=2«>d3=lo拌帝过根如图9.2所

示。

结果 12 22 33 66 76 79 81 98

图92希尔排序示例

代码实现:

public class Test

研发中心技术架构设计规范 2020-2021

public static void inain(Stnng (] args) ( mt a(] = (49, 38, 65, 97, 76,13.27}:

shellSort(a): for (nt i = 0. i < a length: i卄)Systeo. out. print (a[i] + H ").

System out pnntlnO,

public static void shellSort(int a(])(

intk = a ienglli /2: Z/k值代表前文中的増蛰:d值

while (k>=l)//Mi増鼠k偵变化到0.结束循环

for (inti = 0. i

for (int j = i*k, j < a length, j += k)"共进行?趙插入

int m = j.

while (n x k && a[n] < a[ni.k])"短路表达式

a[n] = (a(n)«a[urk])« (a(n-k]=a[m])."比前-个小’则与之

交换

k=k/2:

4. 3. 2撞序之选择擇序

4.3. 2.1选择排序之直接选择排序

算法思路:简単选择排序(simple selection sort)也是直接选择掉序。是一种较为容易

理解的方 法。对于TH关健字{Kl,K2,“・,Kn},首先从KI.K2.-Kn中选择最小值,假如它是

Kz.则将Kz与K1对 换:然后从K2. K3.….Kii中选择最小值Kz.再将Kz与K2对换。如此进

行选择和调换『2趙. 第(n-1)超,从Kn-KKn中选择最小值Kz将Kz与Kn-1对换,最后剰

下的就是该序列中的最大值, 一个由小到大的有序序列就这样形成。

代码实现:

public class Test public static void maiu(Stnug () args) ( mt aQ= (49.38. 65, 97.

76.13.27}. siaipleSelectSort(a), fbr (ml i = 0. i < a length. I)

System out pruit(a[i] + * . Sy stein out pruitluQ

研发中心技术架构设计规范 2020-2021

public static void simpleSelectSort(int a(])( fbi(int i= 1: i

> afiMax])

i«ax = jf

if(iMax 1= a length-i)

a [iMax] - (a(iMax]*a[a. Iength4]),r(a(a. length-i]=a(iMax)),

4.3. 3择序之交换排序

4.33.1交换排序之冒泡排序

算法思路:依次比较相邻的两个数.将小数放在前面.大数放在后面。即在第一趟:首先

比较 第1个和第2个数,将小数放前.大数放后。然后比较第2个数和第3个数,将小数放

前,火 数放后,如此継续.直至比较最后两个数,将小数放前,大数放后。至此第一趙结束.

将量大 的数放到了最后。在第二趙:仍从第一对数开始比较(因为可能由于第2个数和第3

个数的交 换,使得第1个数不再小于第2个数),将小数放前,大数放后,一肖比较到倒数

第二个数(倒 数第一的位置上(2经是最大的),第二越结朿,在倒数第二的位置上得到一个

新的最大数(其 实在整个数列中是第二大的敬)。如此下去,重复以上过程,直至最终完成排

序.

在排序过程中总是小数往前放,大数往后放,相当r气泡往上升,所以称作冒泡擡序.

代码实现:

public class Test

public static void main(Stnng [] args)(

mt ao = {49, 38, 65,97,76. 13.27):

bubbleSort(a):

for (nt i = 0; i < a length: i.+)

System, out. print (a[i) ♦")、

System out pniitlnO:

public static void bubbleSort(int a(J)(

研发中心技术架构设计规范 2020-2021

forint i= 1; io. length ii)

fbr(int j = 0. ] v a length - i. j++)

(

i«a|j] >a(j*l])

a. ] = (aU]+a[j+l])-(a[M]2[j]):

4.33.2交换捶序之双向冒泡排序

算法思路:是胃泡排序的升级。双向口泡是-个大泡从头往后口,一个小泡从后往前

胃。相对 FT泡排序可减少时间.

代码实现:

public class Test

public static void nan(Struig 0 aiAs)(

mt a(] = (49.38. 65,97.76. 13. 27).

doubleBubbleSort(a)w

for (int i = 0; i < a length; i++) System, out. print (a[i] + t):

System, out. pnntlnO:

i

public static void doubleBubbleSort(int a[]) ( int n = a length: fbr(int i= 1:i<=

n/2; 1 卄)

fbr(int j = i-L j

if(«[n-l-j]

43.3.3交换排序之快速排序

算法思路:快速排序(Quicksort)是对冒泡排序的一种改进.由CAR Hoare在1962年

提出.它的基 木思想是:通过” 一趙排序”将要排序的数据分割成独立的两部分,其中左部

研发中心技术架构设计规范 2020-2021

分的所有数据 都比右部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快

速排序,整个排序 过程可以递归进行,以此达到整个数据变成,序序列.

算法过程:设要群序的数组是A[0]……A[N. IL門先任意选収一个数据(通常讯二一个数

据)作为 关键数据,然后将所有比它小的数都放到它前而,所有比它大的款都放到它后面,

这个过程称 为一趙快速排序.

一超快速排序的务法是:

1) 设置两个变量I、丄排序开始的时候:1 =O.j=N-l:

2) 以第一个数组元素作为关键数据.赋值给key,即key=A[0]:注意该key值在 整个过程

中永 远不变,始终是和key进行比较.

3) 从j开始由后向前捜索,找到第一个小J-key的值A[j],并与A[i]交换:

4) 从1开始由前向后搜索,找到第一个大丁 key的并与Ao ]交换:

5) 慮复第3、4步,直到i=j:

注意:

3)和4)步是在程序中没找到时候才卜和什+,直至找到为止。找到并交换的时候】和J指

针位 田不变.

值得注意的是,快速排序不是一抻总定的排序幻法.也就是说,多个相同的值的相对位

置也许 会在JZ法站束时产生变动。

一繊快排演示:

key = 49 49i 38 65 97 76 13 27j先找j开始,发现27比key小,交换i、j的值

27138 65 97 76B49j再从i开始,发现27和38都比key小,即计+

27 38 49197 76 13 65j直到i对应的值比key大.则1、J交换

27 38 13197 76 49j 65 以此类推

27 38 13 49i 76 97j 65 27 38 13 49U 76 97 65 代码实现:public class Test public

static void main(Stnng (] args)(

int a[] = {49, 38. 65. 97, 76. 13.27):

研发中心技术架构设计规范 2020-2021

quicksort(a. 0. a. length-1),

for (int i = 0. i < a length, ii)

System, out. print (a(i] +ft *):

System out pnntlnO.

t

public static void quicksort(mt a(L mt iMin? int iMax)(

if (iNlin >= iMax)

return,

else if (iMm * 1 = iMax) “苫只冇两个元素.直接比较

7

if (a[iMin] > a [iMax])

(a[ifa] = (a[iNfin]*a(i«ax]) - (a(iMax]=a[iMin]):

)

retuni.

i

int iPos = partition (a, iXfn, iMax)、 quicksort (a. iNlin. iPos -1): //left quicksort

(a: iPos +

iMax): / right

public static int pai»tition(mt a[]9 mt i. int))(

int iKey= a[i]t *选取 key do

”由后向前找到第一个比nKey小的元素,并与Mi]交换while (a[j] x iKey && i

r:

研发中心技术架构设计规范 2020-2021

a 国-(a[]

“由前向后找到第一个比nKey大的元素,并与a[j]交换while (a(i] <= iKey 44 i < j)

If if(KJ)

a[i] = (*)"(a(j]=a[i]),} while (i

本文标签: 方法调用对象接口数据