Exception

1.java 异常是java提供的用于处理程序中错误(指在程序运行的过程中发生的一些异常事件)的一种机制

2.java程序的执行过程中如果发生异常事件则自动生产一个异常类对象,该对象封装了异常事件的信息并被提交给java运行时系统,这过程称为throw异常;

当java运行时系统接收到异常对象时会寻找能处理这一异常的代码并交其处理,这过程称为catch异常

 public class TestEx1 {
     public static void main(String[] args) {
         TestEx1 test = new TestEx1();

         //捕获异常
         try {
             test.m(0);
             System.out.println("a");    //不会被执行
         } catch(ArithmeticException e) {
             e.printStackTrace();
             //System.out.println(e);
         }

         //try{}里面包含可能会出错的代码,如果里面出错了,他会交给catch{}处理,不影响你之后的代码运行
         //但是如果你try{}里面有多行代码第一行,第二行,第三行,如果第二行出错了,第三行是不执行的
         //如果有finally{},finally里面代码是处理后事的。比如说,你try里面有操作工作流的,那么如果出错了fianlly
         //可以关闭工作流对象,避免浪费资源。finally{}是必须执行的,不管是出错了,还是不出错。
         System.out.println("b");    //会被执行

     }

     //声明该方法可能抛出的异常
     public void m(int j) throws ArithmeticException {
         //手动往外抛异常
         if(j == 0) {
             throw new ArithmeticException("分母不能为0");
28         }
29     }
30 }

3.在一个try语句块中,父类异常的捕获语句不可以写在子类异常捕获语句的上面

4.重写方法需要抛出与原方法相同的异常或者不抛出

5.自定义异常:

  -1 通过继承Exception类声明自己的异常类

  -2 在方法的声明部分用throws语句声明该方法可能抛出的异常

  -3 在方法适当的位置生成自定义异常的实例并用throw语句抛出

 public class TestEx3 {
     public static void main(String[] args) {
         TestEx3 t = new TestEx3();
         t.manager();
     }

     public void manager() {
         try {
             regist(-3);
         } catch(MyException e) {
             System.out.println("登记失败,出错类型码:" + e.getId());
             e.printStackTrace();
         }

         System.out.println("操作结束");
     }

     //在方法的声明部分用throws语句声明该方法可能抛出的异常
     public void regist(int num) throws MyException {
         //在方法适当的位置生成自定义异常的实例并用throw语句抛出
         if(num < 0) {
             throw new MyException("人数为负值,不合理", 3);
         }
         System.out.println("登记人数:" + num);
     }
 }

 //自定义异常,通过继承java.lang.Exception类声明自己的异常类
 class MyException extends Exception {
     private int id;

     public MyException(String message, int id) {
         super(message);
         this.id = id;
     }

     public int getId() {
         return id;
     }
 }

Array

 public class TestArr2 {
     public static void main(String[] args) {
         Date[] days = new Date[3];

         for(int i=0; i<days.length; i++) {
             days[i] = new Date(2016, 7, i+1);
         }

         for(int i=0; i<days.length; i++) {
             days[i].info();
         }
     }
 }

 class Date {
     int day;
     int month;
     int year;

     public Date(int year, int month, int day) {
         this.year = year;
         this.month = month;
         this.day = day;
     }

     public void info() {
         System.out.println("year:" + year + " month:" + month + " day:" + day);
     }
 }

例程内存分析

 public class TestArr10 {
     public static void main(String[] args) {

         int[][] arr3 = {{3, 4}, {4, 4, 5}, {1, 2}, {5, 6}};
         int[][] arr4 = new int[4][];

         System.arraycopy(arr3, 0, arr4, 0, arr3.length);
         arr4[3][0]= 100;

         for(int i=0; i<arr4.length; i++) {
             for(int j=0; j<arr4[i].length; j++) {
                 System.out.print(arr4[i][j] + " ");
             }

             System.out.println();
         }
     }
 }

内存图如下:

穿插一下选择排序

 import java.util.*;

 public class $TestArr4 {
     public static void main(String[] args) {
         int[] arr = new int[args.length];

         //将从命令行键入的9个值转换为int并赋给int数组
         for(int i=0; i<args.length; i++) {
             arr[i] = Integer.parseInt(args[i]);
         }

         sort(arr);
         print(arr);
     }

     public static void print(int[] a) {
         for(int i: a) {
             System.out.print(i + " ");
         }
     }

     public static void sort(int[] a) {
         //排序
         //Arrays.sort(arr);

         //初版.每一趟排序中进行了多次交换显得没效率
         /*for(int i=0; i<a.length; i++) {
             for(int j=i+1; j<a.length; j++) {
                 if(a[i] > a[j]) {
                     int temp = a[i];
                     a[i] = a[j];
                     a[j] = temp;
                 }
             }
         }*/

         //★改进.
         int k = 0, temp = 0;

         for(int i=0; i<a.length; i++) {
             k = i;
             for(int j=k+1; j<a.length; j++) {
                 if(a[k] > a[j]) {
                     k = j;
                 }
             }

             if(k != i) {
                 temp = a[i];
                 a[i] = a[k];
                 a[k] = temp;
             }
         }
     }
 }

简单分析一下:

