package com.zdbx; import javax.swing.*; import java.awt.*; public class MyTest { public static void main(String[] args) { JFrame jFrame = new JFrame("中北大学"); jFrame.setSize(500,500); jFrame.setLocation(600,300); jFrame.setBackground(Color.PINK); System.out.println(jFrame); jFrame.setVisible(true); } }
package com.zdbx; import javax.swing.*; import java.awt.*; public class MyTest02 { public static void main(String[] args) { JFrame jFrame = new JFrame("中北大学"); Dimension dimension = new Dimension(500,500); jFrame.setSize(dimension); Point point = new Point(600,300); jFrame.setLocation(600,300); System.out.println(jFrame); jFrame.setVisible(true); } } 我们可以通过throws来声明某个方法可能出现的异常。 当方法的定义者在定义方法的时候不知道调用者在调用该方法的时候会出现异常,但是定义者又不知道如何处理时,此时可以选择使用throws关键字来声明异常,可以声明多个异常,用逗号分隔 [修饰符] 返回值类型 方法名(形参列表) throws 异常 1, 异常 2, 、、、{ } 1 2 声明异常时要根据异常的分类来确定是否外界(调用处)是否必须处理该方法产生的异常。如果需要外界必须处理,需要声明检查时异常,否则声明运行时异常。 package day15_exception.classing.exception; import java.util.InputMismatchException; import java.util.Scanner; /** * @author Xiao_Lin * @version 1.0 * @date 2020/12/19 11:31 */ public class TestException { public static int div(int a, int b) throws Exception{//抛出了检查时异常 int r = 0; r = a / b; return r; } public static void main(String[] args) { System.out.println(div(10, 0));//这里并没有解决异常,会报错,编译无法通过 System.out.println("程序正常结束!"); } } public static void main(String[] args) {//改为这样才可以 try { System.out.println(div(10, 0)); } catch (Exception e) { e.printStackTrace(); } System.out.println("程序正常结束!"); } 1 2 3 4 5 6 7 8 10.7.2、声明异常与重载的关系 无关系 10.7.3、声明异常和重写的关系 如果父类声明运行时异常,子类可以声明运行时异常或者不声明;如果父类声明检查时异常,子类可以声明检查时异常或者不声明或者运行时异常。 如果父类没有声明任何异常,子类要么不声明任意异常,要么可以声明运行时异常,但不能声明检查时异常。 总结:子类方法的异常 <= 父类方法的异常 10.7.4、异常上抛 在实际开发过程中,如果调用 A 类 方法存在异常,调用者也不知如何处理这个异常时,可以继续向上声明异常,我们把这个过程称为异常的上抛。 在实际中遇到的异常能内部处理的优先处理,无法处理再上抛 public class Sub extends Parent{ @Override public void showInfo() throws Exception{ } } 1 2 3 4 5 public class Test01 { public static void main(String[] args) throws Exception{ Sub sub = new Sub(); sub.showInfo(); System.out.println("程序正常结束!"); } } 1 2 3 4 5 6 7 10.7.5、手动抛出异常 在实际开发过程中,开发者也可以根据程序的需要,手动抛出异常,通过 throw 关键字,程序员可以主动抛出某种特定类型的异常。 package com.kal02.exception07; public class Student { private String name; private String gender; public void setGender(String gender) throws RuntimeException{ if(gender.equals(Student.MAN)||gender.equals(Student.WOMAN)){ this.gender = gender; }else { // 手动抛出异常 throw new RuntimeException("性别只能是男或者女"); } } } 1 2 3 4 5 6 7 8 9 10 11 12 13 10.8、自定义异常 当 JDK 中的异常类型不能满足程序的需要时(也即需要定义具体的业务异常时),可以自定义异常。 自定义异常的步骤: 确定异常类型(检查时异常、运行时异常)。 继承异常的父类(检查时异常继承Exception,运行时异常继承RuntimeException) 声明构造方法(自定义异常类的构造方法,并且将异常信息传进去,父类的构造方法子类无法继承) Student类 package day15_exception.classing.customize; /** * @author Xiao_Lin * @date 2020/12/19 17:25 */ public class Student { private String name; private String Gender; public Student(String name, String gender) { this.name = name; Gender = gender; } public Student() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return Gender; } public void setGender(String gender) throws GenderException{ if (gender.equals("男") || gender.equals("女") || gender.equals("保密")){ Gender = gender; }else { throw new GenderException("性别不合法");//s } } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 自定义异常类 package day15_exception.classing.customize; /** * @author Xiao_Lin * @date 2020/12/19 17:27 */ public class GenderException extends Exception{ public GenderException() { } public GenderException(String message) { super(message); } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 测试类 package day15_exception.classing.customize; /** * @author Xiao_Lin * @date 2020/12/19 17:28 */ public class CustomizeException { public static void main(String[] args) { Student student = new Student("宿舍","钕"); try { student.setGender("宿舍"); } catch (GenderException e) { e.printStackTrace(); } } }