java实现系统捕获异常发送邮件案例

在实际运用中,比如你淘宝购物,申请退款,这时你在邮箱中看到退款邮件,或者你注册某个账号,申请验证邮箱通知等等,这些都是邮件发送,这里将介绍下系统捕获异常发送邮件案例。

准备工作:
eclipse4.5 64位
jdk1.7 64位

邮件发送所需jar:

fastjson-1.1.24.jar,javax.mail-1.5.6.jar

类Developer:

枚举类型,发送邮件人姓名和邮箱地址

package mail;
/**
 * @class:Developer
 *@descript:枚举类型,发送邮件人姓名和邮箱地址
 *@date:2016年10月26日 下午8:07:50
 *@author sanghaiqin
 *@version:V1.0
 */
public enum Developer {
  zhoujing("周静","405687038@qq.com"),
  peiyuxiang("裴玉翔","498736875@qq.com"),
  yipeng("乙鹏","729325112@qq.com"),
  liuan("刘安","2211747233@qq.com"),
  chenyuhao("陈宇豪","631604198@qq.com"),
  wangdong("王栋","1217295649@qq.com"),
  sanghaiqin("桑海芹","1522580013@qq.com"); 

  //发件人姓名
  private String name;
  //发件人email
  private String mail; 

  private Developer() { 

  } 

  private Developer(String name, String mail) {
    this.name = name;
    this.mail = mail;
  } 

  /**
   * @descript:传递发件人姓名得到该发件人的邮箱
   * @param name 发件人姓名
   * @return
   */
  public static String getMail(String name) {
    for (Developer c : Developer.values()) {
      if (c.getName().equals(name)) {
        return c.mail;
      }
    }
    return null;
  } 

  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getMail() {
    return mail;
  }
  public void setMail(String mail) {
    this.mail = mail;
  } 

}

类ExceptionInfo:发件人信息

package mail;
/**
 * @class:ExceptionInfo
 *@descript:发件人信息
 *@date:2016年10月26日 下午8:11:27
 *@author sanghaiqin
 *@version:V1.0
 */
public class ExceptionInfo { 

  //发件人姓名
  private String developer;
  //发件人方法
  private String method;
  //发件人url
  private String url;
  //发件人捕获异常信息
  private Exception e; 

  /**
   * @param developer 发件人姓名
   * @param method 发件人方法
   * @param url 发件人url
   * @param e 发件人捕获异常信息
   */
  public ExceptionInfo(String developer, String method, String url, Exception e) {
    super();
    this.developer = developer;
    this.method = method;
    this.url = url;
    this.e = e;
  }
  public String getDeveloper() {
    return developer;
  }
  public void setDeveloper(String developer) {
    this.developer = developer;
  }
  public String getMethod() {
    return method;
  }
  public void setMethod(String method) {
    this.method = method;
  }
  public String getUrl() {
    return url;
  }
  public void setUrl(String url) {
    this.url = url;
  }
  public Exception getE() {
    return e;
  }
  public void setE(Exception e) {
    this.e = e;
  } 

}

类MailSenderInfo:发送邮箱信息

package mail; 

import java.util.Properties;
/**
 * @class:MailSenderInfo
 *@descript:发送邮箱信息
 *@date:2016年10月26日 下午8:14:22
 *@author sanghaiqin
 *@version:V1.0
 */
public class MailSenderInfo {
  //发送邮件的服务器的IP
  private String mailServerHost;
  //发送邮件的服务器的端口默认为25
  private String mailServerPort = "25";
  // 邮件发送者的地址
  private String fromAddress;
  // 邮件接收者的地址
  private String toAddress;
  // 登陆邮件发送服务器的用户名
  private String username;
  // 登陆邮件发送服务器的密码
  private String password;
  // 是否需要身份验证
  private boolean validate = false;
  // 邮件主题
  private String subject;
  // 邮件的文本内容
  private String content;
  // 邮件附件的文件名
  private String[] attachFileNames; 

  public MailSenderInfo() {
    super();
  } 

