基于JavaMail的邮件客户端程序的设计和实现
- 格式:pdf
- 大小:368.05 KB
- 文档页数:3
SpringBoot整合JavaMail通过阿⾥云企业邮箱发送邮件的实现JavaMail是Java开发中邮件处理的开源类库,⽀持常⽤协议如:SMTP、POP3、IMAP⼀、SpringBoot整合1、需要在pom⽂件中添加依赖spring-boot-starter-mail<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>构建项⽬,加载相关jar包2、在application.yml中配置邮件发送的相关信息spring:mail:host: #阿⾥云发送服务器地址port: 25 #端⼝号username: XXX@ #发送⼈地址password: ENC(Grg2n2TYzgJv9zpwufsf37ndTe+M1cYk) #密码3、编写邮件发送⼯具类MailUtilMailUtil.java/*** @author chenzan* @version V1.0* @description 邮件发送*/@Componentpublic class MailUtil {@AutowiredJavaMailSendermailSender;@AutowiredMailPropertiesmailProperties;/*** 发送邮件测试⽅法*/public void sendMail(MailBean mailBean) {SimpleMailMessage mimeMessage =new SimpleMailMessage();mimeMessage.setFrom(mailProperties.getUsername());mimeMessage.setTo(mailBean.getToAccount());mimeMessage.setSubject(mailBean.getSubject());mimeMessage.setText(mailBean.getContent());mailSender.send(mimeMessage);}/*** 发送邮件-附件邮件* @param boMailBean*/public boolean sendMailAttachment(MailBean mailBean) {try {MimeMessage mimeMessage =mailSender.createMimeMessage();MimeMessageHelper helper =new MimeMessageHelper(mimeMessage, true);helper.setFrom(mailProperties.getUsername());helper.setTo(boMailBean.getToAccount());helper.setSubject(mailBean.getSubject());helper.setText(mailBean.getContent(), true);// 增加附件名称和附件helper.addAttachment(MimeUtility.encodeWord(boMailBean.getAttachmentFileName(), "utf-8", "B"), mailBean.getAttachmentFile());mailSender.send(mimeMessage);return true;}catch (MessagingException e) {e.printStackTrace();return false;}}MailBean.java/*** @author chenzan* @version V1.0*/@Datapublic class MailBean {private Stringsubject;private String content;private String toAccount;private File attachmentFile;private String attachmentFileName;}4.发送String email = "XXX@";String content="测试内容";String subject = "测试主题";MailBean mailBean =new MailBean ();mailBean .setToAccount(email);boMailBean.setSubject(subject );boMailBean.setContent(content);boolean resultSend =mailUtil.sendMailAttachment(boMailBean);⼆、查看阿⾥云邮箱设置⽀持SMTP/POP3/IMAP功能,轻松通过客户端软件(outlook、foxmail等)收发邮件。
摘要Android是Google公司发布的智能手机平台,该平台具有开放、应用程序平等、应用程序间无界限和方便快速的应用程序开发等优点,成为当今最流行的手机开发平台之一,是当今软件行业的一股重要力量。
本文是利用JavaMail在Android平台上开发邮件客户端,介绍了Android相关知识,JavaMail的使用,最后分析了Android邮件客户端的基本功能和实现模块,并对其中用到的关键方法进行了详细的描述。
在开发过程中,运用了开发工具Android Studio和Android SDK。
设计了邮件收发的客户端。
系统主要分为五个模块:登陆、发邮件、收邮件、配置和通讯录。
该系统为用户利用手机Email进行通讯提供了便利。
关键词: Android Android Studio Java Mail12目录第一章绪论 (1)1.1研究内容 (1)1.2研究意义 (1)1.3研究现状和发展趋势 (1)1.4开发环境 (1)1.4.1 Android开发环境介绍 (1)1.4.2 Android开发平台搭建 (2)第二章Android的相关技术介绍及分析 (3)2.1 Android系统架构研究 (3)2.2 Android架构分析 (4)2.2.1应用程序框架 (4)2.2.2类库 (5)2.2.3 Android运行时组件 (6)2.3 Android应用的构成和工作机制 (6)第三章JavaMail API研究 (7)3.1 JavaMail API简介 (7)3.2相关协议一览 (7)3.3 JavaMail安装 (8)3.4 JavaMail API详解 (8)第四章软件架构及系统用例图 (13)4.1系统结构 (13)4.2系统总体用例 (13)4.3程序功能框图 (14)第五章程序开发 (15)5.1文件结构与用途 (15)5.2程序主要代码 (17)5.3系统测试 (26)第6章结论 (33)致谢 (35)参考文献 (37)1绪论第一章绪论1.1研究内容本论文目的在于利用java语言在Android平台下的邮件客户端,让用户可以方便的管理邮件服务器上的自己的邮件,方便地发送邮件。
1.邮件1.1 邮件组成部分如果是新邮件就获取,并解析它;邮件是由邮件头和邮件体组成,在邮件头中主要包含了收件人、发件人、主题等等基础信息。
而邮件体中就包括了邮件的正文和附件等内容信息。
下图就是pop3协议下,邮件的大致内容。
1.2 发送邮件(带附件、正文带图片)QQ邮箱为例:需要QQ账号和QQ登录第三方客户端时,密码框的“授权码”(相当于密码)授权码如下获取:代码如下:public class JavaMailboxAttachment {private MimeMessage message;private Session session;private String mailHost = "";private String mailAuth = "";private String mailPort = "";private String sender_username = "";private String sender_password = "";//定义一个Properties 用于存放信息private Properties properties = new Properties();//-------------------------------发信箱---------------------------------------------public JavaMailboxAttachment(String email_type) {try {properties.put("mail.smtp.host",""); //发送邮件服务器//端口号,QQ邮箱给出了两个端口,但是另一个我一直使用不了,所以就给出这一个587properties.put("mail.smtp.port", "587"); //发送邮件端口号properties.put("mail.smtp.auth", "true");// 此处填写你的账号properties.put("er", "xxxxxxxxx@");// 此处的密码就是前面说的16位STMP授权码properties.put("mail.password", "xxxxxxxxxxxxxxxx");this.mailHost = properties.getProperty("mail.smtp.host");this.mailAuth = properties.getProperty("mail.smtp.auth");this.mailPort = properties.getProperty("mail.smtp.port");this.sender_username = properties.getProperty("er");this.sender_password = properties.getProperty("mail.password");} catch (Exception e) {e.printStackTrace();}// 构建授权信息,用于进行SMTP进行身份验证Authenticator authenticator = new Authenticator() {protected PasswordAuthentication getPasswordAuthentication() {// 用户名、密码String userName = properties.getProperty("er");String password = properties.getProperty("mail.password");return new PasswordAuthentication(userName, password);}};session = Session.getInstance(properties,authenticator); //用户验证message = new MimeMessage(session); //将验证成功的session信息,创建一个message 对象。
JavaWeb(⼗三)使⽤javamail进⾏发送邮件,(使⽤QQ,163,新浪邮箱服务器) 加油加油。
--WZY⼀、发送邮件的原理 在了解其原理之前,先要知道两个协议,SMTP和POP3 SMTP:Simple Mail Transfer Protocol,即简单邮件传输协议,发送邮件的协议,默认端⼝,25 POP3:Post Office Protocol 3,即邮局协议,接收邮件的协议,默认端⼝,110 知道了这两个协议,下⾯来说说邮件发送和接收的原理图,分两种,相同邮件(QQ邮箱给QQ邮箱)和不同邮件(QQ邮箱给163邮箱)是不⼀样的。
解释: 为了⽅便起见,将新浪邮箱,list@称为⽤户A,将搜狐邮箱,wangwu@ 称为⽤户B ⽤户A(新浪邮箱,list@)给⽤户B(搜狐邮箱,wangwu@)发送⼀封邮件,那么整个过程就为图中的实线部分,⽤户A通过OutLook(浏览器或者客户端)登录⾃⼰的邮箱帐号,编写邮件,使⽤Smtp协议发送给Sina的邮件服务器中的Smtp服务器(专门⽤来发送的服务器),然后在通过SMTP协议,传输给Sohu的邮件服务器中的Smtp服务器,然后通过Sohu的Smtp服务器将邮件发送给⽤户B的存储设备进⾏存储(每个⽤户都会有⼀个存储空间⽤来存储邮件的),到这⾥,⽤户A就相当于发送成功了,因为已经到达了⽬的地,如果B⽤户需要查看邮件内容,必须通过POP3服务器将从⾃⼰的存储设备中拿到,然后返回到浏览器或者客户端中显⽰。
⽤户B给⽤户A发送⼀封邮件,那么整个过程就为图中的虚线部分,是和A给B发⼀样的步骤 ⽤户A给⼀个同样使⽤新浪邮箱的⽤户C发送⼀封邮件,那么其过程就简单的多了,先通过Smtp服务器,然后smtp服务器会将其发送到⽤户C的存储设备上,A发送邮件就成功了,⽤户C要显⽰⾃⼰邮箱中的邮件,那么就通过POP3服务器从⾃⼰存储设备中拿取所有邮件进⾏查看。
⼆、通过Java代码实现发送邮件 2.1、准备jar包 核⼼:mail.jar 依赖:activation.jar,邮件需要发送附件时使⽤ 2.2、使⽤163邮箱发送邮件 2.2.1、⾸先在163邮箱中注册⼀个帐号。
摘要随着互联网的快速发展,网络聊天工具已经作为一种重要的信息交流工具,受到越来越多的网民的青睐.目前,出现了很多非常不错的聊天工具,其中应用比较广泛的有Netmeeting、腾讯QQ、MSN-Messager等等。
该系统开发主要包括一个网络聊天服务器程序和一个网络聊天客户程序两个方面。
前者通过Socket套接字建立服务器,服务器能读取、转发客户端发来信息,并能刷新用户列表。
后者通过与服务器建立连接,来进行客户端与客户端的信息交流。
其中用到了局域网通信机制的原理,通过直接继承Thread类来建立多线程。
开发中利用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端模式(Client/Server模式)、网络编程的设计方法等。
在网络编程中对信息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息流的分析,包含了一些基本的软件工程的方法。
经过分析这些情况,该局域网聊天工具采用Eclipse为基本开发环境和java 语言进行编写,首先可在短时间内建立系统应用原型,然后,对初始原型系统进行不断修正和改进,直到形成可行系统关键词:局域网聊天 socket javaAbstractAlong with the fast development of Internet,the network chating tool has already become one kind of important communication tools and received more and more web cams favor. At present, many extremely good chating tools have appeared . for example,Netmeeting, QQ,MSN—Messager and so on. This system development mainly includes two aspects of the server procedure of the network chat and the customer procedure of the network chat。
Java实现发送邮件,图⽚,附件1、JavaMail 介绍JavaMail 是sun公司(现以被甲⾻⽂收购)为⽅便Java开发⼈员在应⽤程序中实现邮件发送和接收功能⽽提供的⼀套标准开发包,它⽀持⼀些常⽤的邮件协议,如前⾯所讲的SMTP,POP3,IMAP,还有MIME等。
我们在使⽤JavaMail API 编写邮件时,⽆须考虑邮件的底层实现细节,只要调⽤JavaMail 开发包中相应的API类就可以了。
JavaMail 下载地址:2、JavaMail APIJavaMail API 按照功能可以划分为如下三⼤类:①、创建和解析邮件的API②、发送邮件的API③、接收邮件的API以上三种类型的API在JavaMail 中由多个类组成,但是主要有四个核⼼类,我们在编写程序时,记住这四个核⼼类,就很容易编写出Java邮件处理程序。
Message 类:javax.mail.Message 类是创建和解析邮件的核⼼ API,这是⼀个抽象类,通常使⽤它的⼦类javax.mail.internet.MimeMessage 类。
它的实例对象表⽰⼀份电⼦邮件。
客户端程序发送邮件时,⾸先使⽤创建邮件的 JavaMail API 创建出封装了邮件数据的 Message 对象,然后把这个对象传递给邮件发送API(Transport 类)发送。
客户端程序接收邮件时,邮件接收API把接收到的邮件数据封装在Message 类的实例中,客户端程序在使⽤邮件解析API从这个对象中解析收到的邮件数据。
Transport 类:javax.mail.Transport 类是发送邮件的核⼼API 类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如 SMTP 协议,客户端程序创建好Message 对象后,只需要使⽤邮件发送API 得到 Transport 对象,然后把 Message 对象传递给 Transport 对象,并调⽤它的发送⽅法,就可以把邮件发送给指定的 SMTP 服务器。
JavaMail-发送HTML邮件JavaMail - 发送HTML邮件form.htm========<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>邮件例程 - JavaMail - 发送HTML邮件</title></head><body><table border="0" cellspacing="0" cellpadding="0"><form method="post" action="send.jsp"><tr><td>SMTP主机:</td><td><input type="text" name="smtp" size="80"></td></tr><tr><td>发信人:</td><td><input type="text" name="from" size="80"></td></tr><tr><td>收信人:</td><td><input type="text" name="to" size="80"></td></tr><tr><td>抄送人:</td><td><input type="text" name="cc" size="80"></td><tr><td>暗送人:</td><td><input type="text" name="bcc" size="80"></td></tr><tr><td>主题:</td><td><input type="text" name="subject" size="80"></td> </tr><tr><td valign="top">内容:</td><td><textarea name="body" rows="5" cols="80"></textarea></td></tr><tr><td colspan="2" align="center"><input type="submit" value="发送"></td></tr></form></table></body></html>send.jsp========<%--作者:何志强[**************]日期:2000-08-16版本:1.0功能:邮件例程 - JavaMail - 发送HTML邮件--%>//变量声明ng.String smtp,from,to,cc,bcc,subject,body;//获得用户输入数据smtp = request.getParameter("smtp");from = request.getParameter("from");to = request.getParameter("to");cc = request.getParameter("cc");bcc = request.getParameter("bcc");subject = request.getParameter("subject");if(subject!=null){subject = new ng.String(subject.getBytes("iso-8859-1"));}body = request.getParameter("body");//发送邮件pipi.mail.HTML.send(smtp,from,to,cc,bcc,subject,body);%>pipi.jaf.StringDataSource.java==============================/*作者:何志强[**************]日期:2000-08-16功能:字符串型数据源*/package pipi.jaf;public class StringDataSource implements javax.activation.DataSource{private ng.String data;private ng.String type;public StringDataSource(ng.String data,ng.String type){this.data = data;this.type = type;}public java.io.InputStream getInputStream() throws java.io.IOException{return new java.io.StringBufferInputStream(data);}public java.io.OutputStream getOutputStream() throws java.io.IOException{throw new java.io.IOException("it does not support this method now!");}public ng.String getContentType(){return type;}public ng.String getName(){return "pipi";}}pipi.mail.HTML.java===================/*作者:何志强[**************]日期:2000-08-16功能:发送HTML邮件*/package pipi.mail;public final class HTML{public static void send(ng.String smtp, /*SMTP主机地址*/ng.String from, /*发信人*/ng.String to, /*收信人*/ng.String cc, /*抄送人*/ng.String bcc, /*暗送人*/ng.String subject, /*主题*/ng.String body /*内容*/) throws ng.Exception{//变量声明java.util.Properties props; //系统属性javax.mail.Session mailSession; //邮件会话对象javax.mail.internet.MimeMessage mimeMsg; //MIME邮件对象//设置系统属性props = ng.System.getProperties(); //获得系统属性对象props.put("mail.smtp.host",smtp); //设置SMTP主机//获得邮件会话对象mailSession = javax.mail.Session.getDefaultInstance(props,null);//创建MIME邮件对象mimeMsg = new javax.mail.internet.MimeMessage(mailSession);//设置发信人mimeMsg.setFrom(newjavax.mail.internet.InternetAddress(from));//设置收信人if(to!=null){mimeMsg.setRecipients(javax.mail.Message.RecipientType.T O,javax.mail.internet.InternetAddress.parse(to));}//设置抄送人if(cc!=null){mimeMsg.setRecipients(javax.mail.Message.RecipientType.C C,javax.mail.internet.InternetAddress.parse(cc));}//设置暗送人if(bcc!=null){mimeMsg.setRecipients(javax.mail.Message.RecipientType.B CC,javax.mail.internet.InternetAddress.parse(bcc));}//设置邮件主题//mimeMsg.setSubject(subject);mimeMsg.setSubject(subject,"gb2312");//设置邮件内容mimeMsg.setDataHandler(new javax.activation.DataHandler (new pipi.jaf.StringDataSource(body,"text/html")));//发送邮件javax.mail.Transport.send(mimeMsg);}}本套程序使用到JavaMail和JAVABEANS(TM) ACTIVATION FRAMEWORK(JAF):JavaMail/products/javamail/JAVABEANS(TM) ACTIVATION FRAMEWORK(JAF)/products/javabeans/glasgow/jaf.htmlJavaMail - 发送HTML邮件form.htm========<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>邮件例程 - JavaMail - 发送HTML邮件</title></head><body><table border="0" cellspacing="0" cellpadding="0"><form method="post" action="send.jsp"><tr><td>SMTP主机:</td><td><input type="text" name="smtp" size="80"></td></tr><tr><td>发信人:</td><td><input type="text" name="from" size="80"></td></tr><tr><td>收信人:</td><td><input type="text" name="to" size="80"></td></tr><tr><td>抄送人:</td><td><input type="text" name="cc" size="80"></td><tr><td>暗送人:</td><td><input type="text" name="bcc" size="80"></td></tr><tr><td>主题:</td><td><input type="text" name="subject" size="80"></td> </tr><tr><td valign="top">内容:</td><td><textarea name="body" rows="5" cols="80"></textarea></td></tr><tr><td colspan="2" align="center"><input type="submit" value="发送"></td></tr></form></table></body></html>send.jsp========<%--作者:何志强[**************]日期:2000-08-16版本:1.0功能:邮件例程 - JavaMail - 发送HTML邮件--%>//变量声明ng.String smtp,from,to,cc,bcc,subject,body;//获得用户输入数据smtp = request.getParameter("smtp");from = request.getParameter("from");to = request.getParameter("to");cc = request.getParameter("cc");bcc = request.getParameter("bcc");subject = request.getParameter("subject");if(subject!=null){subject = new ng.String(subject.getBytes("iso-8859-1"));}body = request.getParameter("body");//发送邮件pipi.mail.HTML.send(smtp,from,to,cc,bcc,subject,body);%>pipi.jaf.StringDataSource.java==============================/*作者:何志强[**************]日期:2000-08-16功能:字符串型数据源*/package pipi.jaf;public class StringDataSource implements javax.activation.DataSource{private ng.String data;private ng.String type;public StringDataSource(ng.String data,ng.String type){this.data = data;this.type = type;}public java.io.InputStream getInputStream() throws java.io.IOException{return new java.io.StringBufferInputStream(data);}public java.io.OutputStream getOutputStream() throws java.io.IOException{throw new java.io.IOException("it does not support this method now!");}public ng.String getContentType(){return type;}public ng.String getName(){return "pipi";}}pipi.mail.HTML.java===================/*作者:何志强[**************]日期:2000-08-16功能:发送HTML邮件*/package pipi.mail;public final class HTML{public static void send(ng.String smtp, /*SMTP主机地址*/ng.String from, /*发信人*/ng.String to, /*收信人*/ng.String cc, /*抄送人*/ng.String bcc, /*暗送人*/ng.String subject, /*主题*/ng.String body /*内容*/) throws ng.Exception{//变量声明java.util.Properties props; //系统属性javax.mail.Session mailSession; //邮件会话对象javax.mail.internet.MimeMessage mimeMsg; //MIME邮件对象//设置系统属性props = ng.System.getProperties(); //获得系统属性对象props.put("mail.smtp.host",smtp); //设置SMTP主机//获得邮件会话对象mailSession = javax.mail.Session.getDefaultInstance(props,null);//创建MIME邮件对象mimeMsg = new javax.mail.internet.MimeMessage(mailSession);//设置发信人mimeMsg.setFrom(newjavax.mail.internet.InternetAddress(from));//设置收信人if(to!=null){mimeMsg.setRecipients(javax.mail.Message.RecipientType.T O,javax.mail.internet.InternetAddress.parse(to));}//设置抄送人if(cc!=null){mimeMsg.setRecipients(javax.mail.Message.RecipientType.C C,javax.mail.internet.InternetAddress.parse(cc));}//设置暗送人if(bcc!=null){mimeMsg.setRecipients(javax.mail.Message.RecipientType.B CC,javax.mail.internet.InternetAddress.parse(bcc));}//设置邮件主题//mimeMsg.setSubject(subject);mimeMsg.setSubject(subject,"gb2312");//设置邮件内容mimeMsg.setDataHandler(new javax.activation.DataHandler (new pipi.jaf.StringDataSource(body,"text/html")));//发送邮件javax.mail.Transport.send(mimeMsg);}}本套程序使用到JavaMail和JAVABEANS(TM) ACTIVATION FRAMEWORK(JAF):JavaMail/products/javamail/JAVABEANS(TM) ACTIVATION FRAMEWORK(JAF)/products/javabeans/glasgow/jaf.html。
基于Javamail的邮件收发系统使用说明书基于Javamail的邮件收发系统是一款简单、方便、快捷的邮件系统。
它能实现邮件的接收与发送,并能完成附件的传输,具有较好的人机交互性,易于使用。
开发环境:JDK1.6 + Windows平台开发技术:Javamail开发工具:Eclipse3.4运行环境:PC上需安装JDK1.6,且正确配置环境变量。
系统基本功能如下:(1) 收取并显示POP3邮件服务器上指定邮箱的邮件;(2) 使用SMTP邮件服务器发送邮件;(3) 邮件附件的发送与接受;(4) 删除邮件;具体操作步骤如下:1、打开javamailsystem文件夹,找到javamail.jar可执行文件,双击该执行文件,即可打开Javamail邮件收发系统客户端软件。
进入该系统后,首先选择“POP3/SMTP设置”按钮,对收发邮件所需的邮件服务器主机、收发邮件账号及密码信息进行设置。
图1-1邮件客户端主界面设置举例如下:POP3属性POP3服务器:(或或)Email地址:shinning191@(ceshi2009ok@、qiufeng006@)账户名:shinning191(ceshi2009ok、qiufeng006)密码:6857191(123456、28912786)SMTP属性SMTP服务器:(或或)Email地址:shinning191@(ceshi2009ok@\qiufeng006@)账户名:shinning191(ceshi2009ok、qiufeng006)密码:6857191(123456、28912786)在对SMTP/POP3进行设置的时候,由于系统的缺陷,需要先对POP3进行属性设置,然后确定关闭该对话框;重新打开属性设置对话框,对SMTP进行属性设置,确定。
这样便可以正确设置完邮件服务器的属性。
此系统对上述设置的信息具有存储功能,在这里,我们采用属性文件的形式存储SMT P 和POP3邮件服务器属性设置。
信息科学与工程学院09 届本科生毕业设计(论文)任务书学院信息科学与工程学院专业计算机科学与技术(师范)班级学号学生姓名指导教师一、论文题目基于Javamail的邮件收发系统二、内容和要求1.总体目标及性能(参数)要求(1)系统功能基本完善。
(2)系统具有良好的用户界面。
(3)系统具有较好的人机交互性、易于使用。
(4)系统可靠、稳定,具有一定的应用价值。
2.研究内容及拟采用的技术路线●研究内容:(1)邮件服务器的工作原理。
(2)DNS服务器的工作原理。
(3)SMTP、POP3、MIME协议。
(4)设计并实现基于Javamail的邮件收发系统,要求系统具有邮件接收、发送等基本功能。
●采用的技术路线:(1)开发工具采用Java+JavaMail API。
(2)数据库采用MySQL或SQL Server。
3.参考文献(10篇以上)[1] Java邮件开发详解。
张孝祥。
电子工业出版社,2007。
[2] Java高级程序设计。
王路群主编。
中国水利水电出版社, 2006 。
[3] Java课程设计。
黄明, 梁旭, 周绍斌编著。
电子工业出版社, 2006。
[4] Java开发与应用教程。
王吴迪, 赵枫朝等编著。
电子工业出版社, 2006。
[5] Java程序设计大学教程。
刘艺等编著。
机械工业出版社, 2006。
[6] Java数据库高级编程宝典。
陈天河编著。
电子工业出版社, 2005。
[7] Java程序设计与应用开发。
於东军等编著。
清华大学出版社, 2005。
[8] Java语言程序设计实训。
赵海廷主编。
武汉大学出版社, 2005。
[9] Java program design。
Cohoon, James P.,Davidson, Jack W。
McGraw-Hill Higher Education, 2004。
[10] Thinking in Java。
Eckel, Bruce。
Prentice Hall, c2000。