4网课内容总结

1.Java方法:

方法一般是为了完成某一功能,把程序中特定的代码块组合在一块儿构成的。java

方法的好处体如今:(1)可重用性,屡次使用,避免冗余(2)使程序结构更加清晰数组

2.方法的语法形式:

[修饰符] 返回值类型 方法名(形参列表){数据结构

方法体函数

},即方法头+方法体。spa

3.方法语法形式中各个元素的含义:

(1)修饰符:用来规定方法的可见范围等特征。如public表示公开方法,static表示该方法是静态的。操作系统

(2)返回值类型:表示该方法会返回一个什么类型的值。若是不须要返回值,则类型为void。其余类型则须要在方法体内部最后使用 return 返回值类型 语句。return和break,continue同样。属于跳转语句,return的做用是返回给主调方法并退出当前方法。方法的返回值只能有一个。线程

(3)方法名:符合方法的命名规则。指针

(4)形参列表:接收传入的参数。形参的个数能够是零个,一个或多个。不管是否有参数,()都必须出现。形参列表的格式为 类型A a,类型B b。对象

4.调用方法时,只须要使用方法名(实参列表)的形式。实参列表要与形参列表形势一致。静态方法能够直接在入口函数中调用。

5.递归:

递归就是本身调用本身的方法,主调函数也是被调函数。为了防止递归没有穷尽,必须规定递归的退出条件。blog

6.数组:

数组是相同类型数据的有序集合。数组描述的是相同类型的若干数据。按照必定的前后次序排列组合。其中每个数据称为元素,每一个元素均可以经过数组的索引或者下标(角标)来定位。

7.数组的特色:

数组是引用类型。数组中的元素能够是基本类型或者引用类型。一个数组的内存空间是连续的,而数组的引用名是连续空间的首址。数组的长度一旦肯定就不能更改。数组须要声明、建立、赋值并使用。

8.数组建立和使用:

(1)声明/定义:有两种格式,数据类型[] 引用名; 和数据类型 引用名[];。java推荐使用前一种。数组的声明中不能够定义数组的长度。

(2)建立/初始化:所谓初始化,就是为数组中的元素分配内存空间并为每一个元素赋值。方式也有两种,分为动态初始化和静态初始化。

动态初始化即数组声明和数组元素的分配空间和赋值能够分开进行:引用名 = new 数组类型[数组长度];,数组长度必须是正整数。new的做用是为数组开辟空间。数据类型指定每一个数组元素的空间大小。[]表示这个是一个数组。长度表名数组元素个数。

静态初始化:声明和初始化必须同时完成 :数组类型[] 引用名 = {初值列表};此时在声明数组时,不须要指定长度,系统会根据给出的数据自动分配长度。

(3)赋值并使用数组:引用名[下标] = 值; 使用数组时,使用 引用名[下标]获取相应的值。下标范围为0-数组长度-1,当下标不在此范围时会发生数组越界。

通常使用for循环为数组赋值\取值。

9.引用名存储的实际上是数组的首地址。

数组元素中存储的内容和类型相关,若是是基本数据类型,存放的是数据自己,若是是引用类型,存放的是引用变量的地址。Java的内存分为栈内存和堆内存,基本数据类型的变量和数据都存在于栈中,引用数据类型的变量(地址)存在于栈中,数据存在于堆中,因此引用数据元素的内容 实际上是堆内存地址。数组也是引用类型,因此整个数组内容都存在于堆中。

10.数组的默认值:在动态初始化中,byte short int初值都为0 long为0L char是一个空格('\u0000')float和double类型的默认值为0.0 String和其余引用类型都是null(String类型初值不等于“”)

 11.数组下标越界异常:ArrayIndexOutOfBoundsException 

12.内存管理:

程序运行必须在内存中进行,Java程序运行时,向JVM请求内存,JVM再向操做系统申请内存。JVM进行内存分配时,将内存分为栈和堆。

线程共享数据区中有堆和方法区。

其中堆存储对象数据,方法区简单地说就是存放着class文件中的内容。若是new对象时申请不到空间,就会抛出内存溢出异常。

线程隔离(私有)的数据区中有虚拟机栈、本地方法栈和程序计数器。

其中程序计数器共CPU找到下一条指令的地址和恢复现场,虚拟机栈中分割成一个个的栈帧,每一个栈帧对应着一次方法的调用。栈帧中存放着局部变量表【方法中的参数和局部变量】(基本数据结构的变量和对象的引用)、操做数栈(进行运算的栈)、方法出口和其余的信息。换一种说法,栈帧中存放着函数入参、出参、返回地址和上一个栈帧的栈底指针以及操做数栈。当栈调用的深度大于JVM所容许的范围,也会发生一个异常。本地方法栈是Java方法调用其余语言的接口。

