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. 离线破win2003域账号密码(更新域数据库不在默认路径的情况)

    国内网站讲了许多方法,很多也讲得不清楚.我把我尝试成功的经验跟大家分享. 方法是按照tim的文章操作,链接如下: http://pauldotcom.com/2011/11/safely-dumpin ...

  2. 对libssh的golang 封装 ssh2go

    ssh2go 是对libssh的go语言绑定.libssh作为ssh的实现库,支持SSHv2和SSHv1的客户.服务端实现,通过libssh你可以远程执行程序.拷贝文件等等. ssh2go不像其他go ...

  3. RTSP,RTP,RTCP的区别

    下面的文章讲解的都非常详细,可以参考OpenRTSP的源码学习.这个是live555库里面的工具Demo http://www.360doc.com/content/12/0516/23/782850 ...

  4. Linux系统编程(37)—— socket编程之原始套接字

    原始套接字的特点 原始套接字(SOCK_RAW)可以用来自行组装IP数据包,然后将数据包发送到其他终端.也就是说原始套接字是基于IP数据包的编程(SOCK_PACKET是基于数据链路层的编程).另外, ...

  5. Java---设计模块(装饰模式)

    ★ 场景和问题 在不对原有对象类进行修改的基础上,如何给一个或多个已有的类对象提供增强额外的功能? ★ 引例 写一个MyBufferedReader类,使它能够对字符流(如FileReader.Inp ...

  6. Codeforces Round #301 (Div. 2) E . Infinite Inversions 树状数组求逆序数

                                                                    E. Infinite Inversions               ...

  7. JS点击按钮弹出窗口

    由于没有系统学习过JS,遇到一个需求:点击按钮,弹出一个独立的窗口. 在网上百度了一下,并没有找到满意的结果,最重要的是各种方法很复杂.最终,仔细研究了一下,原来只是需要只要一个简单的函数就能满足自己 ...

  8. jQuery简单的Ajax调用示例

    jQuery确实方便,下面做个简单的Ajax调用: 建立一个简单的html文件: <!DOCTYPE HTML> <html> <head> <script ...

  9. iOS语音识别,语音播报,文字变语音播报,语音变文字

    首先使用的是科大讯飞的sdk 1.语音识别部分 AppDelegate.m #import "AppDelegate.h" #import <iflyMSC/iflyMSC. ...

  10. Solr初步学习

    Solr采用Lucene搜索库为核心,提供全文索引和搜索开源企业平台,提供REST的HTTP/XML和JSON的API,如果你是Solr新手,那么就和我一起来入门吧!本教程以solr4.8作为测试环境 ...