马太效应 发表于 2017-7-29 22:49:18

Java暑期学习Day25

本帖最后由 马太效应 于 2017-7-29 22:49 编辑

今天是第25天,八月份已经快到了,还没有把一本书学完一半,要加强理解与学习。(20170729){:10_329:}

static/image/hrline/line7.png


①使用enum枚举常数
在JDK5之后新增了enum语法,可用于定义枚举常数。

public enum Action2 {
      
      STOP,RIGHT,LEFT,UP,DOWN

}
enum继承自java.lang.Enum,不过这是由编译程序处理,直接撰写程序继承Enum类会被编译程序拒绝。
enum实际上定义了类,而enum中列举的常数,实际上是public static final,且为枚举类型实例,无法撰写程序直接实例化枚举类型,因为构造函数权限设定为private,只有类中才可以实例化。

import static java.lang.System.out;

public class Game {

      public static void main(String[] args) {
                play(Action2.RIGHT);                     //只能传入Action2实例
                play(Action2.UP);

      }

      public static void play(Action2 action) {      //声明为Action2类型

                switch (action) {
                case STOP:                     //也就是Action2.STOP
                        out.println("播放停止动画");
                        break;
                case RIGHT:
                        out.println("播放向右动画");
                        break;
                case LEFT:
                        out.println("播放向左动画");
                        break;
                case UP:
                        out.println("播放向上动画");
                        break;
                case DOWN:
                        out.println("播放向下动画");
                        break;

                }

      }

}
结果是——
播放向右动画
播放向上动画
这这里,play()方法中的action参数声明为Action2类型,所以只接受Action2的实例,case比较也只能列举Action2实例。


②语法细节
1.要在类中定义枚举常数,一定要明确写出public static final。
2.从JDK8开始,若接口仅定义一个抽象方法,可以使用Lambda表达式来简化程序的撰写。
Some some=new Some(){             //Some是一个接口,这是最初的程序
public void doService(){
System.out.println("做一些有用的事");
}
}

Some some=()->{
out.println("做一些有用的事");//这是使用Lambda表达式简化后的程序
}
3.在JDK8出现前,如果要在匿名内部类中存取局部变量,则该局部变量必须是final,否则会发生编译错误。
局部变量的生命周期往往比对象短,像是方法调用后返回对象,局部变量生命周期就结束了,此时再通过对象尝试存取局部变量会发生错误,Java的做法是采取传值。


③异常处理
1.API关于java.lang.Throwable
Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。
两个子类的实例,Error 和 Exception,通常用于指示发生了异常情况。通常,这些实例是在异常情况的上下文中新近创建的,因此包含了相关的信息(比如堆栈跟踪数据)。


2.使用try,catch
import java.util.*;

public class Average2 {
      public static void main(String[] args) {
                try {
                        Scanner console = new Scanner(System.in);
                        double sum = 0;
                        int count = 0;
                        while (true) {
                              int number = console.nextInt();
                              if (number == 0) {
                                        break;
                              }
                              sum += number;
                              count++;
                        }
                        System.out.printf("平均%.2f%n", sum / count);
                } catch (InputMismatchException ex) {
                        System.out.println("必须输入整数");

                }

      }

}
Java中所有错误都会被包装为对象,可以尝试(try)执行程序并捕捉(catch)代表错误的对象后做一些处理。
使用了try、catch语法,JVM会尝试执行try区块中的程序代码,如果发生错误,执行流程会跳离错误点,然后比对catch括号中声明的类型,是否符合被抛出的错误对象类型,如果是的话,就执行catch区块中的程序代码。
consolevt.安慰,慰问;
               n.控制台,操纵台; 演奏台; 悬臂; 肘托;


exceptionn.例外,除外; 反对,批评; [法律] 异议,反对;


applicableadj.适当的; 可应用的;







页: [1]
查看完整版本: Java暑期学习Day25