zoukankan      html  css  js  c++  java
  • java入门了解04

    1.异常的体系
    ---------|Throwable
    --------------| Error (错误) 错误一般是由于jvm或者是硬件引发的问题,所以我们一般都不会通过代码去处理。
    --------------| Exception (异常) 异常我们一般都会通过代码去处理的。

    ----------------------|运行时异常:方法可以不声明,可以不处理

    ----------------------|编译时异常:必须声明,调用者必须处理异常


    (1)异常的处理方式

            方式一:捕获处理

                 捕获处理的格式

                  try{

                      可能发生异常的代码

                  }catch(捕获的异常类型 变量名){
                    处理异常的代码
                  }

          捕获处理要注意的细节:
          1. 如果一个try块中出现了异常的代码,经过处理之后,那么try-catch块外面的代码可以正常执行。
          2. 如果一个try块中出现了异常的代码,那么在try块中出现异常的代码后面 的语句无法执行。
          3. 一个try块后面可以跟多个catch块,也就是一个try块可以捕获多种异常的类型,但是捕获的
          异常类型必须从小到大进行捕获。

           方式二:抛出处理(throw throws)


          抛出处理要注意的细节:
              1. 如果一个方法内部抛出了一个编译时异常对象,那么该方法必须要声明抛出。
              2. 如果调用了一个声明抛出编译时异常的方法,那么调用者必须要处理。
              3. 如果一个方法抛出了一个异常对象,那么该方法也会马上停止(一个方法遇到了throw关键字,那么该方法就会马上停止)
              4. 在一种情况下只能抛出一种异常对象。

          throw 关键字是用于方法体之内抛出异常对象 的,throws是用于方法 声明上声明抛出异常类型的。

    (2)自定义异常类

         需求:模拟xiaoping上线时没有插网线,此时抛出一个异常

         步骤:a.定义一个异常类需要继承Exception类(有些类不清楚可以查看API说明文档)

                     

    //定义一个异常类
    class NoIpException extends Exception{
          public NoIpException(String message){
                Super(message);//调用父类构造函数
          }
    }
    View Code

                 b.现在有一个方法调用时可能发生这个异常声明这个异常,这个方法我们将它放在一个Test测试类中

                   

    class Test{
        publc static void main(String[] args){
            String ip="192.1.1.124";
            ip=null;
            try{
                fangFa(ip);//这个方法可能会发生一个异常在定义这个方法时需要声明
            }catch(NoIpException e)
            {System.out.println("请插入网线!")}
    
            public static void fangFa(String ip) throw NoIpException{
                if(ip==null)
                  {throw NoIpException("没有插入网线boy")}
                System.out.print("正常显示")
            }
        }
    }
    View Code

                总结:调用一个方法可能会发生一个异常-》自定义这个异常-》方法声明这个异常-》方法体写出是么情况下抛出这个异常

      (3)final可以释放代码资源

               try{

               }catch(){}

               finally{

                 //只有执行try时这里才始终要执行

               }    

    (4)权限修饰符: 权限修饰符就是控制被修饰的成员的范围可见性。

           

       (5)jar打包

               a.作用:1.方便用户快速运行一个项目

                          2.提供工具类以jar包形式给别人使用

    在解压文件中就可以看到这些工具类了,都是通过jar打包的

               b.用法:

                  jar cvf jar文件的名字 class文件或者文件夹

                  注意事项:

                              1.一个程序打包完后,需要在清单文件上指定入口类,格式:Mian-Class: 包名.类名

                              2.使用时,只能打开图像话界面,不能打开控制台程序

                                   例子:

    (6)Object类常用的方法:

                toString(); 返回该对象的字符串表示。 返回一个字符串用于描述该对象的。
                疑问: toString() 有何作用? 重写toString之后,我们直接输出一个对象的时候,就会输出符合我们所需求的格式数据;我们可以试下object.toString()看看结果:结果是一个类完整名+hashcode值

                equals(Object obj) 用于比较两个对象的内存地址,判断两个对象是否为同一个对象。

                hashCode() 返回该对象的哈希码值(大家可以把哈希码就 理解成是对象的内存地址)/


                java中的规范:一般我们重写了一个类的equals方法,我们都会重写它的hashCode方法。

                java是开源....源代码公开...

               查看源代码的方式:
                     方式一: 按住ctrl键,单击你需要看的源代码.

                     方式二:把光标移动到你需要查看代码处按下F3.

               为什么我们要查看源代码:
                    1,查看源代码可以了解别人是如何写出这个技术的,让我们了解的更加的深入。
                    2. 吸收大牛的思想。

               看源代码最忌讳的一点: 不要每行代码都弄懂是什么意思,能看个大概 猜出他意思就足矣。
               */

                /下面例子主要意图:
              我们要也可以重写Object父类的方法;
              重写时需要加个@Override;
             一般重写一个类的equals方法时,也重写其HashCode方法

                    class Person{

                         int id;

                         String name;

                         public Person(int id, String name) {
                         this.id = id;
                         this.name = name;
                    }

                   public Person() {
                   }

                   //目前我需要直接输出一个对象的时候,输出 的格式是: 编号:110 姓名: 狗娃 这种格式。 目前Object的
                   // toString方法无法满足子类的需求,那么这时候我们就应该对Object类的toString进行重写。
                  @Override
                  public String toString() {
                  return "编号:"+ this.id + " 姓名:"+this.name;
                  }


                   //为什么要重写:Object的equals方法默认比较的是两个对象的内存地址,我目前需要比较的是两个对象的身份证,所以Object类的equals方法不符合我                                     现在的需求。
                  @Override
                     public boolean equals(Object obj) {
                        Person p = (Person)obj;
                        return this.id== p.id;
                     }

                  @Override
                   public int hashCode() {
                       return this.id;
                    }


               }

    (7).StringBuffer
                当改变字符串内容时,采用StringBuffer能获得更好的性能
                如果需要频繁修改字符串 的内容,建议使用字符串缓冲 类(StringBuffer)
                StringBuffer:一个存储字符的容器
                面试题目:使用StringBuffer无参构造函数创建一个对象时,默认初始容量为多少?如果长度不够了自增长多少倍?
                StringBuffer底层是依赖一个字符数组才能存储数据的,初始容量16,如果长度不够了,自动增长1倍。
                具有增删改判断等方法。
                StringBuilder是被设计为StringBuffer的简易替换
                不是线程安全的在单线程中性能比StringBuffer高

                如果我们的程序是在单线程下运行,或者是不必考虑到线程同步问题,我们应该优先使用StringBuilder类;当然,如果要保证线程安全,自然非                           StringBuffer莫属了。
                StringBuilder实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer。

             

         

  • 相关阅读:
    嵌套类型返回错误解决办法(如迭代器的设计)
    UITableView的多选删除模式
    UITableView的编辑模式
    指针和引用初理解
    strstr()函数实现
    一句话的单词倒置
    字符串过滤程
    strcpy函数
    二叉排序树(Binary Sort Tree)
    二叉树插入操作
  • 原文地址:https://www.cnblogs.com/xiaoping1993/p/day04.html
Copyright © 2011-2022 走看看