JavaMail API详解:电子消息发送与接收技巧
创始人
2024-12-26 03:38:24
0 次浏览
0 评论
帮忙介绍一本电子书,里面有比较详细的JavaMaiL的解说
看来目前还真没有。我也在网上寻找一篇文章:JavaMailAPI,详细解释,编写和发送电子邮件。
我们可以用它来创建电子邮件用户代理(MailUserAgent,简称MUA),例如Eudora、Foxmail和MSOutlookExpress。
我们来看看JavaMailAPI是如何提供信息访问功能的!JavaMailAPI用于发送和接收电子消息,无论协议如何。
本文的重点是独立于协议的电子消息的发送和接收。
这也可以在本文中自由转载和转载。
请务必以超链接的形式提供文章的原始出处和作者信息以及本声明。
作者:cleverpig(作者博客:http://blog.matrix.org.cn/page/cleverpig)原文:http://www.matrix.org.cn/resource/article/44/44101_JavaMail.html关键词:Java、Mail、Pop、SMTP1.JavaMailAPI简介JavaMailAPI是读取、撰写和发送电子消息的可选包。
我们可以用它来创建电子邮件用户代理(MailUserAgent,简称MUA),例如Eudora、Foxmail和MSOutlookExpress。
而不是像sendmail或其他邮件传输代理(MTA)程序那样送、传递和转发电子邮件。
从另一个角度来看,我们电子邮件用户每天都会使用MUA程序来读写电子邮件,而MUA则依赖于MTA来进行电子邮件传送。
了解了MUA和MTA的关系之后,我们就来看看JavaMailAPI是如何提供信息访问功能的!JavaMailAPI用于发送和接收电子消息,无论协议如何。
该API分为两部分:基本功能:无论协议如何,如何发送和接收电子消息?正如我们将在下面看到的,这只是一厢情愿的想法。
第二部分基于具体协议,如SMTP、POP、IMAP和NNTP协议。
这部分的JavaMailAPI用于与服务器进行通信,不包含在本文的内容中。
2.相关协议列表在进入JavaMailAPI之前,我们先来了解一下该API涉及到的协议。
下面是大家都知道并且每天喜欢使用的四种主要信息传输协议:SMTPPOPIMAPMIME当然,以上四种协议还不是全部。
还有NNTP等协议可以用来传输信息,但由于不常用,本文不提及。
了解这四个基本协议将有助于我们更好地使用JavaMailAPI。
然而,JavaMailAPI被设计为独立于协议,目前我们无法克服这些协议的限制。
准确地说,如果我们选择的协议不支持我们使用的功能,JavaMailAPI就无法神奇地为我们提供此功能。
1.SMTP简单邮件传输协议定义了电子邮件传送机制。
下面我们使用一个基于Java邮件的程序来与公司的SMTP服务器或ISP进行通信。
此SMTP服务器将电子邮件转发到收件人的SMTP服务器,直到它最终通过POP或IMAP协议到达收件人。
这并不要求SMTP服务器支持授权电子邮件转发,但确实需要注意正确的SMTP服务器设置(SMTP服务器设置与JavaMailAPI无关)。
2.POPPOP是一种邮局协议,目前为版本3,称为POP3。
POP定义了用户如何接收电子邮件的机制。
它规定每个用户使用一个单独的邮箱。
并非大多数人在使用POP时熟悉的所有功能(例如检查收件箱中的新邮件数量)都受支持。
该功能内置于MicrosoftOutlook中,这意味着MicrosoftOutlook等电子邮件客户端软件通过查询最近收到的电子邮件来计算新电子邮件的数量来实现上述功能。
因此,在使用JavaMailAPI时,我们需要注意是否需要接收上面提到的新邮件数量等信息。
3.IMAPIMAP使用先进的协议来接收信息。
当前版本是版本4,因此也称为IMAP4。
需要注意的是,使用IMAP时,邮件服务器必须支持该协议。
从这一点来看,我们不能完全用IMAP来替代POP。
如果邮件服务器支持IMAP,我们的邮件程序就可以使用IMAP支持的以下功能:每个用户可以在服务器上拥有多个目录,并且这些目录可以被多个用户共享。
它相对于POP的优点是显而易见的,但是当我们尝试引入IMAP时,我们发现它并不完美:因为IMAP需要从其他服务器接收新的信息,将这些信息传递给用户,并管理每个用户的多个目录,加载什么对于邮件服务器来说非常重要。
而且IMAP和POP的一个区别是,在接收邮件时,POP用户从邮件服务器下载邮件,而IMAP则允许用户直接访问邮件目录,所以当邮件服务器进行备份操作时,就像任何长的邮件一样-term使用案例是邮件系统许多用户使用的邮件目录占用了大量的空间,这直接导致邮件服务器上的存储空间暴涨。
4、MIMEMIME不是传输电子邮件的协议,而是定义了电子邮件内容的格式:消息格式、附件格式等。
一些RFC标准包括MIME:RFC822、RFC2045、RFC2046、RFC2047。
有兴趣的Matrixers可以阅读一下。
作为JavaMailAPI的开发者,我们不需要担心这些格式定义,但是这些格式是在程序中使用的。
5.NNTP和其他第三方协议因为JavaMailAPI在设计时就考虑到了第三方协议实现提供者的分离,所以我们可以很容易地添加一些第三方协议。
SUN维护了一个第三方协议实现提供者的列表:http://java.sun.com/products/javamail/Third_Party.html通过这个列表我们可以找到SUN协议不支持的第三方提供者:例如,NNTP(新闻组协议)和S/MIME(安全MIME协议)。
3.安装1.安装JavaMail。
要使用JavaMailAPI,您需要从http://java.sun.com/products/javamail/downloads/index.html下载文件名格式为javamail-[version].zip的文件(此文件包含(JavaMail实现)并将mail.jar文件添加到CLASSPATH该实现提供了对SMTP、IMAP4和POP3的支持注意:安装JavaMail实现后,我们可以在demo目录中找到很多有趣的简单示例程序安装JavaMail后,我们还需要安装JavaBeansActivationFramework,因为JavaMailAPI需要此框架。
使用J2EE,我们不需要单独下载JavaMail,因为它存在于J2EE.jar中。
我们需要做的就是将J2EE.jar添加到CLASSPATH中。
2.安装JavaBeansActivationFramework。
从http://java.sun.com/products/javabeans/glasgow/jaf.html下载JavaBeansActivationFramework并将其添加到CLASSPATH中。
该框架添加了分类和处理任意数据块的功能。
JavaMailAPI需要这些函数。
虽然这个功能听起来很模糊,但它只为我们的JavaMailAPI提供基本的MIME类型支持。
此时,我们应该已将mail.jar和activate.jar添加到CLASSPATH中。
当然,为了方便,你也可以直接将这两个jar文件复制到JRE目录的lib/ext目录下。
4.首先介绍JavaMailAPI1。
了解我们的JavaMail环境A.JavaMail核心类结构概述。
打开JavaMail.jar文件。
我们会注意到javax.mail包包含一些核心类:会话、消息、地址、验证器、传输、存和文件夹。
并且javax.mail.internet包中有一些常用的子类。
B.SessionSession类定义基本电子邮件会话。
就像HTTP会话一样,我们发送和接收电子邮件时的工作都是基于这个会话的。
Session对象使用java.util.Properties对象来获取邮件服务器、用户名、密码信息以及整个应用程序使用的常用信息。
Session类的构造函数是私有的,因此我们可以使用Session类提供的静态工厂方法getDefaultInstance()来获取一个默认的Session对象:Propertiesprops=newProperties();//fillpropswithanyinformationSessionsession=Session.getDefaultInstance(props,null);或者使用静态函数getInstance()方法获取自定义会话:Propertiesprops=newProperties();//fillpropswithanyinformationSessionsession=Session.getInstance(props,null);从上面两个例子不难发现,第二个方法getDefaultInstance()和getInstance()的参数都是null。
这是因为上面的示例没有使用电子邮件授权。
在许多示例中,即使在多个用户邮箱中工作,访问邮件服务器时使用共享会话就足够了。
C.消息:我们创建了会话对象之后,就可以创建消息体来发送了。
这里SUN提供了消息类型来帮助开发人员完成这项工作。
由于Message是一个抽象类,所以大多数情况下我们使用子类javax.mail.internet.MimeMessage,它是使用MIME类型和MIME头的邮箱信息。
信息头只能使用US-ASCII字符,非ASCII字符通过编码转换为ASCII来使用。
要创建MimeMessage对象,们需要将Session对象作为MimeMessage构造函数的参数传递:MimeMessagemessage=newMimeMessage(session);注意:MimeMessage类有多个构造函数,例如将输入流作为参数的构造函数。
。
创建MimeMessage对象后,我们需要设置它的各个部分。
对于MimeMessage类,这些部分是MimePart接口。
设置消息内容的最简单方法是调用setContent()方法,参数代表消息内容和mime类型:message.setContent("Hello","text/plain");然而,如果MimeMessage中的信息我们使用的内容如果是文本,我们可以直接使用setText()方法来方便的设置文本内容。
message.setText("你好");上述两种方法中,后者更适合文本信息。
对于其他类型的信息,例如HTML信息,应使用前者。
不要忘记使用setSubject()方法来设置电子邮件的电子邮件主题:message.setSubject("First");D.地址此时我们已经设置了会话和消息。
这里我们介绍如何使用电子邮件地址类:Address。
与Message一样,Address类是一个抽象类,因此我们使用子类javax.mail.internet.InternetAddress。
通过传递代表电子邮件地址的字符串,我们可以创建一个电子邮件地址类:Addressaddress=newInternetAddress("[email protected]");如果要在电子邮件地址后添加名称,可以传递两个参数:表示电子邮件地址和名称字符串,以创建包含电子邮件地址和名称的电子邮件地址类:Addressaddress=newInternetAddress("[email protected]",“乔治布什”);此处讨论的电子邮件地址类用于为电子邮件的发件人和收件人设置“Prepared”。
设置完电子邮件地址类后,我们通过消息的setFrom()和setReplyTo()方法设置电子邮件的发件人:message.setFrom(address);埃斯);如果邮件包含多个发件人地址,我们可以使用addForm()方法添加发件人:Addressaddress[]=...;message.addFrom(address);addRecipient()方法添加收件人,该方法需要使用Message.RecipientType的常量来区分收件人类型:message.addRecipient(type,address)Message.RecipientType的以下三个常量分别是:Message.RecipientType.TOMessage.RecipientType.CCMessage.RecipientType.BCC因此,如果我们想向总统发送电子邮件并将副本发送给第一夫人,则如下使用方法:AddresstoAddress=newInternetAddress("[email protected]");AddressccAddress=newInternetAddress("[email protected]");message.addRecipient(Message.RecipientType.TO,toAddress);message.addRecipient(Message.RecipientType.CC,ccAddress);JavaMailAPI不提供检查电子邮件地址有效性的机制。
当然,我们可以自己执行这个功能:检查电子邮件地址的字符是否按照RFC822规定的格式书写或者通过DNS服务器上的MX记录验证等。
E.Authenticator就像java.net类。
JavaMailAPI使用Authorizer(Authenticator)类以用户名和密码的形式访问受保护的资源。
这个JavaMail授权类(Authenticator)位于javax.mail包中。
如果我们使用Authenticator抽象类,则必须继承该抽象类,并且继承的类必须有一个getPasswordAuthentication()方法,该方法返回一个PasswordAuthentication对象(用于存储用于身份验证的用户名和密码)。
并且需要在会话中注册,以便会话知道在身份验证中使用哪个类。
下面的代码片段中的MyAuthenticator是Authenticator的子类。
Propertiesprops=newProperties();//fillpropswithanyinformationAuthenticatorauth=newMyAuthenticator();Sessionsession=Session.getDefaultInstance(props,auth);F.传输发送信息时使用传输类别。
该类实现了消息发送协议(俗称SMTP)。
这堂课是一个抽象类。
我们可以使用该类的静态send()方法来发送消息:Transport.send(message);是多种多样的。
我们还可以从会话中获取对应协议对应的传输实例。
通过传递用户名、密码、邮件服务器主机名等参数连接到邮件服务器,使用sendMessage()方法发送信息,最后关闭连接:message.saveChanges();//implicitwithsend()Transporttransport=session.getTransport("smtp");transport.connect(host,username,password);transport.sendMessage(message,message.getAllRecipients());transport.close();注释:上面的方法是一个很好的方法,特别是如果在服务器上发送多封电子邮件时,我们位于同一封电子邮件中。
因为此时我们连接邮件服务器后继续发送邮件然后关闭连接。
send()的基本方法是每次调用时连接到邮件服务器。
这是在同一邮件服务器上发送多封电子邮件的低效方法。
注意:如果需要在发送电子邮件时监控邮件命令,可以在发送前设置调试志:session.setDebug(true)。
G.Store和Folder与接收和发送电子邮件非常相似,都是使用会话。
但是,获取到Session后,我们需要从Session中获取特定的商店类型,然后连接到该商店。
这里的存储代表存储电子邮件的邮件服务器。
连接到商店时,您很可能需要使用用户名、密码或身份验证器。
//storestore=session.getStore("imap");storestore=session.getStore("pop3");store.connect(host,username,password);连接到store后,得到一个文件夹对象,即目录创建的对象会经过存储。
getFolder()方法返回,我们可以从此文件夹中读取电子邮件信息:Folderfolder=store.getFolder("INBOX");folder.open(Folder.READ_ONLY);Messagemessage[]=folder.getMessages();从Store中获取INBOX文件夹(只有名为INBOX的文件夹对POP3协议有效)然后Open以只读模式(Folder.READ_ONLY)打开文件夹,最后调用文件夹的getMessages()方法获取目录中所有消息的数组。
注意:对于POP3协议,只有一个名为INBOX的文件夹有效,而对于IMAP协议,我们可以访问多个文件夹(还记得前面提到的IMAP协议)。
另外,SUN在设计Folder的getMessages()方法时采取了非常聪明的做法:首先接收新的邮件列表,然后在必要时从邮件服务器读取电子邮件内容(例如读取电子邮件内容)。
在阅读电子邮件时,我们可以使用Message类的getContent()方法来接收电子邮件,或者使用writeTo()方法来保存电子邮件。
getContent()方法仅接收电子邮件内容(没有电子邮件标头),而writeTo()方法包含邮件标头。
System.out.println(((MimeMessage)消息).getContent());阅读邮件内容后,不要忘记关闭文件夹和存储。
folder.close(aBoolean);store.close();传递给Folder.close()方法的Boolean类型参数指示删除操作电子邮件后是否应更新文件夹。
H.坚持下去!在解释完上面七个定义并理解JavaMail核心类的简单代码片段后,下面我们将详细讲解如何使用这些类来实现JavaMailAPI所需的高级功能。
5.使用JavaMailAPI在阐明JavaMailAPI的核心部分如何工作之后,我将向您展示一些使用JavaMailAPI的任务示例。
1.发送电子邮件,收到会话后,创建并填写电子邮件信息,然后发送到邮件服务器。
这是使用JavaMailAPI发送电子邮件的过程。
在发送邮件之前,我们需要设置SMTP服务器:通过设置属性的mail.smtp.host属性。
Stringhost=...;Stringfrom=...;Stringto=...;//获取systempropertiesPropertiesprops=System.getProperties();//Setupmailserverprops.put("mail.smtp.host",host);//获取sessionSessionsession=Session.getDefaultInstance(props,null);//定义messageMimeMessagemessage=newMimeMessage(session);message.setFrom(newInternetAddress(from));message.addRecipient(Message.RecipientType.TO,newInternetAddress(to));message.setSubject("HelloJavaMail");message.setText("WelcometoJavaMail");//发送消息传输。
发送(消息);由于创建电子邮件信息和发送电子邮件时可能会抛出异常,因此我们需要将上述代码放在try-catch结构块中。
2.接收邮件为了阅读邮件,我们检索session,连接到邮箱对应的存储,打开对应的文件夹,然后接收想要的邮件。
当然,最后不要忘记关闭连接。
Stringhost=...;Stringusername=...;Stringpassword=...;//创建空属性Propertiesprops=newProperties();//获取SessionSessionsession=Session.getDefaultInstance(props,null);//获取storeStorestore=session.getStore("pop3");store.connect(主机,用户名,密码);//GetfolderFolderfolder=store.getFolder("INBOX");folder.open(Folder.READ_ONLY);//获取directoryMessagemessage[]=folder.getMessages();for(inti=0,n=message.length;i
以下代码片段有效地演示了如何读取电子邮件内容。
查看每封子邮件的发件人和主题后,会出现用户提示,确认用户是否已阅读该电子邮件。
如果输入YES,我们可以使用Message.writeTo方法(java.io.OutputStreamos)将电子邮件内容输出到控制台。
Message.writeTo()的具体用法请参见JavaMailAPI。
BufferedReaderreader=newBufferedReader(newInputStreamReader(System.in));//获取directoryMessagemessage[]=folder.getMessages();for(inti=0,n=message.length;i
Flags类的内部Flag类中预定义了一些标志:Flags.Flag.ANSWEREDFlags.Flag.DELETEDFlags.Flag.DRAFTFlags.Flag.FLAGGEDFlags.Flag.RECENTFlags.Flag.SEENFlags.Flag.USER,但是需要注意使用:标志并不意味着所有邮件服务器都支持该标志变成。
例如,对于电子邮件删除过程,POP协议不支持上述任何一种方法。
因此,通过访问打开的Folder对象的getPermanetFlags()方法来确定支持哪些标志,该方法返回当前支持的Flags类对象。
删除消息时,我们可以设置消息的DELETED标志:message.setFlag(Flags.Flag.DELETED,true);但首先我们需要使用READ_WRITE打开文件夹:Folder.open(Folder.READ_WRITE);如果删除邮件后关闭文件夹,则必须传递“true”作为已删除邮件的删除确认。
Folder.close(true);expunge(),Folder类中另一个删除电子邮件的方法,也可以删除电子邮件,但不支持Sun提供的POP3实现以及其他第三方提供的POP3-支持的实现还是这个方法不支持。
另外,还引入了一种检查特定标志是否被设置的方法:Message.isSet(Flags.Flagflag)方法,其中参数是检查的标志。
4.电子邮件身份验证我们之前学习了如何使用Authenticator类,而不是直接使用用户名和密码两个字符串作为Session.getDefaultInstance()或Session.getInstance()方法的参数。
经过前面的小测试,现在我们对邮件认证有了一个全面的了解。
我们不直接使用邮件服务器主机名、用户名和密码这三个字符串来连接到POP3Store,而是使用一个属性文件来存储邮件服务器主机名信息并在检索会话时传递自定义字符串。
验证器实例://SetuppropertiesPropertiesprops=System.getProperties();props.put("mail.pop3.host",host);//设置验证器,getsessionAuthenticatorauth=newPopupAuthenticator();Sessionsession=Session.getDefaultInstance(props,auth);//获取storeStorestore=session.getStore("pop3");store.connect();PopupAuthenticator类继承了抽象类Authenticator,并重载了Authenticator类的getPasswordAuthentication()方法,返回PasswordAuthentication类对象。
getPasswordAuthentication()方法的param参数是一个由逗号分隔的用户名和密码组成的字符串。
importjavax.mail.*;importjava.util.*;publicclassPopupAuthenticatorextendsAuthenticator{publicPasswordAuthenticationgetPasswordAuthentication(Stringparam){Stringuser名称,密码;StringTokenizerst=newStringTokenizer(param,",");用户名=st.nextToken();密码=st.nextToken();returnnewPasswordAuthentication(用户名,密码);}}5.回复邮件的方法很简单:使用Message类的reply()方法,配置回复邮件的收件人地址和主题(如果没有指定主题,则使用系统默认的“Re:”作为)。
您无需在此处指定任何电子邮件内容。
只需复制发件人或回复新收件人即可。
reply()方法中的Boolean参数指定是回复发送者(参数值为false)还是恢复给所有人(参数值为true)。
另外,发送信件时,必须使用setReplyTo()方法设置回复地址。
MimeMessagereply=(MimeMessage)message.reply(false);reply.setFrom(newInternetAddress("[email protected]"));reply.setText("谢谢");Transport.send(reply);6.转发电子邮件转发电子邮件的过程并不像回复邮件那么简单一封电子邮件。
这将创建一封转发的电子邮件,仅用一种方式是不可能实现的。
每封电子邮件都由几个部分组成,称为电子邮件正文。
MIME电子邮件是MimeBodyPart类对象。
这些电子邮件正文包含在称为多部分的容器中。
MIME类型电子邮件是MimeMultiPart类的对象。
转发电子邮件时,我们创建一个电子邮件正文和一个转发的电子邮件正文,然后将两个电子邮件正文合并为一个多部分。
说明:要将一封电子邮件的内容复制到另一封电子邮件中,只需复制DataHandler。
这是JavaBeansActivationFramework定义的类。
它提供对电子邮件内容操作命令的访问,管理电子邮件内容操作,是各种数据源和数据格式之间的一致接口。
//CreatethemessagetoforwardMessageforward=newMimeMessage(session);//Fillinheaderforward.setSubject("Fwd:"+message.getSubject());forward.setFrom(newInternetAddress(from));forward.addRecipient(Message.RecipientType.TO,newInternetAddress(to));//CreateyournewmessagepartBodyPartmessageBodyPart=newMimeBodyPart();messageBodyPart.setText("Hereyougowiththeoriginalmessage:\n\n");//创建一个多部分来包含各个部分mergeMultipartmultipart=newMimeMultipart();multipart.addBodyPart(messageBodyPart);//为转发的内容创建并填充一个partmessageBodyPart=newMimeBodyPart();messageBodyPart.setDataHandler(message.getDataHandler());//Addparttomultipartmultipart.addBodyPart(messageBodyPart);//关联multi-part与messageforward.setContent(multipart);//发送messageTran