堆中存放的是引用对象的数据,栈中存放着基本数据类型的数据和引用对象的地址。

 

 

 

 13.数组只定义未初始化引发的空指针异常:NullPointerException,即引用对象的地址没有引用到任何堆内存中的数据。

14.数组的遍历:for循环和加强for循环。拷贝:自动扩容 获取最值:保存最值或者保存最值的下标。

15.二维数组:

声明:int[][] arr; int arr[][];

动态初始化:指定行数列数和仅指定行数。int[][] arr = new int[]3[5]; int[][] arr = new int[3][];

赋值(针对不一样的初始化方法):arr[1][2] = 2; arr[0] = new int[3]; 没赋值的默认是0

静态初始化:int[][] arr = {{2,1,4},{3,1,4,2,1},{3}}; int[][] arr = new int[][]{{2,1,4},{3,1,4,2,1},{3}};

 

 

 16.Java方法:

方法 就是将具备独立功能的代码库组织成为一个总体,使其具备特殊功能的代码集。方法必须先建立才可使用,过程就成为方法的定义。方法定义以后不能直接运行 须要手动的调用 才能够执行。过程称为方法的调用。

方法语法格式:[修饰符] 返回值类型 方法名([形参列表]){ 方法体 }。

方法的优势:能够重复使用;使程序结构更加清晰;程序可读性强。

方法定义:无参方法/有参方法 

public static void 方法名称(){
方法体;
}

public static void 方法名称(形参列表){
方法体;
}

方法的调用: 方法名称();方法调用时,首先main()进入方法栈,执行main中的代码,当调用一个方法时,新的方法进入方法栈,建立形参和局部变量,并在本身的操做数栈中运算,运算结束后,该方法出方法栈,main方法继续运行,main方法执行完成后出栈。出栈时同时会释放空间。

17.形参与实参的区别和联系:

形参是在方法入栈才分配内存,方法调用结束后,内存会被当即释放,因此形参只在方法内有效。实参能够是常量、变量、表达式、方法等,实参在被方法调用时,必须有实际的值。形参和实参在类型、数量、顺序上都必须一致。若是重载方法中没有一致的数据类型,那么首先找到最小兼容实参的参数列表进行调用。方法调用中,数据传递是单向的,即实参传给形参,修改的形参不能反向传给实参。可是若是传递的是引用对象的地址,那么能够根据这个地址访问,来修改引用变量内部的值。

18.方法的返回值类型:指定类型或空(void)。return后任何语句都不会执行。

19.方法的重载:

方法名同样,形参列表的参数个数、参数类型的顺序、参数类型不一样时,定义多个重名方法称为方法的重载。若是方法的返回值相同,也符合上述描述,那么也是方法的重载,若是方法的返回值不一样,参数列表没有变化,则会直接提示报错。总之,返回类型的改变不引发方法的重载。

20.冒泡排序:

一次比较相邻的两个数,升序时依次将大数向后传递。能够升序,也能够降序。第i轮的做用是把第i大的数放到数组的n-i下标处。每一轮须要比较的次数-1。第一次须要n-1次比较。冒泡排序最多要进行 (n-1)+(n-2)+……+1 次相邻 2 数交换

21.插入排序:

前面有序,后面无序。从下标为1的元素开始,(升序排序)若是小于就和前面的元素交换。造成一种前面暂时有序,后面未处理的状态,直到数组所有有序。若是数据自己是降序的,而要求按照升序排序,那么插入排序须要 1+2+3+……+(n-1) 次数据移动。每一轮从第二部分中的挑选第一个元素插入到第一部分。

22.快速排序(单向扫描法):

每次取第一个元素(头部元素),设置两个指针,分别是下标为1和下标为n-1。将大于头部元素的数移动到后面,直到前面的指针下标大于后面的指针。此时将头部元素和后面的指针所指的元素交换,即和最后一个小于头部元素的元素交换。返回这个下标,此时获得的数组就是以这个下标为分界,前面部分小于等于头部元素,后面部分大于等于头部元素的半有序数组。此时递归前面部分和后面部分,直到只剩下一个元素或没有元素。

快速排序(双向扫描法):

首先一直移动左指针到首次大于头部元素的下标处,再移动右指针到首次小于头部元素的下标处。若是此时左指针大于右指针,则结束此次遍历返回。不然,交换两个元素,并再次移动。方法的结果也是会造成一个半有序的数组,一直递归调用直到剩下一个或零个元素为止。

相关文章
相关标签/搜索