java学习之路 之 面向对象编程-main方法的语法、数组排序、操作数组的工具类、数组操作常见问题

时间:2022-09-03 14:28:12
 理解main方法的语法
由于java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是public,又因为java虚拟机在执行main()方法时不必创建对象,所以该方法必须是static的,
该方法接收一个String类型的数组参数,该数组中保存执行java命令时传递给所运行的类的参数(命令行参数)。

命令行参数用法举例:
public class CommandPara {       
public static void main(String[] args) {
for ( int i = 0; i < args.length; i++ ) {
System.out.println("args[" + i + "] = " + args[i]);
}
}
}

编译:javac CommandPara.java
运行:java CommandPara  lisa  bily Brown
运行结果:args[0] = lisa
      args[1] = bily
      args[2] = Brown 

体会可变个数的形参:
//下面采用数组形参来定义方法
public static void test(int a ,String[] books);
//以可变个数形参来定义方法
public static void test(int a ,String…books);

说明:
1.可变参数:方法参数部分指定类型的参数个数是可变多个
2.声明方式:方法名(参数的类型名...参数名)

3.可变参数方法的使用与方法参数部分使用数组是一致的4.方法的参数部分有可变形参,需要放在形参声明的最后

数组排序:
插入排序:直接插入排序、折半插入排序、Shell排序
交换排序:冒泡排序、快速排序(或分区交换排序)
选择排序:简单选择排序、堆排序
归并排序:
基数排序:
具体请参考数据结构

排序方法的选择:
(1)若n较小(如n≤50),可采用直接插入或直接选择排序。    
当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插入,应选直接选择排序为宜。
(2)若文件初始状态基本有序(指正序),则应选用直接插入、冒泡或随机的快速排序为宜;
(3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。

冒泡排序:
排序思想:
相邻两元素进行比较,如有需要则进行交换,每完成一次循环就将最大元素排在最后(如从小到大排序),下一次循环是将其它的数进行类似操作。

数组排序:
java.util.Arrays类的sort()方法提供了数组元素排序功能:

import java.util.*;

public class Sort {
public static void main(String[] args) {
int [] number = {5,900,1,5,77,30,64,700};//静态声明数组
Arrays.sort(number);
for(int i = 0; i < number.length; i++)
System.out.println(number[i]);
}
}

操作数组的工具类:Arrays
java.util.Arrays类包含了用来操作数组(比如排序和搜索)的各种方法。Arrays拥有一组static方法。
equals():比较两个array是否相等。array拥有相同元素个数,且所有对应元素两两相等。
fill():将值填入array中。 
sort():用来对array进行排序。 
binarySearch():在排好序的array中寻找元素。   
另:System.arraycopy():array的复制。

数组操作常见问题:
数组脚标越界异常(ArrayIndexOutOfBoundsException)
int[] arr = new int[2];
System.out.println(arr[2]);访问到了数组中的不存在的脚标时发生。
空指针异常(NullPointerException)
int[] arr = null;System.out.println(arr[0]);
arr引用没有指向实体,却在操作实体中的元素时。