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. Applet: 用HTML调用Applet的几个注意事项

    问题:HTML找不到java class. 首先,如果xxx.java文件与HTML文件在同一目录下,直接运行cmd-javac 该 xxx.java文件,生成xxx.class文件.HTML中的&l ...

  2. Qt中如何固定窗口的大小?

    这个是从网上转载过来的,我第一次看到的在如下网页:http://blog.csdn.net/cgb0210/article/details/5712980  这里我记录一下,留以后查阅. 一种方法是设 ...

  3. C语言学习笔记--指针与字符串

    字符类型 char(character)是一种整数,也是一种特殊的类型:字符.这是因为 ① 用单引号表示的字符字符字面量:‘a’,'1' ②‘’也是一个字符 ③printf和scanf里用%c来输入. ...

  4. DBUtils框架

    一.O-R Mapping 简介    一]概念:可以理解为对象和数据库的映射.    二]常用O-R Mapping映射工具        1)Hibernate(全自动框架)        2)l ...

  5. Acdream Mengzhu

    http://acdream.info/problem?pid=1006 #include <cstdio> #include <cmath> #include <cst ...

  6. Largest product in a series

    这个我开始理解错了,算错了. 我以为是求连续5个数的最大值,结果,是连接5个数相乘的最大值. 英语不好,容易吃亏啊. Find the greatest product of five consecu ...

  7. 《OpenCL异构计算》新版中译本派送中!

    <OpenCL异构计算1.2>新鲜出炉,目前市面上仍一书难求!我们已向清华出版社订购到第一批新书.关注异构开发社区,积极参与,就有可能免费获取新书! 1.如果您异构社区的老朋友,请关注:1 ...

  8. uniq 命令

    uniq 命令 文字 uniq是LINUX命令 用途 报告或删除文件中重复的行. 语法 uniq [ -c | -d | -u ] [ -f Fields ] [ -s Characters ] [ ...

  9. cf500D New Year Santa Network

    D. New Year Santa Network time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  10. localStrorage、 sessionStorage 、cookie

          HTML5中增加了两种全新数据存储方式:Web Storage和Web SQL Database. 前者可用于临时或永久保存客户端的少量数据:后者是客户端本地化的一套数据库系统,可将大量数 ...