目录
一、方法
1、自定义方法
和C语言相比,java中所谓的自定义方法其实就是C中的自定义函数,语法也很像,只不过方法头中多了一个修饰符:
public static int sum(int a1,int a2) //public static即为修饰符
{
int result = 0;
for(int i = a1;i <= a2;i++)
{
result += i;
}
return result;
}
和C相同,void方法不返回任何值。return语句对于void方法不是必须的,但它能用于终止方法并返回到方法的调用者(比如当遇到无效值时,可以用于结束方法),语句为:
return;
2、 方法重载和方法重写
两者的相同在于方法之间方法名相同,不同在于:
重载:方法名相同,而参数列表、返回类型可以不相同
重写:方法名,参数列表,返回类型必须相同
详情参考:
3、方法抽象
开发软件的关键就在于应用抽象的概念。方法抽象通过将方法的使用和它的实现分离来实现。
封装(信息隐藏):用户在不知道方法实现的过程的情况下,可以使用方法。方法的实现细节封装在方法内,对使用用户是隐藏的。(黑盒子)
二、一维数组
-
声明数组变量
与C不同在与,其括号跟在元素类型后:
声明格式:元素类型[ ] 数组引用变量(数组名);
例如:double[ ] myList ,即为一个名为myList的double类型数组
-
创建数组并赋值
创建格式:数组名 = new 元素类型[数组大小];
即:myList = new double[10];
1、“声明变量、创建数组、数组赋值给变量”合三为一:
double[] myList = new double[10];
2、foreach循环
一个简便的for循环,可以不使用下标变量就可以顺序地遍历整个数组。
语法:for( 变量a数据类型 变量a:数组 ) { ... }
(注意变量a要与数组元素数据类型相同)
for(double a:myList) //对myList中的每个元素a进行以下操作
{
System.out.println(a); //打印操作
}
3、复制数组
复制,不就是等价吗,我直接就是一个list1 = list2。但这并不能将list1引用的数组内容赋值给list2,它只会将list1的引用值赋值给list2。而list2的引用值此时没了存在的意义,就会被回收掉:
Java中,赋值语句不能复制数组!那么复制数组有三种方法:
- 用循环语句一个个复制数组元素
- 用System类中的静态方法arraycopy
- 用clone方法
这里着重介绍第二种方法: arraycopy方法
System.arraycopy(源数组a,a的起始位置,目标数组b,b的起始位置,复制长度)
注意该方法没有给目标数组分配内存空间,复制前记得创建目标数组并给它分配内存。
4、数组传参
看下面这段代码:
在方法m中,明明都把x传给了number,并且把number赋值为1001了,但最终x输出结果依旧是1。相同的方法y却被成功赋值。
这是因为x传递基本数据类型值,而y传递数组引用变量。
由上图可以看得出来,由于y传递数组的引用值,使得y和numbers都指向堆中相同的一块内存,这样不管y和numbers中谁变了,另一个变量都会随之改变。而x传给number的是基本数据类型的值,他俩的内存位置相对独立。所以在传参过程中,仅仅是把x的值赋给了number,而改变number的值却无法反过来改变x。
5、可变长参数列表
把类型相同但数目可变(对于数组大小更加灵活)的参数传递给方法,而方法中的参数声明如下:
类型名 ... 参数名
package PACKAGE_NAME;
public class EXERCISE {
public static void main(String[] args)
{
printMax(34,3,5,6.7,33.44); //传递一个可变长数组列表给数组numbers
printMax(new double[]{1,2,3}); //传递一个数组
}
public static void printMax(double...numbers) //参数声明
{
if(numbers.length == 0)
{
System.out.println("No argument passed");
return;
}
double result = numbers[0];
for(int i = 1;i < numbers.length;i++)
{
if(numbers[i]>result)
{
result = numbers[i];
}
}
System.out.println("The max number is " + result);
}
}
6、Arrays类
java.util.Arrays类包含了很多处理数组的方法,如打印、查找、排序、填充等。
-
数组由小到大排序:sort方法或paralleSort方法
这两个方法都用于对数组进行升序排序,区别在于paralleSort更适合元素较多数组的排序,具体参考:http://t.csdn.cn/lBV25
同时也可以选择全部元素排序和部分元素排序,具体使用如下:
package PACKAGE_NAME;
public class EXERCISE {
public static void main(String[] args)
{
//******全排序******
int[] number = {1,6,4,3,7,5,4,0};
java.util.Arrays.sort(number);
/*for(int i=0;i<=number.length;i++)
{
System.out.print(number[i]);
}这里的老方法用下面这段替代*/
for(int a:number)
{
System.out.print(a);
}
System.out.println("\n");
//******部分排序******
char[] chars = {'a','A','4','F','D','p'};
java.util.Arrays.sort(chars,1,3); //下标1-3部分排序
for(char b:chars)
{
System.out.print(b);
}
}
}
-
数组二分查找:binarySearch方法
可以用binarrySearch在数组中使用二分法查找关键字,结果返回数组元素下标:
package PACKAGE_NAME;
public class EXERCISE { //类
public static void main(String[] args) //main方法
{
int[] List = {1,45,3,36,34,6,5,9,77,2};
java.util.Arrays.sort(List);
System.out.println(java.util.Arrays.binarySearch(List,77));
//输出结果为9
}
}
-
检测两数组是否严格相等:equals方法
可用于检测两数组是否完全相同,返回ture或false:
package PACKAGE_NAME;
public class EXERCISE {
public static void main(String[] args)
{
int[] list1 = {1,2,3,4};
int[] list2 = {1,2,3,4};
int[] list3 = {1,2,3};
System.out.println(java.util.Arrays.equals(list1,list2));
System.out.println(java.util.Arrays.equals(list2,list3));
/*
true
false
*/
}
}
-
填充整个数组或部分数组:fill方法
填充即为替换。可选择全部填充和部分填充,具体操作如下:
package PACKAGE_NAME;
public class EXERCISE {
public static void main(String[] args)
{
//全填充
int[] list1 = {1,2,3,4};
java.util.Arrays.fill(list1,5);
for(int a:list1)
{
System.out.print(a); /* 5555 */
}
System.out.println("\n");
//部分填充
int[] list2 = {1,2,3,4};
java.util.Arrays.fill(list2,0,2,5);
for(int a:list2)
{
System.out.print(a); /* 5534 */
}
}
}
-
一步打印数组中的所有元素:toString方法
上面代码段中使用完方法后想打印当前的数组元素,还需要很麻烦地建一个for循环遍历数组。现在toString方法可以直接返回一个字符串,而字符串就是该数组中的所有元素:
int[] list1 = {1, 2, 3, 4};
System.out.println(java.util.Arrays.toString(list1));
/* 打印结果:[1, 2, 3, 4] */
三、二维数组
1、二维数组的长度
和C相同,Java中二维数组的长度可以使用 x[0].length 来获取:
2、不规则数组
可以使用以下方法创建不规则数组:
使用 new int[5][ ] 创建数组时,必须指定第一个下标。语法new int[ ][ ] 是错误的。