鱼C论坛

 找回密码
 立即注册
查看: 2692|回复: 0

[学习笔记] Java暑期学习Day25

[复制链接]
发表于 2017-7-29 22:49:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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


                               
登录/注册后可看大图



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

  1. public enum Action2 {
  2.         
  3.         STOP,RIGHT,LEFT,UP,DOWN

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

  1. import static java.lang.System.out;

  2. public class Game {

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

  6.         }

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

  8.                 switch (action) {
  9.                 case STOP:                       //也就是Action2.STOP
  10.                         out.println("播放停止动画");
  11.                         break;
  12.                 case RIGHT:
  13.                         out.println("播放向右动画");
  14.                         break;
  15.                 case LEFT:
  16.                         out.println("播放向左动画");
  17.                         break;
  18.                 case UP:
  19.                         out.println("播放向上动画");
  20.                         break;
  21.                 case DOWN:
  22.                         out.println("播放向下动画");
  23.                         break;

  24.                 }

  25.         }

  26. }
复制代码
  结果是——
播放向右动画
播放向上动画

  这这里,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 子句中的参数类型。
  两个子类的实例,ErrorException,通常用于指示发生了异常情况。通常,这些实例是在异常情况的上下文中新近创建的,因此包含了相关的信息(比如堆栈跟踪数据)。


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

  2. public class Average2 {
  3.         public static void main(String[] args) {
  4.                 try {
  5.                         Scanner console = new Scanner(System.in);
  6.                         double sum = 0;
  7.                         int count = 0;
  8.                         while (true) {
  9.                                 int number = console.nextInt();
  10.                                 if (number == 0) {
  11.                                         break;
  12.                                 }
  13.                                 sum += number;
  14.                                 count++;
  15.                         }
  16.                         System.out.printf("平均%.2f%n", sum / count);
  17.                 } catch (InputMismatchException ex) {
  18.                         System.out.println("必须输入整数");

  19.                 }

  20.         }

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



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


applicable  adj.适当的; 可应用的;

  





评分

参与人数 1鱼币 +5 收起 理由
小甲鱼 + 5

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-17 04:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表