第十二天:数组,异常,常用类,正则表达式

1:算法。计算的方法。每每到了数组都要讲下经典的排序和查找

1.1:排序(以下排序主要就是第二层的循环条件差别)

1.1.1:冒泡排序:相邻2个数进行比较将最大的值放到右边。所以每一轮排序都能找到一个最大的放在右边,已经在右边的就不用再比较了,所以比较的次数也会每次-1

 1 public static int [] sort(int [] array){
 2         for(int i=0; i<array.length-1; i++){
 3             for(int j=0; j<array.length-i-1; j++){
 4                 if(array[j]>array[j+1]){
 5                     int temp = array[j];
 6                     array[j] = array[j+1];
 7                     array[j+1] = temp;
 8                 }
 9             }
10         }
11         return array;
12     }

1.1.2:选择排序:假设第一个数是最小的,将后面的数跟第一个比较,如果小则交换。第一轮比较完则可以找到最小的。再假设第二个数是最小的,将后面的数跟第二个数进行比较。

 1 public static int [] sort2(int[] array){
 2         for(int i=0; i<array.length; i++){
 3             for(int j=i; j<array.length-1; j++){
 4                 if(array[i]>array[j+1]){
 5                     int temp = array[i];
 6                     array[i] = array[j+1];
 7                     array[j+1] = temp;
 8                 }
 9             }
10         }
11         return array;
12     }

1.1.3:插入排序:将后面的数插入到已经排好序的序列中。

 1 public static int[] sort3(int [] array){
 2
 3         for(int i=0; i<array.length; i++){
 4             for(int j=0; j<i; j++){
 5                 if(array[i]<array[j]){
 6                     int temp = array[i];
 7                     array[i] = array[j];
 8                     array[j] = temp;
 9                 }
10             }
11         }
12         return array;
13     }

1.2:查找

1.2.1:顺序查找(按顺序一个个对比)

1.2.2:二分查找

 1 //二分查找
 2     public static int search1(int [] array, int a){
 3
 4         int mid = -1;
 5         int index = -1;
 6         int low = 0, high = array.length-1;
 7         while(low<=high){
 8             mid = (low+high)/2;
 9             if(a>array[mid]){
10                 low = mid-1;
11             }else if(a<array[mid-1]){
12                 high = mid+1;
13             }else{
14                 index = mid;
15                 break;
16             }
17         }
18
19         return index;
20     }

1.3:除去数组中的重复元素

 1 /*
 2      * 去除重复元素
 3      */
 4     public static int[] removeRepeatNum(int [] array){
 5         if(array==null){
 6             return null;
 7         }
 8         Arrays.sort(array);//先对传入的数组进行排序
 9         int len = 1;//新数组的长度,初始是1
10         //比较相邻的两个数组是否相等
11         for(int i=1; i<array.length; i++){
12             if(array[i-1]!=array[i]){//如果前后两个数不相等,则不重复个数+1
13                 len ++;
14             }
15         }
16
17         int[] array2 = new int[len];//新建一个数组,数组的大小即为不重复元素的个数
18         int j = 0;//array2 的下标
19         for(int i=1; i<array.length;i++){//遍历array
20             if(array[i-1]!=array[i]){//如果array相邻两个数不等,就将前面的数赋给array2
21                 for(; j<len-1;){
22                     array2[j] = array[i-1];
23                     j++;
24                     break;
25                 }
26             }
27             //由于循环赋值时,最后一个数没有涉及到,所以另外处理
28             if(i==array.length-1){
29                 array2[len-1] = array[i];
30             }
31         }
32
33         return array2;
34
35     }
36     

2:Arrays类:专门对数组进行操作的类。里面的方法都是静态方法。

排序:Arrays.sort(要排序的数组);     查找:Arrays.binarySearch(数组, 要找的数);

3:可变参数

当写一个方法的时候,只能确定数据类型,不能确定参数的个数,这个时候可以用可变参数。

可变参数:  类型... a:a表示一个数组,

允许参数列表中同时存在其他参数和参数列表, 可变参数必须放在参数列表的最后一个,也可以说参数列表后面不能再有参数了。

比如:

public int add(int... a){

}

调用的时候可以这样做:

add(1,2)

add(1,2,3,4)

4:二维数组:数组中的数又是一个数组。

4.1:二维数组的定义。

1:int[][]  array = new int[5][3];

2:int[][]   array = new int [3][] ;第二个可以先不指定大小

