Java - Part 2

2020-02-25  本文已影响0人  低调的灬攻城狮

一、循环语句

循环语句满足一定条件循环执行循环体内的语句。
循环语句在Java中有三种形式:for,while,do...while。
1.for循环

2.while循环
while循环语句的格式为while(condition){循环语句}。while循环的执行流程为首先判断condition是否为true,如果为true,就执行循环体内的语句,否则就退出循环。一般将while循环看作是for循环的简写形式,因为while循环能做的for循环一定能做,while循环适用于循环次数不确定的情况下,比如当一个方法返回boolean类型的时候,可以用这个方法作为condition,如果返回true就执行循环体内的语句。

3.do{}while()循环
do...while循环语句的格式为do{循环语句}while(condition)。执行流程是,先执行一遍循环体内的语句,然后再进行判断,如果为true继续执行循环,否则,退出循环。do...while循环与while循环的不同是:do...while循环至少会执行一次循环体内的语句,while循环有可能一次也不执行。

4.关键字
return:return关键字是和方法一起作用的,return后面的语句不再执行,结束整个方法,整个方法结束了,循环语句也就结束了。
break:break关键字的作用是结束循环,循环后如果还有语句还会继续执行,如果有多层循环的话break只能结束所在的那层循环。
continue:结束本次循环,不再执行循环内continue后面的语句,开始下一次循环。
如果break和continue想要结束父循环,就必须给父循环起别名。

二、数组

1.数组的初始化

3.数组的默认值

  1. 数组在内存中的分配
    Java在内存中只有两个部分:堆区与栈区,很多人在这两个部分基础上再分出方法区、常量池等部分,引用数据类型都是存储在堆区,栈区只存储局部变量。数组的初始化是这样的过程:首先分配连续的内存空间,然后分配下标,之后如果是动态初始化就分配默认的值,如果是静态初始化就赋上指定的值。

5.数组中常见的问题
ArrayIndexOutOfBoundException:下标越界异常。
NullPointerException:空指针异常。

6.数组的基本操作

遍历数组
for(int i=0;i<arr.length;i++){
    System.out.println(arr[i]);
}
获取数组中的最大值/最小值
int max = arr[0]
for(int i=1;i<arr.length;i++){
    if(arr[i]>max){
        max = arr[i];
    }
}
反转数组
for(int i=0;i<arr.length/2;i++){
    int temp = arr[i];
    arr[i] = arr[arr.length-1-i];
    arr[arr.length-1-i] = temp;
}
查找数组中某个值第一次出现的位置,如果没找到,就打印-1
int value;
int index = -1;
for(int i=0;i<arr.length;i++){
    if(arr[i]==value){
        index = i;
        break;
    }
}
System.out.println(index);

7.二分查找
二分查找是效率最高的查找算法,最坏时间复杂度是log(N)。一次可以将一半的数据剔除,但是二分查找的前提是已经排序好的数据。

public static int binarySearch(int[] arr,int value){
    int bottom = 0;
    int top = arr.length-1;
    int index = -1;
    while(bottom<=top){
        int mid = (bottom+top)/2;
        if(arr[mid]==value){
            index = mid;
            break;
        }
        else if(arr[mid]<value){
            bottom = mid+1;
        }
        else {
            top = mid-1;
        }
    }
    return index;
}

8.冒泡排序
冒泡排序算法是较为简单的排序算法之一,其基本思想是比较相邻的两个元素,依次将最大的数放在最后面,这样就实现了元素从小到大排序。这个排序算法的时间复杂度是O(n2)。

public static void bubbleSort(int[] a){
    for(int i=0;i<a.length-1;i++){
        for(int j=0;j<a.length-1-i;j++>){
            if(a[j]>a[j+1]){
                int temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }
}

三、方法

1.方法的分类和调用

2.方法的重载(OVERLOADING)
JVM判断两个方法是否相同依据方法名与参数列表,如果两者都相同,则认定是同一个方法,一个类中不允许出现方法名相同,参数列表也相同的两个方法,两者只要有一个不同就是不同的方法。方法的重载含义是在同一个类中出现了多个方法名相同,但是参数列表不相同的方法,参数列表包括参数类型、参数个数、参数顺序,只要有一个不同就算是重载。但是参数顺序不同的重载在程序开发中没有意义,所以不要使用。

3.方法间相互调用
JVM在调用某个方法时,会将这个方法压入栈中,如果这个方法又调用了其他方法,就会将另一个方法压入栈中,当方法执行完毕之后,会将当前方法弹栈。

4.可变参数
在方法声明上使用...表示多个相同类型的参数,可变参数使用是有限制的,一般可变参数放在最后,因为可变参数会将尽可能多的参数形成一个整体,也就是组成一个数组,这时如果我们想传入一个单独的参数,并不想让它成为数组的一部分,如果可变参数放在前面这样的操作就无法完成。

上一篇 下一篇

猜你喜欢

热点阅读