  public String getMailServerHost() {
    return mailServerHost;
  }
  public void setMailServerHost(String mailServerHost) {
    this.mailServerHost = mailServerHost;
  }
  public String getMailServerPort() {
    return mailServerPort;
  }
  public void setMailServerPort(String mailServerPort) {
    this.mailServerPort = mailServerPort;
  }
  public boolean isValidate() {
    return validate;
  }
  public void setValidate(boolean validate) {
    this.validate = validate;
  }
  public String[] getAttachFileNames() {
    return attachFileNames;
  }
  public void setAttachFileNames(String[] fileNames) {
    this.attachFileNames = fileNames;
  }
  public String getFromAddress() {
    return fromAddress;
  }
  public void setFromAddress(String fromAddress) {
    this.fromAddress = fromAddress;
  }
  public String getPassword() {
    return password;
  }
  public void setPassword(String password) {
    this.password = password;
  }
  public String getToAddress() {
    return toAddress;
  }
  public void setToAddress(String toAddress) {
    this.toAddress = toAddress;
  }
  public String getUsername() {
    return username;
  }
  public void setUsername(String username) {
    this.username = username;
  }
  public String getSubject() {
    return subject;
  }
  public void setSubject(String subject) {
    this.subject = subject;
  }
  public String getContent() {
    return content;
  }
  public void setContent(String textContent) {
    this.content = textContent;
  } 

  /**
   * @descript:获得邮件会话属性
   * @return
   */
  public Properties getProperties() {
    PropertyUtil propertyUtil = new PropertyUtil();
    Properties properties =propertyUtil.readProperties();
    return properties;
  } 

}

类MyAuthenticator:用户验证

package mail; 

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
/**
 * @class:MyAuthenticator
 *@descript:用户验证
 *@date:2016年10月26日 下午8:57:45
 *@author sanghaiqin
 *@version:V1.0
 */
public class MyAuthenticator extends Authenticator {
  //用户名
  String username = null;
  //密码
  String password = null; 

  public MyAuthenticator() { 

  } 

  public MyAuthenticator(String username, String password) {
    this.username = username;
    this.password = password;
  } 

  protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(username, password);
  } 

}

类PropertyUtil:获得properties文件工具类

package mail; 

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
 * @class:PropertyUtil
 *@descript:获得properties文件工具类
 *@date:2016年10月26日 下午8:20:10
 *@author sanghaiqin
 *@version:V1.0
 */
