一,逻辑控制
JAVA中的for循环,while循环,swich语句等于C语言的使用方法基本一致,要强调有两点:
1. while,for等循环中的控制条件必须是布尔表达式,否则报错,本质上还是布尔类型无法与其他类型进行转换,例如:
2. switch语句中的switch()的括号中只能是以下类型:
基本类型:byte、char、short、int,注意不能是long,float,double类型。
引用类型:String常量串、枚举类型。
否则会报如下错误,例如:
二,方法的创建与使用
2.1方法的模板
JAVA中的方法就是C语言中所说的函数,但JAVA中的方法定义比C语言更加复杂,模板如下:
修饰符 返回值类型 方法名称([参数类型 形参 ...]) {
方法体代码;
[return 返回值];
}
这里的修饰符指的是:访问限定符和静态修饰符(初识阶段先使用 public static修饰),其他与C语
言相同。例如:
public class Test {
public static int max(int a, int b){
int c = a > b ? a : b;
return c;
}
public static void main(String[] args) {
int ret = max(1,2);
System.out.println("较大值为:" + ret);
}
}
2.2方法的重载
那么什么是方法的重载?在JAVA中如果两个方法的方法名相同但方法的参数列表不同(与返回值类
型无关),那么在这两个方法之间构成方法的重载。这里说的参数列表不同指的是:1.参数的数量
不同 2.参数的类型不同 3.参数的顺序不同,以上三个条件至少满足一个就行。例如:
public class Test {
//sum构成重载
public static int sum(int a, int b){
return a + b;
}
//参数的类型不同
public static double sum(double a, double b){
return a + b;
}
//参数的数量不同
public static int sum(int a, int b, int c){
return a + b + c;
}
//mul构成重载
//参数的顺序不同
public static double mul(double a, float b){
return 1.0;
}
public static double mul(float a, double b){
return 2.0;
}
}
那么JAVA是如何知道我们需要调用的使哪个方法呢?答案很简单,当我们使用这些方法的时候,
我们会给方法传参,JAVA会自动识别我们所传数据的类型和顺序,并拿去与重载的方法比较,
哪个符合就调用哪个方法。这也从侧面说明为什么方法的重载需要方法名相同而参数列表不同。
知道了方法重载的构造与使用,有的同学就会问了,方法的重载有什么用呢?
方法的重载使程序员不必去记很多的方法名,例如当我们写了一个整形加法运算,如果我们下一次
要运算浮点数的加法就需要重新命名,而重载解决了这一问题。
三,数组
3.1数组的创建与初始化
数组的定义:相同类型元素的一个集合
注意JAVA中的数组与C语言中的数组有较大的区别,请认真阅读以下内容:
public class Test {
public static void main(String[] args) {
/**
* 动态初始化
*/
int[] array1 = new int[10];
/**
* 静态初始化
*/
int[] array2 = new int[]{1,2,3,4,5,6};
//看似省略了new int[],实际上编译器编译时会自动加上
int[] array3 = {1,2,3,4,5,6};
//可以分为两步写
int[] array4;
array4 = new int[10];
int[] array5;
array5 = new int[]{1,2,3,4,5};
/**
* 错误写法
* int[] array4 = new int[3]{1,2,3};
* int[] array5 = new int[];
* 不能这样初始化
* int array = new int[10];
* array = {1,2,3,4,5,6,7,8,9,0};
*/
}
}
如果没有对数组进行初始化,数组内的元素会有默认值,如下:
类型 | 默认值 |
byte | 0 |
char | /u0000 |
short | 0 |
int | 0 |
long | 0 |
float | 0.0f |
double | 0.0 |
boolean | false |
引用类型 | null |
虽然在JAVA中也可以像C语言那样定义数组,但是不建议,因为JAVA认为int[] 也是一种类型,应该与int 这些类型一样,直接 类型+变量名 来定义。
3.2数组的使用
与C语言相同,在JAVA中数组的元素是通过下标来访问的,从0下标开始。下面我们用两种方式来
遍历一下数组:
public class Test {
public static void main(String[] args) {
int[] array = new int[]{1,2,3,4,5,6,7,8,9,0};
//在JAVA中可以通过 数组名.length 来获得数组的长度
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
System.out.println();
//叫做 加强for循环,前一个参数是数组元素的类型,后一个参数是数组名
for (int x: array) {
System.out.print( x + " ");
}
}
}
3.3数组是一种引用类型
上面也说到了数组中引用类型的默认值是null , 那么到底什么是引用类型?其实非常简单,如果一
个变量存储的是一个地址,那么它就是引用类型(与C语言中的指针十分类似)。在C语言当中,一个
单独的数组名代表该数组首元素的地址,而在JAVA中,数组名代表一个数组的地址(不区分是数
组首元素地址还是整个数组的地址),如下图表示:
数组会在堆上开辟的空间来存储数组的元素,在虚拟机栈上开辟一个空间来存储地址,指向在堆
上开辟的位置。
3.4作为函数的参数
public class Test {
public static void change(int[] a){
a[0] = 10;
}
public static void main(String[] args) {
int[] array = new int[]{1,2,3,4,5};
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
System.out.println();
change(array);
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
}
}
3.5作为函数的返回值
一般来说,在C语言中,如果返回数组(即地址),因在函数上创建的数组变量的销毁,存储数组
的空间也会被销毁,main函数中得到的就是一个野指针,因为它指向的空间可能被别人占用,而
在JAVA中,方法的销毁不会影响存储在堆上的数据,决定堆上数据是否销毁的是------还有没有人
引用该位置,因此在JAVA中可以返回数组。例如:
public class Test {
public static int[] abc(){
int[] a = new int[]{5,4,3,2,1};
return a;
}
public static void main(String[] args) {
int[] array = abc();
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
}
}