改进前的方法的思路(讨论的是第一躺排序),第一个数依次和后面的每一个元素比较大小,若第一个数小于该元素则交换位置若大于则继续和下一个数字比较,可想而知,确定最小的数并将其放置到第一位可能会有多次交换。那么,能不能把小于第一个数字的数做个标记,然后用这个标记的数和后面的继续比较,若还有更小的就标记更小的,重复上个步骤,等到全部比较完了后,再把这个标记数和第一个数交换,不就可以达到同样的目的了吗,而且就只交换了一次。这也就是改进后的排序的思路了。

Java Se 基础系列(笔记) -- Exception && Array的更多相关文章

  1. Java Se 基础系列(笔记) -- OO

    记录所学到的关于Java Se的一些基础知识 1.对象是通过“属性(成员变量)”和“方法”来分别对应事物所具有的静态属性和动态属性 2.类(Class)是对某一类事物的抽象,对象(Object)为某个 ...

  2. Java Se 基础系列(笔记) -- BasicDataType

    java.lang.String类代表不可变的字符序列 String类常用方法:1.public char charAt(int index); -- 返回下标为index的字符 2.public i ...

  3. Java SE 基础:注释

    Java SE 基础:注释 一.注释定义 用于解释说明程序的文字. 二.注释的作用 1.解释说明程序,提高程序的可读性 2.可以帮助我们调试程序:通过注释代码块,检测错误位置 三.格式 1.单行注释 ...

  4. Java SE 基础:标识(zhì)符

    Java SE 基础:标识(zhì)符 一.标识符定义 标识符,就是给类.接口.方法.变量等起名字时的字符序列 二.组成规则与注意事项 1.组成规则 英文大小写字母 数组 $ 和 _ 2.注意事项 不 ...

  5. Java SE 基础:常用关键字

    Java SE 基础:常用关键字 常用关键字表

  6. Java SE基础知识

    Java SE面试题 目录 Java SE基础 基本语法 数据类型 关键字 面向对象 集合 集合类概述 Collection接口 List Set Map Java SE基础 基本语法 数据类型 Ja ...

  7. 《写给大忙人看的java se 8》笔记

    现在才来了解java8,是不是后知后觉了点? 新的编程技术,个人不喜欢第一时间跟进. 待社区已有实践积淀再切入似乎更划算些? 一点点精明的考虑. 不多说,上代码. //读<写给大忙人看的java ...

  8. Java SE 基础知识(一)

    一.基础知识 1. Java SE : Java Standard Edition Java ME : Java Micro Edition Java EE : Java Enterprise Edi ...

  9. [零基础学JAVA]Java SE基础部分-01. Java发展及JDK配置

    转自:http://redking.blog.51cto.com/27212/114976 重点要会以下两个方面: 1. 抽象类与接口 2. API==>类集 这是两个最重要部分,这两个部分理解 ...

随机推荐

  1. python内置函数(4)

    12.pow:      >>> 2**10 1024 >>> pow(2,10) 1024 13.repr():忽略.. 14.reversed():反转.. 1 ...

  2. Linux_service cloudera-scm-server start failed

    see log : /var/log/cloudera-scm-server/cloudera-scm-server.log

  3. 转:对于linux下system()函数的深度理解(整理)

    这几天调程序(嵌入式linux),发现程序有时就莫名其妙的死掉,每次都定位在程序中不同的system()函数,直接在shell下输入system()函数中调用的命令也都一切正常.就没理这个bug,以为 ...

  4. post 相比get 有很多优点,为什么现在的HTTP通信中大多数请求还是使用get?

    好吧, 除了哲学方式的回答以外,下面是一个浏览器从业人员的看法 事实上GET 和 POST 在实践上面有非常大的区别,这两种方法在语义上面并非能互相取代. POST 是否比 GET 安全 是的, PO ...

  5. HTTP response codes

    面试被问起了413和503,我觉得也是够BT的,能问出这种无聊的问题.很多返回码几乎很难遇到,不过还是把MDN上很好的描述转过来作为一个reference. HTTP协议状态码表示的意思主要分为五类 ...

  6. HDU_2043——判断密码是否安全

    Problem Description 网上流传一句话:"常在网上飘啊,哪能不挨刀啊-".其实要想能安安心心地上网其实也不难,学点安全知识就可以.首先,我们就要设置一个安全的密码. ...

  7. cpppp

  8. 前端input选中状态时的蓝框

    input标签在选中状态时,我们的浏览器不同时,会有不同效果. 一般我们chrome时可能会没有这个效果,但是如果是safari时,这个效果就... 这时为了达到效果统一,我们不得不去掉这个蓝框,就要 ...

  9. [MySQL CPU]线上飙升800%,load达到12的解决过程

    接到报警通知,负载过高,达到800%,load也过高,有11了. MySQL版本号为5.6.12-log 1 top 之后,确实是mysqld进程占领了全部资源. 2 查看error日志,无不论什么异 ...

  10. 数据库(SQLITE3函数总结): sqlite3_open, sqlite3_exec, slite3_close,sqlite3_prepare_v2,sqlite3_column_text,

    Sqlite3 的确非常好用.小巧.速度快.近期研究它,有一些收获,这里把我对 sqlite3 的研究列出来,以备忘记. 导入SQLLite library并引入头文件. libsqlite3.dyl ...