public class PropertyUtil {
  /**
   * @descript:加载资源文件
   * @param resources 资源文件
   * @return
   * @throws FileNotFoundException
   */
  private Properties loadProperties(String resources) {
    InputStream inputstream = null;
    Properties properties = new Properties();
    // 使用InputStream得到一个资源文件
    try {
      inputstream = new FileInputStream(resources);
       // 加载配置文件
       properties.load(inputstream);
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }finally{
      if(inputstream!=null){
        try {
          inputstream.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
    return properties;
  } 

  /**
   * @descript:读属性文件
   * @return
   * @throws FileNotFoundException
   */
  public Properties readProperties(){
    String resources = PropertyUtil.class.getClassLoader().getResource("prop.properties").getPath();
    Properties properties = loadProperties(resources);
    return properties;
  } 

  /**
   * @descript:测试
   * @param args
   */
  public static void main(String[] args) {
    PropertyUtil p=new PropertyUtil();
    Properties pro=p.readProperties();
    String mailSenderUsername=(String) pro.get("mail.sender.username");
    System.out.println("邮件发送者用户名:"+mailSenderUsername);//neo_lifes@163.com
    String path = PropertyUtil.class.getClassLoader().getResource("prop.properties").getPath();
    System.out.println(path);// /G:/Workspaces4.4/test/bin/prop.properties
  } 

}

资源文件pro.properties:

#-------------------邮件功能------------------
#----------------这两个是构建session必须的字段----------
#smtp服务器,构建session回话必须的字段
mail.smtp.host=smtp.163.com
#身份验证,构建session回话必须的字段
mail.smtp.auth=true
#--------------------------------------------------------------
#发送者的邮箱用户名
mail.sender.username=neo_lifes@163.com
#发送者的邮箱密码
mail.sender.password=827623LIU
#发送者的邮箱地址
mail.sender.address=neo_lifes@163.com

类JavaMail:发送邮箱

package mail; 

import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Date;
import java.util.Properties; 

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility; 

/**
 * @class:JavaMail
 *@descript:发送信息邮箱
 *所需jar包:
 *fastjson-1.1.24.jar
 *javax.mail-1.5.6.jar
 *@date:2016年10月26日 下午8:13:05
 *@author sanghaiqin
 *@version:V1.0
 */
public class JavaMail { 

  public static void sendExceptionMail(ExceptionInfo info){
    try {
      //通过发送者获得发送者邮箱
      String mail = Developer.getMail(info.getDeveloper());
      if(mail!=null){
        MailSenderInfo mailInfo = new MailSenderInfo();
        //设置邮件的文本内容
        mailInfo.setContent("负责人 : "+info.getDeveloper()+"==>服务器 ip:"+InetAddress.getLocalHost().getHostAddress()+"==>方法名: "+info.getMethod()+"==>地址:"+info.getUrl()+"==>异常信息: "+getEmessage(info.getE()));
        //设置邮件接收者的地址
        mailInfo.setToAddress(mail);
        //邮件主题
        mailInfo.setSubject("易卡爱途异常通知");
        //发送邮件
        sendTextMail(mailInfo);
      }
    } catch (UnknownHostException e) {
      e.printStackTrace();
    }
  } 

  /**
   * @descript:以文本格式发送邮件
   * @param: mailInfo 待发送的邮件的信息
   * @return: 发送成功返回true;失败返回false
   */
  public static boolean sendTextMail(MailSenderInfo mailInfo) {
    // 判断是否需要身份认证
    MyAuthenticator authenticator = null;
    Properties pro = mailInfo.getProperties();
    try {
      if ("true".trim().equals(pro.getProperty("mail.smtp.auth"))) {
        // 如果需要身份认证,则创建一个密码验证器
        authenticator = new MyAuthenticator(pro.getProperty("mail.sender.username"),pro.getProperty("mail.sender.password"));
      }
      // 根据邮件会话属性和密码验证器构造一个发送邮件的session
      Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
      // 根据session创建一个邮件消息
      Message mailMessage = new MimeMessage(sendMailSession);
      // 创建邮件发送者地址
      Address from = new InternetAddress(pro.getProperty("mail.sender.address"));
      // 设置邮件消息的发送者
      mailMessage.setFrom(from);
      // 创建邮件的接收者地址,并设置到邮件消息中
      Address to = new InternetAddress(mailInfo.getToAddress());
      // Message.RecipientType.TO属性表示接收者的类型为TO
      mailMessage.setRecipient(Message.RecipientType.TO, to);
      // 设置邮件消息的主题
      mailMessage.setSubject(mailInfo.getSubject());
      // 设置邮件消息发送的时间
      mailMessage.setSentDate(new Date());
      // 设置邮件消息的主要内容
      mailMessage.setText(mailInfo.getContent());
      // 发送邮件
      Transport.send(mailMessage);
      return true;
    } catch (MessagingException ex) {
      ex.printStackTrace();
    }
    return false;
  } 

  /**
   * @descript:以HTML格式发送邮件
   * @param mailInfo: 待发送的邮件的信息
   * @param attachment:附件内容
   * @return:发送成功返回true;失败返回false
   */
  public static boolean sendHtmlMail(MailSenderInfo mailInfo, String[] attachment) {
    // 判断是否需要身份认证
    MyAuthenticator authenticator = null;
    Properties pro = mailInfo.getProperties();
    try {
      // 如果需要身份认证,则创建一个密码验证器
      if ("true".trim().equals(pro.getProperty("mail.smtp.auth"))) {
        // 如果需要身份认证,则创建一个密码验证器
        authenticator = new MyAuthenticator(pro.getProperty("mail.sender.username"),pro.getProperty("mail.sender.password"));
      }
      // 根据邮件会话属性和密码验证器构造一个发送邮件的session
      Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
      // 根据session创建一个邮件消息
      Message mailMessage = new MimeMessage(sendMailSession);
      // 创建邮件发送者地址
      Address from = new InternetAddress(pro.getProperty("mail.sender.address"));
      // 设置邮件消息的发送者
      mailMessage.setFrom(from);
      // 创建邮件的接收者地址,并设置到邮件消息中
      Address to = new InternetAddress(mailInfo.getToAddress());
      // Message.RecipientType.TO属性表示接收者的类型为TO
      mailMessage.setRecipient(Message.RecipientType.TO, to);
      // 设置邮件消息的主题
      mailMessage.setSubject(mailInfo.getSubject());
      // 设置邮件消息发送的时间
      mailMessage.setSentDate(new Date());
      // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
      Multipart mainPart = new MimeMultipart();
      // 创建一个包含HTML内容的MimeBodyPart
      BodyPart html = new MimeBodyPart();
      // 设置HTML内容
      html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
      //添加HTML内容的MimeBodyPart
      mainPart.addBodyPart(html);
      // 添加附件的内容
      if (attachment != null) {
        for (String filePath : attachment) {
          MimeBodyPart filePart = new MimeBodyPart();
          DataSource source = new FileDataSource(filePath);
          filePart.setDataHandler(new DataHandler(source));
          try {
            // 网上流传的解决文件名乱码的方法,其实用MimeUtility.encodeWord就可以很方便的搞定
            filePart.setFileName(MimeUtility.encodeWord(source.getName()));
          } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
          }
          mainPart.addBodyPart(filePart);
        }
      }
      // 将MiniMultipart对象设置为邮件内容
      mailMessage.setContent(mainPart);
      //保持内容
      mailMessage.saveChanges();
      // 发送邮件
      Transport.send(mailMessage);
      return true;
    } catch (MessagingException ex) {
      ex.printStackTrace();
    }
    return false;
  } 

  /**
   * @descript:获得发送者方法的异常信息
   * 使用字符串作为物理节点的字符输入输出流的用法,即StringReader和StringWriter的用法
   * PrintWriter(Writer out, boolean autoFlush) 创建带自动行刷新的新 PrintWriter, true代表能自动刷新
   * @param e 异常信息
   * @return
   */
  private static String getEmessage(Exception e){
    //StringWriter输出异常信息
    StringWriter sw = new StringWriter();
    PrintWriter pw = new PrintWriter(sw, true);
    e.printStackTrace(pw);
    pw.flush();
    sw.flush();
    return sw.toString();
  }  

  /**
   * @descript:测试
   * @param args
   */
  public static void main(String[] args) {
    //测试1:发送邮件以文本格式
    try {
      String s="";
      s.substring(2);
    } catch (Exception e) {
      e.printStackTrace();
      System.out.println(getEmessage(e));
      sendExceptionMail(new ExceptionInfo( Developer.sanghaiqin.getName(),"get()", "123",e));
    } 

    //测试2:发送邮件以html格式
    MailSenderInfo mailInfo = new MailSenderInfo();
    mailInfo.setToAddress("1522580013@qq.com");       // 设置接受者邮箱地址
    mailInfo.setSubject("标题");
    mailInfo.setContent("内容<h1>www.baidu.com</h1>");
    String[] files = {"G:/upload/image/2016/10/28/1477372845440.jpg","G:/upload/image/2016/10/28/1477372845660.jpg"};
    JavaMail.sendHtmlMail(mailInfo,files); // 发送html格式 

    System.out.println("发送成功"); 

  } 

}

测试截图:

测试1:发送邮件以文本格式:

测试2:发送邮件以html格式:

项目结构截图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 浅谈java异常链与异常丢失

    1.在java的构造方法中提供了 异常链.. 也就是我们可以通过构造方法不断的将 异常串联成一个异常链... 之所以需要异常连,是因为处于代码的可理解性,以及阅读和程序的可维护性... 我们知道我们每抛出一个异常都需要进行try catch ...那么岂不是代码很臃肿... 我们如果可以将异常串联成一个异常连,然后我们只捕获我们的包装 异常,我们知道 RuntimeException 以及其派生类可以不进行try catch 而被jvm自动捕获并处理.. 当然了我们可以自己定义自己的异常类从Ru

  • java 解决异常 2 字节的 UTF-8 序列的字节2 无效的问题

    java 解决异常 2 字节的 UTF-8 序列的字节 2 无效的问题 最近做项目,遇到异常 2 字节的 UTF-8 序列的字节 2 无效的问题,上网找了下资料,这里记录下解决方法,有遇到同样问题的大家,可以看下 详细异常: 十二月 08, 2015 7:16:55 下午 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet [jsp] in context with path

  • 浅谈java中异常抛出后代码是否会继续执行

    问题 今天遇到一个问题,在下面的代码中,当抛出运行时异常后,后面的代码还会执行吗,是否需要在异常后面加上return语句呢? public void add(int index, E element){ if(size >= elements.length) { throw new RuntimeException("顺序表已满,无法添加"); //return; //需要吗? } .... } 为了回答这个问题,我编写了几段代码测试了一下,结果如下: //代码1 public

  • java异常和错误类总结(必看篇)

    java异常和错误类总结 最近由于考试和以前的面试经常会遇到java当中异常类的继承层次的问题,弄得非常头大,因为java的异常实在是有点多,很难记下来,今天正好查了一些资料整理下来,希望对自己和大家有点帮助.最开始的时候习惯用笔记本(手写的纸质的本子)记笔记,后来发现查阅的时候不是很方便,而且速度比较慢.后来改用notepad开始记,感觉效果挺棒,简单易用,没有花哨的东西.但是也有它的缺点,比如版式的整理,不能加入一些图片(往往图片特别是一些大纲是非常好的记忆学习方法)等等,于是尝试用mark

  • Java 常见异常(Runtime Exception )详细介绍并总结

    本文重在Java中异常机制的一些概念.写本文的目的在于方便我很长时间后若是忘了这些东西可以通过这篇文章迅速回忆起来. 1. 异常机制 1.1 异常机制是指当程序出现错误后,程序如何处理.具体来说,异常机制提供了程序退出的安全通道.当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器. 1.2 传统的处理异常的办法是,函数返回一个特殊的结果来表示出现异常(通常这个特殊结果是大家约定俗称的),调用该函数的程序负责检查并分析函数返回的结果.这样做有如下的弊端:例如函数返回-1代表出现异常

  • Java常见内存溢出异常分析与解决

    Java虚拟机规范规定JVM的内存分为了好几块,比如堆,栈,程序计数器,方法区等,而Hotspot jvm的实现中,将堆内存分为了三部分,新生代,老年代,持久带,其中持久带实现了规范中规定的方法区,而内存模型中不同的部分都会出现相应的OutOfMemoryError错误,接下来我们就分开来讨论一下.java.lang.OutOfMemoryError这个错误我相信大部分开发人员都有遇到过,产生该错误的原因大都出于以下原因: JVM内存过小.程序不严密,产生了过多的垃圾. 导致OutOfMemor

  • Java异常详解_动力节点Java学院整理

    什么是异常? 异常是Java语言中的一部分,它代表程序中由各种原因引起的"不正常"因素. 那么在程序中什么样的情况才算不正常呢? 我认为可以这样定义:如果出现了这么一种情况,它打断了程序期望的执行流程,改变了控制流的方向(包括让JVM停掉),那么就可以认为发生了不正常情况,也就是引发了异常.举个例子显而易见的例子: FileOutputStream out = null; try { out = new FileOutputStream("abc.text"); o

  • 浅谈java异常处理之空指针异常

    听老师说,在以后的学习中大部分的异常都是空指针异常.所以抽点打游戏的时间来查询一下什么是空指针异常 一:空指针异常产生的主要原因如下: (1)当一个对象不存在时又调用其方法会产生异常obj.method() // obj对象不存在 (2)当访问或修改一个对象不存在的字段时会产生异常obj.method() // method方法不存在 (3)字符串变量未初始化: (4)接口类型的对象没有用具体的类初始化,比如: List lt:会报错 List lt = new ArrayList():则不会报

  • java实现系统捕获异常发送邮件案例

    在实际运用中,比如你淘宝购物,申请退款,这时你在邮箱中看到退款邮件,或者你注册某个账号,申请验证邮箱通知等等,这些都是邮件发送,这里将介绍下系统捕获异常发送邮件案例. 准备工作: eclipse4.5 64位 jdk1.7 64位 邮件发送所需jar: fastjson-1.1.24.jar,javax.mail-1.5.6.jar 类Developer: 枚举类型,发送邮件人姓名和邮箱地址 package mail; /** * @class:Developer *@descript:枚举类型

  • java 异常捕获及处理案例详解

    目录 一.Java异常简介 二.Java异常的分类 三.异常的使用及执行流程 四.自定义异常 一.Java异常简介 什么是异常? 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止.在Java中即,Java在编译或运行或者运行过程中出现的错误. Java提供了更加优秀的解决办法:异常处理机制. 异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持

  • Java简单计时的实现案例(可以用来限时循环)

    在软件开发过程中经常需要知道程序运行的大概时间,或者需要在规定时间内取数据,这是可以使用下面的方法获取时间段,还可以用在限时循环 方法一: /** 获取当前系统时间*/ long startTime = System.currentTimeMillis(); /** 程序运行 processRun();*/ /** 获取当前的系统时间,与初始时间相减就是程序运行的毫秒数,除以1000就是秒数*/ long endTime = System.currentTimeMillis(); long us

  • Java之SpringCloudAlibaba Sentinel组件案例讲解

    Sentinel 是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度保护服务的稳定性. 官网:https://github.com/alibaba/Sentinel 中文官网:https://github.com/alibaba/Sentinel/wiki Sentinel与Hystrix的区别 由于Hystrix不再积极的开发,进入维护阶段,现在越来越多的开发者在项目中使用Spring Cloud Al

  • Java sdk安装及配置案例详解

    1.安装Java SDK开发环境. 首先去官网下载Java SDK,http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html, 下载完成之后,开始安装. 点击下一步,安装完成. 2.配置Java SDK环境变量 单击"计算机-属性-高级系统设置",单击"环境变量".在"系统变量"栏下单击"新建",创建新的系统环境变量.

  • Java System.getProperty()-获取系统参数案例详解

    因为所有在java.io中的类都是将相对路径名解释为起始于用户的当前工作目录,所以应该清楚当前的目录. 可以通过调用System.getProperty("user.dir"); 来获得. /** * java.version Java 运行时环境版本 java.vendor Java 运行时环境供应商 java.vendor.url Java 供应商的 URL java.vm.specification.version Java 虚拟机规范版本 java.vm.specificati

  • java之assert关键字用法案例详解

    Java2在1.4中新增了一个关键字:assert.在程序开发过程中使用它创建一个断言(assertion).,它的语法形式有如下所示的两种形式: 1.assert condition; 这里condition是一个必须为真(true)的表达式.如果表达式的结果为true,那么断言为真,并且无任何行动 如果表达式为false,则断言失败,则会抛出一个AssertionError对象.这个AssertionError继承于Error对象, 而Error继承于Throwable,Error是和Exc

  • Java实现迷你图书管理系统案例全程

    目录 项目需求 覆盖知识 开发思路 开发步骤 全部代码展示 1.Book类 2.DBUtils类 3.数据访问层的BookDao接口 4.数据访问层的BookDaoImpl类 5.服务层的BookService接口 6.服务层的BookServiceImpl类 7.视图层BookMgr测试类 ​ 项目需求 为某图书馆开发一个迷你图书管理系统,实现图书的管理,包括如下功能: (1)新增图书 (2)查看图书 (3)删除图书 (4)借出图书 (5)归还图书 (6)退出图书系统 覆盖知识 程序基本概念.

  • java实现基于SMTP发送邮件的方法

    本文实例讲述了java实现基于SMTP发送邮件的方法.分享给大家供大家参考.具体实现方法如下: import java.util.Date; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Tra

  • java实现接口的典型案例

    废话不多说,直接上代码 package com.car; interface Carr{ //汽车名称 String getName(); //获得汽车售价 int getPrice(); } class BMW implements Carr{ public String getName(){ return "BMW"; } public int getPrice(){ return 300000; } } class CheryQQ implements Carr{ public

随机推荐