黑马程序员_java的语言基础组成最终篇(对第四课函数和数组的总结)

android培训java培训、期待与您交流!


通过今天对java语言基础组成中的函数和数组的学习,我来给自己的学习内容做下简单直白的总结:

首先,让我来先说说函数,它是定义在类中,具有特定功能的 一段独立小程序,也称为方法..

形式:修饰符  返回值类型  函数名(参数的类型  形式参数1,参数的类型 形式参数2,,,,,,,,,)

{执行语句; return 返回值(谁调用返回给谁);}....用于流程控制的关键字:return是用来结束函数的..


在一般情况下,我们为了提高代码的复用性,可以将程序中不断重复的代码进行抽取,将这些部分封装成一个独立的功能,方便于日后的复用(随时用可以随时调用)...在java中,对功能的封装是通过函数的形式来体现的..所以,我们需要函数,就可以用函数的形式来定义一个我们所需要的功能..

这样,我们就可以看出来函数的特点了:

它提高了代码的复用性...也提高了功能的复用性....函数只有被调用了才会执行..


通过以上的总结,我们知道了什么是函数,为什么要定义函数以及函数的格式..那么,我们就要有思想的去考虑下如何定义一个函数?

首先,我们要想到函数肯定会有返回值类型...以及需要不需要接收参数,接受几个参数,这些都是我们要考虑到了...

那么,我们就可以在明确了2点的情况下,来定义一个函数:

明确1:既然函数是一个独立的功能,就要明确该功能运算完的结果是什么...就是在明确返回值类型

明确2:在定义函数的时候,要明确有没有未知内容参与运算,有几个未知内容...就是在明确函数的参数列表

通过一段代码,我们来更深刻的了解下,如何定义一个函数:



函数是如何定义的,我也总结完了,但在定义函数的时候,需要注意一些地方:

对于函数没有具体返回值的情况时,返回值类型用void来表示..void就代表着该函数没有具体返回值,它也属于返回值..当使用void作为返回值时,该函数中的return语句可以忽略不写。当然,你要写上也可以..

函数是用来调用函数的,不可以在函数内部定义函数,它们是平级的..

定义函数时,函数的结果应该返回给调用者,交由调用者去处理...

最后,我们之前学习的语句,最好都定义在函数内,不仅提高了代码的复用性,还方便功能的复用..


下面,我来总结一下函数中的一个重要特性---重载:

在java中,我们很容易会定义几个具有相同功能的函数,比如,3个函数的具体功能都是求和..这时,我们应该如何去区分具有相同功能的函数名呢,如果把它们每个功能的函数名都定义成不同的名称,确实可以,但是很不好记,也稍显麻烦..这时,函数的特性--重载 就解决了我们的麻烦..

重载:在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可..这里要注意下,参数的类型是有固定顺序的..

重载的特点:它不仅函数名称相同,与返回值类型没有关系.重载的好处:方便了阅读,优化了程序设计..

最后,我们什么情况下去使用重载:当定义的功能相同,但参与未知运算的内容不同时,就可以定义一个函数名称以表示功能,方便了阅读。会通过参数的个数和参数的类型不同来区分多个同名函数..



数组部分


我学习中接触到的第一个引用类型———数组..下面我来对数组的掌握情况做下具体的总结:

数组:其实就是一容器实体,里面装的是同一种类型的集合(它其实就是用来装同一种类型元素的)..

数组的好处:它可以自动给数组中的元素从0开始标号,方便操作这些数组..

数组具有2种格式:

第一种格式:元素类型[]   数组名称=new   元素类型[装的是元素的个数或则叫元素的长度]..

比如例子: int[] x=new int[3]..这句话在内存中是怎么体现的呢..既然说到引用类型,就要扩展下内存部分了:


在java程序运行的时候,需要在内存中分配空间,为了提高运算效率,对空间进行了不同区域的划分,每一片区域都有特定的处理数据的方式和内存管理方式..那么java在启动时,一共在内存中划分了5片空间,今天让我来按照代码的形式总结下其中的2片空间:栈空间和堆空间:


栈内存:用来储存局部变量的(定义在函数中的变量,定义在函数参数中以及定义在for循环中的变量都是局部变量)..特点是:当该变量所在的程序一结束,该变量也会在栈内存中结束...从上述的例子中的左半部分,可以看出:因为该int类型的数组变量x是定义在主函数中的,那么在栈内存中会开辟一个主函数的空间,空间里定义了一个变量x..


堆内存:数组和对象,通过new建立出来的实例,都在堆内存中..

