前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java重要知识点(继承、多态、接口,异常,工具,测试)

Java重要知识点(继承、多态、接口,异常,工具,测试)

作者头像
小爷毛毛_卓寿杰
发布2019-02-13 11:54:17
6330
发布2019-02-13 11:54:17
举报
文章被收录于专栏:Soul Joy HubSoul Joy Hub

重载、多态、接口

多态调用的顺序

当父类,和子类有Static时,先初始化Static,再初始化子类的Static,再初始化父类的其他成员变量->父类构造方法->子类其他成员变量->子类的构造方法。

重写 hashcode equals compareto

Employee.java

代码语言:javascript
复制
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Objects;

public class Employee implements Comparable<Employee> {
    private String name;
    private double salary;
    private Date hireDay;

    public Employee(String n, double s, int year, int month, int day) {
        name = n;
        salary = s;
        GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
        hireDay = calendar.getTime();
    }

    public String getName() {
        return name;
    }

    public double getSalary() {
        return salary;
    }

    public Date getHireDate() {
        return hireDay;
    }

    public boolean equals(Object Otherobject) {
        if (this == Otherobject)
            return true;
        if (Otherobject == null)
            return false;
        // if(! Otherobject instanceof Employee) return false;
        if (getClass() != Otherobject.getClass())
            return false;
        Employee other = (Employee) Otherobject;
        return Objects.equals(name, other.name) && salary == other.salary && Objects.equals(hireDay, other.hireDay);
    }

    public int hashCode() {
        return Objects.hash(name, salary);
    }

    public String toString() {
        return getClass().getName() + "name=" + name + ",salary=" + salary + ",hireDay=" + hireDay;
    }

    @Override
    public int compareTo(Employee other) {
        // if(getClass() != other.getClass()) throw new ClassCastException();
        return Double.compare(salary, other.salary);
    }
}

Manager.java

代码语言:javascript
复制
public class Manager extends Employee {

    private double bonus;

    public Manager(String n, double s, int year, int month, int day) {
        super(n, s, year, month, day);
        bonus = 0;
    }

    public void setBonus(double b) {
        bonus = b;
    }

    @Override
    public double getSalary() {
        double baseSalary = super.getSalary();
        return bonus + baseSalary;
    }

    @Override
    public boolean equals(Object Otherobject) {
        if (!super.equals(Otherobject))
            return false;
        Manager other = (Manager) Otherobject;
        return bonus == other.bonus;
    }

    @Override
    public int hashCode() {
        return super.hashCode() + 17 * new Double(bonus).hashCode();
    }

    @Override
    public String toString() {
        return super.toString() + ",bonus=" + bonus;
    }
}

异常

涉及return finally 以及异常抛出的问题

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

各个异常出现的情况

代码语言:javascript
复制
package exp;

import java.awt.Font;
import java.awt.FontFormatException;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.beans.Statement;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Stack;


public class AllExcept {