河北软件职业技术学院王牌专业排名一览表
河北软件职业学院的主导专业有软件技术、动画制作技术、电气自动化技术、电子商务等,以下是详细列表,供您参考。如有变动,以学校最新公告为准。
将会占上风。
河北软件职业技术学院主导专业一览表。
《高等职业教育创新发展行动计划(2015-2018年)》确定重点专业:软件技术、动漫制作技术、电气自动化技术、国家高等电子商务学院。
高职院校教学改革试点。
专业:“软件技术”。
中央财政支持高职院校重点建设专业:软件技术、动画设计与制作。
河北省高等职业教育创新发展行动计划。
骨干专业群建设项目(2019-2021年):软件技术、动画制作技术。
河北省“双高计划”高水平专业:软件技术、动画制作技术。
河北省高等职业教育示范专业:软件技术、动画设计与制作、计算机网络技术。
河北省重点示范学校。
建筑专业。
:软件技术、动画制作技术、计算机网络技术、新能源电子技术(应用电子技术)。
河北软件提供的专业列表。
职业学院的院系。
专业软件开发学院。
软件技术(Java、.NET、开发嵌入式系统,变化)。
移动通信软件、软件外包服务、Linux软件开发、软件测试、网站规划设计、中外合作办学)制作、影视多媒体技术、数字媒体技术。
计算机应用开发部。
云计算技术及应用、计算机应用技术、计算机信息管理。
网络工程系。
计算机网络技术、物联网应用技术、信息安全与管理、移动通信。
(5G)智能系机电工程技术(企业特级)、机电一体化技术、电气自动化技术(培训班)、电气自动化技术、智能产品开发、汽车电子技术、设计造价(企业特级)、设计造价、师资队伍土木工程技术、道路桥梁建设技术互联网商务电子商务、互联网金融、移动商务、市场营销(网络营销、营销策划与管理、广告运营与管理)、会计学、财务管理、财务管理、工商企业管理、国际经济与贸易
相关文章