特点是:堆内存中的实体是用来封装数据的,每一个实体都有自己的内存地址值...实体中的变量就算不赋值,也具有默认的初始化值(默认值要根据元素的类型而定)...实体不在被指向(也就是不在被引用了)就会在不确定的时间内,被垃圾回收机制所回收..从上述的例子中的右半部分,我们可以看出:创建了一个类型是int类型的容器,并存储了3个int类型的元素..

最后,一个数组容器实体可以被N多个数组变量所指向并操作...也可以每一个数组变量各指向不同的数组容器实体..

题外扩展:在没有任何操作的情况下:当主函数运行完以后,主函数里的x变量也会随之消失,堆内存中的数据就没有了指向,不会再被使用的情况下,会被垃圾回收机制在不确定的时间内所回收..

数组的第一种格式:int[] x=new int[3],数组虽然给每一个元素都标上了号,但并没有给被标号的元素赋予具体的值...使用了堆内存的特点:元素的默认初始化值..那么,如何给数组中被标号的元素赋予特定的值:通过 x[标号]=值 的形式,可以给被标号的元素一一的赋值...


数组的第二种格式:int[] arr=new int[]{2,3,1,4,7} 也可以简化成int[] arr={2,3,1,4,7}..

可以看出:定义了一个名称为arr的数组,里面的元素都是int类型的,并通过大括号的形式对数组中的每一个元素赋予了特定的值...这里,就不会在使用堆内存的特点元素的默认初始化值了..

所以,在数据值明确的情况下,可以使用第二种格式...在数据不明确的情况下,使用第一种格式,并一一给元素赋值..


通过以上对数组的总结,我们知道了什么是数组,数组的2种格式,以及数组在栈和堆内存的表现形式..

那么,在使用数组的时候,我们还需要注意一些地方,避免自己在使用数组的时候犯错误:

1,在操作数组的时候,不要去访问数组中不存在的角标..如果访问到,在程序运行的时候会出现数组角标越界异常..

2,在操作数组的时候,当数组容器实体没有了任何指向,数组变量值为null的情况下,不要去操作数组内容...如果还在使用数组变量去操作数组容器实体中的内容时,会发生空指针异常..



下面我就来总结下数组中最常见的操作:获取数组中的元素..

如果我们想获取到数组中的每一个元素值,我们可以使用循环的形式来获取到,通常我们称为遍历..

遍历代码:


通过上述代码我们可以看出,数组中有一个属性可以直接获取到数组的长度或者元素的个数,就是length属性。要想获取数组中的元素,我们可以通过循环遍历的形式来获取到数组中的每个元素..



对于数组中的一些算法总结:

对于排序算法中的选择排序代码:


从上述代码中,我们可以看出,用选择排序的方式,我们可以实现对一个数组的排序..选择排序的特点是:内循环结束一次,最值出现在头角标位置...先用数组中的第一个角标元素与后面的每一个角标元素进行比较,我们可以用循环嵌套的形式来实现这一功能。然后在通过位置置换的方法,把小的元素放前面,大的元素放后面..由于数组中的最后一个元素不能再和下一个比较了,并且已经是前面元素比完剩下的最大角标元素了,我们可以通过arr.length减一的形式来提高效率..


对于排序算法中的冒泡排序代码:


从上述代码中,我们可以看出,用冒泡排序的方式,我们可以实现对一个数组的排序..冒泡排序的特点是:内循环结束一次,最值出现在尾角标...内循环arr.length减一是为了防止角标越界,减a是因为内循环结束一次,最值出现在尾角标,下次在内循环中比较的时候,可以依次减少比较次数...而外循环减一,是因为最值都放到了后面,头角标肯定是最小值了,可以减少一次比较次数..


排序有很多种,上面我只总结了2种,在排序中,最快的排序是希尔排序...正式的项目开发中,我们只需要使用JAVA给我们定义好的快速排序法:Arrays.sort()就能完成对数组的排序..



扩展:对于数组的常见操作,不仅仅是我上面总结的获取数组中的元素,2个排序算法...还有很多:

获取数组中的元素——遍历..

获取数组元素的最大值及最小值...

排序算法——选择和冒泡..最快的排序是希尔排序,我们开发项目使用JAVA定义好的快速排序法是最简单的...

获取数组中的任意元素...

折半查找——也可以获取任意元素,但必须是有序的数组..通过折半查找的形式,还可以保证数组有序的情况下在数组中插入元素..

最后,通过数组,循环,位运算的形式,我们可以获取到任意一个数的所有进制表现形式...

当然,数组的常见操作还有很多,这里把我目前所掌握的操作做了一次彻底的总结...







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值