    public static void main(String[] args) throws Exception {
        // 01 空指针异常 java.lang.NullPointerException
        try {
            int[] s = null;
            int i = s.length;
        } catch (Exception e) {
            System.out.println("1、" + e.getClass().getName() + "异常");
        }
        // 02数组越界 java.lang.ArrayIndexOutOfBoundsException异常
        try {
            int[] s1 = new int[2];
            s1[2] = 5;
        } catch (Exception e) {
            System.out.println("2、" + e.getClass().getName() + "异常");
        }
        // 03 错误类型的对象存储到一个对象数组时抛出的异常 java.lang.ArrayStoreException异常
        try {
            Object x[] = new String[3];
            x[0] = new Integer(0);

        } catch (Exception e) {
            System.out.println("3、" + e.getClass().getName() + "异常");
        }
        // 04 除数为0异常 java.lang.ArithmeticException异常
        try {
            int a = 0;
            int b = 10;
            b /= a;
        } catch (Exception e) {
            System.out.println("4、" + e.getClass().getName() + "异常");
        }
        // 05 数据类型转换异常 java.lang.NumberFormatException异常
        try {
            String s2 = "19k";
            int n = Integer.parseInt(s2);
        } catch (Exception e) {
            System.out.println("5、" + e.getClass().getName() + "异常");
        }
        // 06 超过字符串添加长度异常 java.lang.StringIndexOutOfBoundsException异常
        try {
            StringBuffer buffer = new StringBuffer();
            buffer.charAt(5);
        } catch (Exception e) {
            System.out.println("6、" + e.getClass().getName() + "异常");
        }
        // 07 数组大小为负值异常。 java.lang.NegativeArraySizeException异常
        try {
            int i = -1;
            int[] s = new int[i];
        } catch (Exception e) {
            System.out.println("7、" + e.getClass().getName() + "异常");
        }
        // 08 正则表达式异常 java.util.regex.PatternSyntaxException异常
        try {
            String a = "\\";// 错误的正则表达式
            String a1 = "\\.";// 正确的正则表达式
            String[] x5 = "abc.cde".split(a1);
            x5 = "abc.cde".split(a);

        } catch (Exception e) {
            System.out.println("8、" + e.getClass().getName() + "异常");
        }
        // 09 空栈异常 java.util.EmptyStackException异常
        try {
            Stack s = new Stack();
            s.pop();
        } catch (Exception e) {
            System.out.println("9、" + e.getClass().getName() + "异常");
        }
        // 10 找不到类异常 java.lang.ClassNotFoundException异常
        try {
            Object s = Class.forName("ClassName");
        } catch (Exception e) {
            System.out.println("10、" + e.getClass().getName() + "异常");
        }
        // 11非法参数异常
        // 12 字体格式错误异常
        try {
            Font f = new Font("楷体", Font.BOLD, 7);
            f.createFont(2, new File("1.txt"));
        } catch (FontFormatException e) {
            System.out.println("11、" + e.getClass().getName());
        } catch (IllegalArgumentException e) {
            System.out.println("12、" + e.getClass().getName() + "异常");
        }
        // 13不支持画图异常
        try {
            Image img = Toolkit.getDefaultToolkit().getImage("Images\1.jpg");
            Graphics g = img.getGraphics();
            g.drawRect(-1, -1, -1, -1);
        } catch (Exception e) {
            System.out.println("13、" + e.getClass().getName() + "异常");
        }

        // 14 BufferOverflowException
        try {
            int cap = 2;
            ByteBuffer bf = ByteBuffer.allocate(cap);
            for (int i = 0; i < cap; i++) {
                bf.put((byte) i);
            }
            bf.put((byte) 10);
            bf.getInt(9);
        } catch (Exception e) {
            System.out.println("14、" + e.getClass().getName() + "异常");
        }
        // 15文件找不到异常
        // 16.当发生某种 I/O 异常时,抛出IOException
        // 17.文件已结束异常EOFException
        try {
            File f = new File("E:\\1.txt");
            byte[] buff = new byte[2];
            FileInputStream file = new FileInputStream(f);
            int bytes = file.read(buff, 0, 2);
            System.out.println(new String(buff, 0, 0, bytes));
            file.close();

        } catch (FileNotFoundException e) {
            System.out.println("15、" + e.getClass().getName() + "异常");
        } catch (EOFException e) {
            System.out.println("16、" + e.getClass().getName() + "异常");
        } catch (IOException e) {
            System.out.println("17、" + e.getClass().getName() + "异常");
        }
        // 18 ClassCastException异常
        try {
            Object s = new Integer(0);
            System.out.println((String) s);
        } catch (Exception e) {
            System.out.println("18、" + e.getClass().getName() + "异常");
        }
        // 19 BufferUnderflowException异常
        try {
            ByteBuffer buf = ByteBuffer.allocate(50);
            buf.flip();
            byte[] byt = new byte[100];
            buf.get(byt);

            new RuntimeException();
        } catch (Exception e) {
            System.out.println("19、" + e.getClass().getName() + "异常");
        }
        // 20 java.sql.SQLException异常
        try {

            String sql = "select * from Table";// sql语句错误
            Connection conn = DriverManager.getConnection("com.mysql.jdbc.Driver");

            Statement smt = (Statement) conn.createStatement();
            smt.execute();

        } catch (Exception e) {
            System.out.println("20、" + e.getClass().getName() + "异常");
        }
    }
}

工具

git svn 的 区别 和 常用命令

Maven依赖中的scope

测试

JUnit

Die.java

代码语言:javascript
复制
public class Die
{
    private int faceValue;
    private int numofsides;
    public Die(){
        faceValue = 0;
        numofsides = 6;
    }

    public Die(int v){
        numofsides = v;
    }

    public int numOfSides(){
        return numofsides;
    }


    public int  topFace(){
        return faceValue;
    }

    public void roll() {
        faceValue = (int) (1 + Math.random() * numofsides );
    }
}

TestDie.java

代码语言:javascript
复制
import org.junit.After;
import org.junit.Assert;
import org.junit.Test;
import org.junit.Before;


/**
 * Unit test for simple App.
 */