Java程序员职业规划:C++学习价值与...
2025-03-02 02:18:06
java字符串转列表
2025-01-07 08:08:34
JavaEE经典书籍推荐:从基础到框架深...
2025-03-01 11:15:18
Python入门:轻松开发小游戏的编程指...
2024-12-25 23:16:38
C语言求一元二次方程根的细节解析及优化技...
2025-03-06 04:13:32
Java学习路径:基础到进阶的逐步指南
2025-03-16 22:28:57
Java面试必知基础问题盘点:核心技术全...
2024-12-15 13:54:25
Java字符串比较:深入理解==与equ...
2025-01-30 14:04:17
Java基础:深入浅出类与对象的关系解析
2024-12-15 18:33:15
Java类变量与实例变量详解:静态与实例...
2024-12-16 20:23:11最新文章
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
热门文章
1
Java字符串分割技巧:轻松获取逗号前的...
java任意一个字符串,当它碰到第一个逗号时,返回逗号前面的字符串,例如:str...
2
SQL多表连接查询全解析:JOIN语句应...
sql多表关联查询在执行SQL多表连接查询时,可以使用JOIN语句将多个表连接在...
3
Java中字符串类型详解:String与...
变量有字符类型,为什么没有字符串类型??基本类型:charshort、int、l...
4
JavaSE与JavaEE:从基础到企业...
javase 和javaee的区别?JavaSE和JavaEE...
5
Java程序员面试必知:核心技术问答与技...
java编程程序员技术面试常见面试?随着互联网的不断发展,Java开发已经成为很...
6
Java.exe与Javaw.exe:区...
程序中java和javaw有什么区别java和javaw的区别:两者都是Java...
7
深入解析:Java中的javax包及其与...
JAVA导入时,什么是javax?awt是java1.0,swing是java2...
8
Java基础教程:深入理解File和Pa...
java中if(!file.exists())什么意思?”“在Java >...
9
Java字符串搜索与位置定位技巧解析
在java中求一个字符串在另一个字符串中多次出现的位置。用indexOf方法怎么...
10
Java静态资源加载机制解析:静态方法与...
java静态资源(静态方法,静态属性)是程序一运行就加载到jvm中,还是当被调用...