美文网首页
第二篇学习总结

第二篇学习总结

作者: 拼搏男孩 | 来源:发表于2020-01-20 12:58 被阅读0次

第二篇学习总结

一、循环语句

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

1.for循环

for循环语句的格式为:for(初始化表达式;condition;循环后表达式){statement}。执行流程是:首先执行初始化表达式,将变量初始化,然后判断条件,如果条件满足,也就是true就执行循环体中的语句,执行完之后执行循环后表达式,再次判断,如果条件不满足,也就是false会退出循环。


for循环中的三个部分均可以省略,初始化表达式不是必须,因为可以在外面进行变量的初始化,condition也不是必须,如果省略的话默认为true,无限循环,循环后表达式也可以省略,因为可以在循环体内对循环判断变量进行计算,这样就相当于一个while循环了。如果同时省略三条语句的话就相当于一个while(true)循环了。

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想要结束父循环,就必须给父循环起别名。
public static void main(String[] args) {
 
 w:  for (int i = 0; i < 10; i++ ) {
     //外循环语句
     System.out.println("外循环语句.....前");
     for (int j = 0; j < 10; j++) {
         break w;
     }
     System.out.println("外循环语句.....后");
 }
}

二、数组

数组是存放同一种数据类型的容器,定义时就必须指定长度与数据类型,通过下标访问,长度不能改变,所存放的数据类型也不能改变,所以,数组的使用不够灵活,后来又出现了List集合,不过,Java中唯一的底层容器就是数组,是一种引用数据类型。

1.数组的初始化

  • 静态初始化:在定义数组时数组中的元素由程序员自己指定,数组的长度由Java虚拟机自己判断,这种方式不够灵活。
  • 动态初始化:定义数组时不指定内容,只指定长度,数组中的元素由JVM自己填充。

2.数组的操作

  • 获取数组的元素:使用下标值:arr[i],数组中的元素下标是从0开始的,所以要想获取第i个元素,就需要使用ar[i-1]。数组中存储的是元素的地址而不是值。
  • 获取数组的长度:arr.length。数组中最后一个元素的获取方式:arr[arr.length-1]。

3.数组的默认值

  • byte、short、int、long默认初始化值是0。
  • float与double的默认初始化值是0.0。
  • char默认初始化值是十六进制的'\u0000'。
  • boolean类型的默认初始化值是false。
  • 引用数据类型的默认初始化值是null。

4. 数组在内存中的分配

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 参数1,参数类型2 参数2,.....)。

  • 权限修饰符:public private protected 或者没有。
  • 静态/非静态:static 如果有static就是静态,没有static就是非静态。
  • 返回值类型:可以有返回值类型,也可以没有返回值(void)。
  • 方法名:遵循驼峰命名法。
  • 参数:数量无限制,但一般不要超过四个,否则不容易记忆,也可以没有。

1.方法的分类和调用

  • 方法的分类:根据有无参数及有无返回值可以分为四类:有参方法、无参方法、有返回值与无返回值。

  • 调用方式:单独调用、输出调用、赋值调用。

2.方法的重载(OVERLOADING)

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

3.方法间相互调用

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

4.可变参数

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

相关文章

  • Android 官方 Training 文档学习总结系列之「支持

    Android 官方 Training 文档学习总结系列 官方 Training 总结系列第二篇:支持不同的设备。...

  • 第二篇学习总结

    第二篇学习总结 一、循环语句 和选择语句不同,循环语句满足一定条件循环执行循环体内的语句。循环语句在Java中有三...

  • 改变从学习开始 2018-10-29

    2018年10月28日,周记总结第二篇 本周继续早睡早起打卡、时间管理打卡学习、潘多拉英语打卡学习。坚持锻...

  • EXCEL学习进阶

    解决拖延症最好的方式——撸起袖子,直接做。 excel学习总结第二篇,主要结合前期学习作业思维导图,以及近期工作实...

  • 学习总结第二篇 5.3

    1、内容总结 (1)读SPEC 了解如何查看数据手册 采样率即单位时间内采样数 采样率及采样精度越高,采集信...

  • 我的VPE之路(二)

    我本来以为这个系列到我卸任总结的时候才能有第二篇的,因为我真是个不爱总结、不爱思考的懒人。但是事实就是,第二篇很快...

  • 【总结回顾】iOS Apprentice Tutorial 2:

    这是***【总结回顾】iOS Apprentice Tutorial 2:Checklists ***系列的第二篇...

  • 微信礼仪

    第一篇学习总结 2.最幸福的亲密关系,就是你吸引到一位欣赏"如是"的你。你的举手投足,都让他魂牵梦萦。 第二篇学习...

  • 出售时间之前你要牢记的三条铁律

    ----《通向财富自由之路》学习总结第二篇 时间是一种不仅稀缺而且不能再生的资源,所有我们说时间是宝贵的。眼下的你...

  • 【GP社区】Greenplum AO列存储设计解析

    序言 本文是第二篇学习和研究Greenplum总结,并在社区中分享的文章。写本文的缘由,是来自于长时间对AO列存的...

网友评论

      本文标题:第二篇学习总结

      本文链接:https://www.haomeiwen.com/subject/lbjjzctx.html