public class TestDie {

    private Die die1,die2;

    @Before
    public void setUp() {

        die1 = new Die();
        die2 = new Die(10);
        die1.roll();
        die2.roll();
    }

    @Test
    public void testdie1numofsides() {
        Assert.assertEquals(6, die1.numOfSides());
    }

    @Test
    public void testdie1Face() {
        Assert.assertTrue(die1.topFace() >= 1 && die1.topFace() <= 6);
    }

    @Test
    public void testdie2numofsides() {
        Assert.assertEquals(10, die2.numOfSides());
    }

    @Test
    public void testdie2Face() {
        Assert.assertTrue(die2.topFace() >= 1 && die2.topFace() <= 10);
    }

    @After
    public void tearDown() {
    }

}

实现 assertEquals aseertSame

assertEquals.java

当expected和actual都是String类型时,ComparisonFailure还会找出是前后相同的串,并用[Different String]标明那些不相同的字符串,也就是expectedToString和actualToString的格式将会变成:…${sameString}[${differentString}]${sameString}…。其中“…”只会在相同的字符串太长的情况下才会出现,这个长度标准目前(JUnit4.10)是20个字符。具体实现参考ComparisonFailure类,它继承自AssertionError,这里不再展开。

代码语言:javascript
复制
/**
     * Asserts that two objects are equal. If they are not, an
     * {@link AssertionError} is thrown with the given message. If
     * <code>expected</code> and <code>actual</code> are <code>null</code>,
     * they are considered equal.
     * 
     * @param message
     *            the identifying message for the {@link AssertionError} (<code>null</code>
     *            okay)
     * @param expected
     *            expected value
     * @param actual
     *            actual value
     */
        static public void assertEquals(String message, Object expected,
            Object actual) {
        if (expected == null && actual == null)
            return;
        if (expected != null && isEquals(expected, actual))
            return;
        else if (expected instanceof String && actual instanceof String) {
            String cleanMessage= message == null ? "" : message;
            throw new ComparisonFailure(cleanMessage, (String) expected,
                    (String) actual);
        } else
            failNotEquals(message, expected, actual);
    }

    private static boolean isEquals(Object expected, Object actual) {
        return expected.equals(actual);
    }

    /**
     * Asserts that two objects are equal. If they are not, an
     * {@link AssertionError} without a message is thrown. If
     * <code>expected</code> and <code>actual</code> are <code>null</code>,
     * they are considered equal.
     * 
     * @param expected
     *            expected value
     * @param actual
     *            the value to check against <code>expected</code>
     */
    static public void assertEquals(Object expected, Object actual) {
        assertEquals(null, expected, actual);
    }

aseertSame.java

代码语言:javascript
复制
    /**
     * Asserts that two objects refer to the same object. If they are not, an
     * {@link AssertionError} is thrown with the given message.
     * 
     * @param message
     *            the identifying message for the {@link AssertionError} (<code>null</code>
     *            okay)
     * @param expected
     *            the expected object
     * @param actual
     *            the object to compare to <code>expected</code>
     */
    static public void assertSame(String message, Object expected, Object actual) {
        if (expected == actual)
            return;
        failNotSame(message, expected, actual);
    }

    /**
     * Asserts that two objects refer to the same object. If they are not the
     * same, an {@link AssertionError} without a message is thrown.
     * 
     * @param expected
     *            the expected object
     * @param actual
     *            the object to compare to <code>expected</code>
     */
    static public void assertSame(Object expected, Object actual) {
        assertSame(null, expected, actual);
    }

其他

  • hamcrest 可以用来增强 JUnit 中的 assert 功能
  • Cobertura is a free Java tool that calculates the percentage of code accessed by tests.
  • stub & mock. EasyMock has been the first dynamic Mock Object generator, relieving users of hand-writing Mock Objects, or generating code for them
  • DbUnit is a JUnit extension (also usable with Ant) targeted at database-driven projects that,among other things, puts your database into a known state between test runs
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年11月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 重载、多态、接口
    • 多态调用的顺序
      • 重写 hashcode equals compareto
        • Employee.java
        • Manager.java
    • 异常
      • 涉及return finally 以及异常抛出的问题
        • 各个异常出现的情况
        • 工具
          • git svn 的 区别 和 常用命令
            • Maven依赖中的scope
            • 测试
              • JUnit
                • Die.java
                • TestDie.java
              • 实现 assertEquals aseertSame
                • assertEquals.java
                • aseertSame.java
              • 其他
              相关产品与服务
              数据库
              云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档