• JAVA笔记9__异常/throw关键字/自定义异常/受检与非受检异常、assert关键字/StringBuffer、StringBuilder/代码国际化、动态文本


    /**
     * 异常:在程序中导致程序中断运行的一些指令
     * 1.受检异常:编译期
     * 2.非受检异常:运行期
     * 异常处理过程分析:
     * 1.一旦产生异常,系统会自动产生一个异常类的实例化对象
     * 2.此时如果存在对应try语句,则执行,否则程序将退出,并由系统报告错误
     * 
     */
    public class Main {
        public static void main(String[] args) {
            /*
            try{
                //有可能发生异常的代码段
            }catch(异常类型对象){
                //异常的处理操作
            }catch(异常类型对象){
                //异常的处理操作
            }...
            finally{
                //异常的统一出口
            }
            */
            int a = 100;
            Scanner input = new Scanner(System.in);
            try{
                for(int i=0;i<10;++i){
                    int b = input.nextInt();
                    int c = a / b;
                    System.out.println(c);
                }
            }catch(ArithmeticException e){
                System.out.println("算术运算异常");
                e.printStackTrace(); //输出栈中的异常信息
            }catch(Exception e){
                System.out.println("运算异常");
            }finally{ //用途:资源的释放
                System.out.println("finally:不管try中的语句是否出现异常都会执行");
            }
            
            div(10,2);
        }
        
        public static int div(int a,int b){
            int res=0;
            try{
                res=a/b;
                return res; //执行完finally里的东西才执行这句
            }catch(ArithmeticException e){
                e.printStackTrace();
                return 0;
            }finally{
                System.out.println("除法运算结束");
            }
        }
    }
    public class Main {
        public static int add() throws InputMismatchException{ //抛出,让上级去处理
            Scanner input = new Scanner(System.in);
            try{
                int a = input.nextInt();
                int b = input.nextInt();
                return a+b;
            }catch(InputMismatchException e){
                //throw new InputMismatchException("There is a mistake.");
                throw e;
            }finally{
                System.out.println("All finished.");
            }
        }
        public static void main(String[] args) {
            try{
                System.out.println(add());
            }catch(InputMismatchException e){ //上级来处理
                e.printStackTrace();
            }
        }
    }
    /**
     * 自定义异常类:可以通过继承Exception类或已有的异常类  例:某些业务逻辑不合理则可定义成异常
     */
    public class Main {
        public static int count = 5; //打飞机的次数
        public static void play() throws LogicException{
            /**
             * 打飞机游戏
             */
            Scanner input = new Scanner(System.in);
            while(true){
                System.out.print("请输入非零数字:");
                int yesno = input.nextInt();
                if(0==yesno){
                    System.out.println("退出游戏");
                    return;
                }
                if(0==count){
                    throw new LogicException("你的飞机已打光!");
                }
                System.out.println("你还有"+(--count)+"架飞机");
            }
        }
        public static void main(String[] args) {
            try{
                play();
            }catch(LogicException e){
                e.printStackTrace();
            }
        }
    }
    
    class LogicException extends Exception{
        public LogicException(){
            super();
        }
        public LogicException(String msg){
            super(msg);
        }
    }
    /**
     * 受检与非受检异常:在编译期是否受检查
     * 受检异常必须用throws关键字,并且要用try,非受检可以不用
     * 
     * assert关键字:表示断言,当程序执行到某个固定位置时,程序中某个变量的取值肯定是预期的结果,那么这种操作可以使用断言完成
     * 操作语法:assert 表达式
     */
    public class Main {
        public static void main(String[] args) {
            int x = 11;
            assert x==10:"结果不正确"; //需要启动断言,加VM参:-ea
        }
    }
    /**
     * #快捷键:按住Ctrl,然后点类名,可以查看原代码
     * 使用String连接字符串,代码性能会非常低,因为String的内容不可改变(连接时不断创建新的char数组)
     * 解决方法:StringBuffer
     * StringBuffer的兄弟:StringBuilder(比StringBuffer简单些,速度更快些,建议优先使用)
     * 区别:StringBuilder字符串缓冲区被单个线程使用,StringBuffer是多线程,具体百度吧。。。
     */
    public class Main {
        public static void main(String[] args) {
            String s = "fish7";
            StringBuffer sb = new StringBuffer();
            sb.append("此刻打盹,你将做梦。");
            sb.append("此刻学习,你将圆梦。");
            System.out.println(sb);
            //具体的各种方法查java手册
        }
    }
    /**
     * 代码国际化:Locale类、ResourceBundle类
     * 具体百度吧。。。。
     * 
     * 动态文本:欢迎你,某某某(不确定)  用到MessageFormat类
     */
    public class Main {
        public static void main(String[] args) {
            Locale l1 = new Locale("zh","CN");
            Locale l2 = Locale.CANADA;
            Locale l3 = Locale.getDefault(); //当前系统环境
            
            //通过ResourceBundle工具类绑定资源文件(包名 文件名的基本名称)
            ResourceBundle r1 = ResourceBundle.getBundle("pkg1.info",l1);
            
            //从绑定的资源文件(属性文件)中根据key获取对应的value
            Scanner input = new Scanner(System.in);
            String inputKey = r1.getString("input");
            String userName = r1.getString("userName");
            
            
        }
    }
  • 相关阅读:
    有点成熟的短句,最新个性签名
    ACM2039_三角形三边关系
    Android 绘制中国地图
    Opengl-法线贴图(用来细化表面的表现表现的凹凸)
    Go的sync
    Laravel Study(使用 Laravel )
    对于宅男来说,硬盘里的数据就是命
    设计模式之模板方法模式
    游戏掉落道具掉落
    NEWMING
  • 原文地址:https://www.cnblogs.com/fish7/p/4147721.html
Copyright © 2020-2023  润新知