array[0] = new int[2];

array[1] = new int[3];

array[2] = new int[4];

4.2 二维数组的遍历:先把一维的数组遍历出来,在遍历一维的数组。因为二维数组是数组中的数组,所以要用到两层循环来遍历

5:异常

5.1:异常:不正常。

如果发生了异常,则程序会提前终止。结束运行。

5.2:异常体系

Throwable

Error                                              Exception

Error:错误就像人得了绝症,就不能治疗了。Error的子类的名字在后面有一个Error的单词。错误只能修改代码,不能用代码来处理异常。

Exception:得了一般的病了,可以治疗了。凡是Exception的子类都带有Exception单词。

5.3:Throwable

1:getMessage()  :获得错误的信息

2:printStackTrace( ) :打印出堆栈的信息:异常的名字,异常的信息,异常的位置。

jvm的处理异常的方式是调用printStackTrace()方法(默认的)

5.4:异常的处理方式

5.4.1:try  :方法内部自己处理。

try{

有可能出现异常的代码

}catch(){

发生异常后会执行的代码

}catch(){//如果写多个catch。应该先捕获子类的异常,再捕获父类的异常。

//正常情况下,抛什么异常就捕获什么异常。

}

finally{

不管是否发生异常,都会执行的代码,一般都是释放资源。

finally可有可无。

}

5.4.2:throws:抛出异常。后面接的是异常类的名。

后面可以接多个异常类名,中间用,隔开。

定义方法的时候,告诉调用者这个方法调用后有可能发生哪些异常异常,让调用者去处理这些异常。可以try…catch(){},也可以throws,一定要有其中一个。

5.4.3:什么时候该throws,什么时候该try?

自己能处理的就尽量try,否则就throws.

5.4.4:异常的种类:

非受检异常==运行时异常:指程序的逻辑错误,RuntimeException以及RuntimeException的子类。程序可做处理,也可以不做处理。正常情况下应该不要处理,让错误暴露出现,这样程序员就可以根据错误来修改代码。

受检异常==编译异常==非运行时异常:必须进行处理的异常,这种错误是因为用户的操作而出现的异常。对这类异常程序员必须进行处理。

如果方法内有可能发生RuntimeException或者它的子类的异常,那么方法可以处理异常,也可以不处理异常。调用者可处理可不处理。

如果方法声明的是非RuntimeEception异常,那么调用者就必须处理异常。

5.4.5:throws和throw的区别

1:throws后面接的是异常类名,而throw接的是异常的对象。

2:throws后面可以写多个异常类名,而throw只能抛出一个异常对象。

3:throw是写在方法内主动抛出一个异常对象,抛给调用者。而throws是写在方法的声明上,告诉调用者方法有可能出现的异常。

4:如果方法内有throw。并且throw后面的对象是非RuntimeException异常,那么方法要么在声明上throws,要么在方法内进行try.

5.4.6:方法重写的注意事项。

子类重写父类的方法时,如果父类抛出了异常,子类要么抛跟它一样的异常,要么不抛,或者抛父类异常的子类。如果有可能出现跟父类不一样的异常,那么就只能try.也就是说子类不能抛比父类多或者范围大的异常。发生多态时,如果子类抛出的异常和父类抛出的异常一致,那么调用重写方法时就要在调用的方法上抛出大于或等于父类异常的异常或者用try…catch处理。

5.4.7:自定义异常>>day0728有代码

5.4.7:常见的一些异常:

      算术异常:ArithmeticException,比如除数为零

      下标越界异常:IndexOutOfBoundsException,比如数组下标大于数组的长度了

      无法找到类异常:ClassNotFoundException,比如你调用了有参构造方法但是你没有写这个够杂方法

      输入输出异常:IOException,一般处理输入输出流引发的

      类型转换异常:ClassCastException

      空指针异常:NullPointerException

6.常用的一些类---详细方法可以看java帮助文档

以下的类也不能说是常用的,知识有几个用得真的是很多的,例如String,Math和包装类

6.1 字符串序列

    6.1.1 String 字符串:不可变字符序列

    6.1.2 StringBuffer 字符串缓冲类:线程安全的可变字符序列。 由于线程安全,所以效率不高。

    6.1.3 StringBuilder 字符串缓冲类:线程不安全的可变字符序列。由于线程不安全,所以效率高

    StringBuilder跟StringBuffer 的方法一样。 如果对字符串进行追加或者删除操作,那么建议用StringBuilder.

    StringBuffer reverse();字符串反转

