zoukankan      html  css  js  c++  java
  • Java学习笔记其他类特性与异常处理

    1.    final方法
           一个定义为private的方法隐式的被指定为final类型,这样无须将一个定义为private的方法再定义为final类型
     
    2.    final类
           定义为final的类不能被继承。如果希望一个类不允许任何类继承,并且不允许别人对这个类有任何修改,可以将这个类设置成final形式
           将某个类设置成final形式,类中的所有方法都被隐式设置成final形式,但是final类中的成员变量可以被定义为final或非final形式
     
    3.    成员内部类
           内部类可以访问外部类的成员,但是内部类的成员只有在内部类的范围内是可知的,不能被外部类使用
           内部类的实例一样要绑定在外部类的实例上。
           在主方法或者其他类中实例化本实例的内部对象,必须在new操作符之前提供一个外部类的引用。
           Eg:
                OutClass out = new OutClass( );
                OutClass.innerClass in2 = out.new innerClass( );
           在实例化内部类对象的时候,不能在new操作符之前使用外部类名称那种形式进行实例化内部类对象,而应该使用外部类的对象来创建其内部类的对象。
           内部类对象会依赖于外部类对象,除非已经存在一个外部类对象,否则不能创建内部类对象;
           当一个类有内部类时,这个外部类不能声明为private或protected。
     
    4.    静态内部类
           在内部类前面添加static修饰符,这个内部类就变成了静态内部类。一个静态内部类中可以声明static成员,但是在非静态内部类中不可以声明静态成员
           静态内部类的最大特点就是不能使用外部类的非静态成员
           如果创建静态内部类的对象,不需要外部类对象的引用。
     
    5.    异常处理
           try语句块存放的是可能发生异常的Java语句。catch程序块在try语句块之后,用来处理被捕获的异常。另外,finally语句块是异常处理结构的最后执行部分。不管try块中代码如何退出,都将执行finally块。finally块是可选部分。
            try{
            //程序代码块
            }catch(Exceptiontype1 e){
                        //对Exceptiontype1异常的处理
            }catch(Exceptiontype2 e){
                        //对Exceptiontype2异常的处理
            }finally{
                        //程序块
            }
     
            catch关键字后边括号中的参数类型Exceptiontype就是try代码块传递给catch代码块的异常类型
            完整的异常处理语句都会包含finally语句。不管程序中有无异常发生,并且不管之间的try-catch是否顺利执行完毕,都会执行finally语句
            在以下3中特殊情况下爱,finally块不会被执行
            1.在finally语句块发生异常
            2.在前面的代码块中用了System.exit()退出程序
            3.程序所在的线程死亡。
            由于exception是所有异常类的父类,如果将catch(Exception e)代码放在catch代码块的最前面,后面的catch块永远得不到执行,也就没有什么意思了
           try.....catch....语句块中,多个catch的顺序一定要遵循子类在上父类在下的规则。
     
    6.    throw和throws
           throws说明你有哪个可能,倾向,还未抛出,可能抛出异常
           throw的话,那就是你把那个倾向变成真实的了,已经抛出了异常
            同时:

            1)throws出现在方法函数头;而throw出现在函数体;   
            2)throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常;   
            3)两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。

         Eg:
    public class CustomExceptionDemo {
        private double sum = 0;    
            public double computeProductSum(double price) throws NumberValueException{   //可能会发生NumberValueException异常
                if(price < 0)
                    throw new NumberValueException(price);                //已经发生抛出了NumberValueException异常
                else{
                    sum = sum + price;
                }
                return sum;
            }
        
            public static void main(String[] args) {
                // TODO Auto-generated method stub
                double priceSum = 0;
                CustomExceptionDemo demo = new CustomExceptionDemo();
                try{
                    priceSum = demo.computeProductSum(5.10);
                    priceSum = demo.computeProductSum(-12);
                }catch(NumberValueException e){                                //捕获到了NumberValueException异常
                    e.printStackTrace();
                    System.out.println("单价" + e.getPrice() + "非法,请核对后重新计算。");
                }
                System.out.println("商品单价的总和是:" + priceSum);
            }
    }
  • 相关阅读:
    PHP编程中一些时间和日期代码调用的实例
    想不显示织梦栏目列表页缩略图就是不显示默认缩略图怎么办
    织梦dede文章增加HTML自定义字段字符被过滤问题
    Dedecms友情链接/uploads/fli<x>nk/不显示正确的图片路径错误
    Dedecms教程:整站调用购物车订单数量简单解决办法
    织梦DedeCMS模板常用的内容统计sql标签代码
    DEDECMS首页loop调用留言本带用户头像的方法
    Python 序列、列表(List)、元组(Tuple)
    Python 字符串常用函数
    Python 运算符
  • 原文地址:https://www.cnblogs.com/Skyar/p/3043618.html
Copyright © 2011-2022 走看看