6.2 包装类,每种基本数据类型java都提供了对应的一个类

6.2.1 Integer-->int

          Integer i = new Integer(4);

Integer i = 4; //自动装箱

int j = I; //自动拆箱

6.2.2 Byte -->byte

6.2.3 Short -->short

6.2.4 Long -->long

6.2.5 Float-->float

6.2.6 Double -->doule

6.2.7 Character -->char 有判断是否为大小写,是否为数字的方法

6.2.8 Boolean --> Boolean

      除了Character 没有parseXXX( )方法外,其他都有。xxxValues( )方法是所有包装类都有的

6.3 数学类Math

数学类中的方法全部是静态方法,可以静态导入。只要在所在的类中导包的位置上添加语句:import static java.util.* 即可在调用Math方法时不用写类名,直接写方法就行了

6.4 随机类Random

例如:Random random = new Random();

random.nextInt(n); 可以产生一个0-n(n必须是正数)之间的随机数,包括0但不包括n。很多应用程序会发现 Math.random() 方法更易于使用

6.5 系统类System:能获取系统的一些属性。

6.7 应用程序类 Runtime

此类没有构造方法

Runtime runtime = Runtime.getRuntime();

runtime.exec(可执行文件路径);//可以打开可执行文件,如果路径后面加一个空格再加完整路径则可以使用给可执行文件打开该文件

  6.8 日期类 Date

这个是在java.util包中的,很多方法已经过时,而且很多方法都在日历类中实现了

  6.9 日历类 Calender :日历类中应该留意下的就是月份的计算是从0开始的即十二个月表示是0-11.

6.10 格式化类 Format

最为常用的是 DateFormat 这个子类中的SimpleDateFormat 类

   6.11 Arrays数组

排序sort、查找binarySearch

7. 枚举(Enum)

    7.1 凡是枚举里面的常量,会自动加上public static final,枚举类中的构造方法都是私有的。枚举类型的对象只能在这个类里面定义,可以在switch语句中使用

7.2 创建:

public enum Season {

春,夏,秋,冬;

}

8. 正则表达式

字符类

[abc] a、b 或 c(简单类)

[^abc] 任何字符,除了 a、b 或 c(否定)

[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)

[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)

[a-z&&[def]] d、e 或 f(交集)

[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)

[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)

预定义字符类

. 任何字符(与行结束符可能匹配也可能不匹配)

\d 数字:[0-9]

\D 非数字: [^0-9]

\s 空白字符:[ \t\n\x0B\f\r]

\S 非空白字符:[^\s]

\w 单词字符:[a-zA-Z_0-9]

\W 非单词字符:[^\w]

边界匹配器

^ 行的开头

$ 行的结尾

\b 单词边界

\B 非单词边界

\A 输入的开头

\G 上一个匹配的结尾

\Z 输入的结尾,仅用于最后的结束符(如果有的话)

\z 输入的结尾

Greedy 数量词

X? X,一次或一次也没有

X* X,零次或多次

X+ X,一次或多次

X{n} X,恰好 n 次

X{n,} X,至少 n 次

X{n,m} X,至少 n 次,但是不超过 m 次

时间: 2024-10-28 14:26:19

第十二天:数组,异常,常用类,正则表达式的相关文章

数组和常用类

声明数组的两种方式: 1.声明的时候赋值: 例如:int[] socre = {60,38,92,51} ; int[] score = new int[]{60,38,92,51}; 2.声明之后再赋值: int[] socre = new int[4]; 3.注意点:数组声明的时候要告诉数组长度,下标是从0开始,到数组长度-1结束 4.二维数组的声明:int[][] socre = {{60,38,24}{15,28,92},{83,67,21}}; 牢记外面控制行,里面控制列 5.Arry

异常,常用类,集合

异常: 异常(Exception)是程序在执行过程中所产生的问题: 异常处理是每个程序员都必须面对的: 异常分类: 1.检查异常(checked): 2.运行时异常(unchecked): 3.错误(事实上错误不算异常,但却是用户或程序员所无法控制的问题) 异常处理方式: 1.捕获这个异常,不让他沿着调用栈继续向下抛出: 2.捕获这个异常,并继续向下抛出: 3不捕获这个异常,从而导致method()方法从调用栈中被弹出,异常对象继续抛给调用栈下面的main()方法; Thowable类: Tho

处理异常、常用类、反射、类加载与垃圾回收、java集合框架

异常处理概述 检查异常:检查异常通常是用户错误或者不能被程序员所预见的问题.(cheched) 运行时异常:运行时异常是一个程序在运行过程中可能发生的.可以被程序员避免的异常类型.(Unchecked)RentimeExeption 错误:实际上,错误根本不是异常,但却是用户或程序员所无法控制的问题. 异常是程序在执行过程中所产生的问题.JVM发生了内存溢出等... 异常处理:method()方法有三种 1 捕获这个异常,不让他沿着调用栈继续向下抛出 2 捕获这个异常,并继续向下抛出 3 从而导

异常捕获与常用类

异常捕获 异常分为 编译异常,运行时异常和系统错误三种 1.编译异常,这样的异常继承于Excetpion,就是在编译期间需要检查,如果该异常被throw,那么在该异常所在的method后必须显示的throws,调用该method的地方也必须捕获该异常,否则编译器会抛出异常 2.运行时异常,就是在运行期间系统出现的异常,该类异常继承于RuntimeException,该类异常在编译时系统不进行检查,NullPointerExcetpion,NumberFormatException. 3.系统错误

Java Arrays类对数组的常用操作

1.数据的遍历 public class TestClass { public static void main(String[] args) { /*二维数组,每一维可以不一样*/ int a[][] = new int[][]{{1,2,3},{4,5,6},{8,9,10,7}}; Arrays.sort(a[2]); for(int i=0; i<a.length; i++) { for(int j=0; j<a[i].length; j++) { System.out.println

2015-08-06 异常、常用类

异常:五个关键字 和 两个结构:先捕获小异常再捕获大异常 两个结构: 1. Throwable Error 表示错误 Exception 异常 2.Exception RuntimeException(包括其子类) 非RuntimeException(Checked异常) 五个关键字: try.catch.finally.throws.throw 1 try{ 2 3 //存放可能出现异常代码 4 }catch(异常类 变量) 5 { 6 处理异常 7 }finally{ 8 //最后会执行的代

Java基础 —— Java常用类

Java常用类: java.lang包: java.lang.Object类: hashcode()方法:返回一段整型的哈希码,代表地址. toString()方法:返回父类名+"@"+哈希码(一般用于覆盖). equals()方法:返回"=="操作的布尔值(一般用于覆盖). finalize()方法:用于对象的销毁(不受人为控制,由JVM调用,遵从垃圾回收机制). clone()方法:用于对象之间的拷贝(深拷贝). getClass()方法:返回对象的字节码文件对

异常处理、常用类、Java集合框架、反射

异常处理: 1.  异常:程序在执行过程中所产生的问题. 异常的三种类:①检查异常:又叫checdked异常或者受检异常.通常是用户错误或者不能被程序员所预见的问题.检查异常需要被解决之后才能通过编译. ②运行时异常:程序在运行过程中可能发生的.可以被程序员所避免的异常类型. ③错误:事实上错误不是异常,但却是用户和程序员无法控制的问题. 2.  异常的控制流程: 异常是被一个方法抛出的对象. (1) 处理异常的三个方法:①捕获这个异常,不让它沿着调用栈继续向下抛. ②捕获这个异常,并继续向下抛

第9篇-JAVA面向对象-常用类Ⅴ

第9篇-JAVA面向对象-常用类Ⅴ 每篇一句 :巨轮寻深水而航行 初学心得: 没有胆大的猜测就没有伟大的发现 (笔者:JEEP/711)[JAVA笔记 | 时间:2017-04-13| JAVA面向对象 Ⅴ] 1.JAVA Scanner类 java.util.Scanner 是 Java5 的新特征,读者可以通过 Scanner 类来获取用户的输入 创建 Scanner 对象的基本语法格式: Scanner s = new Scanner(System.in); 使用 next 方法代码: 1

JAVA异常处理、常用类、反射、集合

异常 异常:在Java中是指被一个方法抛出的对象. 分类:检查异常.运行时异常.错误 运行时异常(uncheckd):RuntimeException和其子类 检查异常(checkd/搜检异常):指Exception和其子类,且不是RuntimeException的子类:它必须经过处理才会找到 语法: try{ //被保护的代码 }catch(异常的名称 e1){ //捕获块 } 注意:应先捕获特殊再捕获一般异常:try没有出现异常catch将不会执行 异常处理的三种选择: 1)捕获这个异常,不