zoukankan      html  css  js  c++  java
  • JAVA-初步认识-第八章-数组工具对象建立

    一.

    说完了静态关键字的一些特点和使用注意事项,同时也交代了静态应用场景以后。现在准备写个具体的例子,将前面的知识点串起来。

    这个例子从最基础的开始穿起。

    需求:求数组最大值

    最开始,我们的写法是将代码写在主函数里面,运行一下就可以了。下面是我们之前学习时的解题方法。

    (代码中的每一句话都是有其存在的意义的,没有意义和作用的语句可以不用写。public static void main(String[] args)这句话是保证程序的独立运行的,但是本类不需要独立运行,所以本类中没有主函数。)

    DOS一运行上面截图中的程序,需求就解决了。但是,我们说以后不要再这么写代码了。主函数只是入口,是用来调用其他程序。那么,这里应该怎么写?

    截图中的求最大值程序只能求解一个数组的最大值,数组arr,和for语句中x<arr.length是结合在一起的。如果再有一个数组,又要重新构建一个新的求解最大值的代码。这样不合适,重复的书写基本相同的代码。

    为了提高代码的复用性,要将功能封装起来。(这就是我们后来讲的函数。开始是数组,然后由数组衍生出一系列的操作,接着就是函数封装功能) 之前讲述的时候,只有主函数一个,所有的代码都放置在主函数里。现在把代码封装起来,进行复用,我们可以对很多数组求最大值。只要把数组告诉我们就可以了。

    这时,定义一个功能,获取整型数组的最大值。

    对下面的程序进行展开讲解,public是修饰符,表明最大的访问权限(不太懂?自己的理解)。static的存在,是因为本类中,主函数也是static修饰的,主函数要想调用本方法,必须是static修饰的(?),getMax方法参数中的arr和主函数中的arr不是同一个东西,只是重名。功能函数最后要返回最大值。需求就是获取最大值,返回值就是数组中的最大值。

    封装功能过后的程序书写如下,主函数中的内容大大缩减。到目前,我对主函数的理解就是,主函数就像一个控制面板,上面就几个按钮。每个按钮背后复杂的工作都被影藏了起来。

    函数的出现提高了复用。接着扩展一下思维,另外的一个类中,也需要求解最大值,(这时就不是在一个类中求解了)。而且不关是求解最值,排序,折半..全都需要,这就意味着有很多方法,现在应该怎么办?

    按照对象的思想。我们不应该把它们都定义成方法,而是应该把这些方法放置在一个类里面,换句话说,就是封装到对象里面去。我找到了操作数组的对象,是不是找到了操作数组这个功能啊?这是个过渡,从最早期的主函数,过渡到我们自定义的函数进行封装,再过渡到把我们所需的众多功能,进行对象(那么这个对象里面全是方法?对象的参数列表怎么写?)进行封装。我们不再面向过程,而是面向对象。因此,我们这里单独写了一个类。这个类写完以后,我能用,你也能用。

    在第二个方法中,有一个特殊的地方,if语句中应该是 进行位置置换,位置置换是个功能,在这写个功能就完事了。这种开发方式很多见,因为我们的思路就建立在我这块肯定需要一个功能,我们不用管怎么实现,先写个这个功能,后面再去细解怎么实现这个功能。

    swap功能是给selectSort服务的,不需要提供出去,所以用private修饰。swap的参数列表是三个,给一个数组,再给两个变量(就是两角标)。因为我们要置换的是数组中的两个两个位置,数组明确吗?数组不明确。这里是如何调用swap方法的呢?在selectSort方法的某一个语句中,调用了swap方法。先是有确定的数组调用了seleceSort方法,在selectSort方法被执行的过程中,selectSort方法又调用了swap方法,具体的调用书写为swap(arr, x, y); 这里是不需要返回值的。

    在来个简单查找,这里的return -1是什么意思,忘记了

    这里还有一个打印数组的功能,把数组变成字符串应该是一个方法,返回的是一个字符串,这里面最简单的就是用字符串连接的方式,大家都知道,任何数据和字符床相加,想连接。String str="";   是null么?这是一个真实的字符串,只是里面没有内容而已,

    (首先是将所有的方法集合在一个类中,里面的方法间,也会有联系)

    至此,把这个功能写完了,封装在了一个对象叫ArrayTool里面,叫做数组工具对象。接着结合之前的类,我们想要来一个数组的最值获取。

     对象写完以后,我们想要求最值怎么办?

    这里其实是两个java文件,一个是ArrayTool.java,还有一个是ArrayToolDemo.java。ArrayToolDemo.java文件中包含有主函数,ArrayToolDemo是别人写的,准备用我们的工具。两个文件,先编译谁?按理说,先编译ArrayTool,ArrayToolDemo是在用ArrayTool。如果连ArrayTool.class文件都没有,怎么使用

     DOS中将执行的顺序表示了出来。

     

    接着又做了一些改变,如下。本类做了改变,工具类并没有发生变化。

    接着有趣的事儿来了,先编译了ArrayToolDemo.java,一编译,两个类都出来了。

     解析:ArrayTooleDemo它这个类中确实用到了ArrayTool.class,可是ArrayTool.class它有吗?是没有的,java编译器很有意思,它发现了该类中用到了其他类,它会去classpath路径下找这个类,或者去当前目录下找这个类,一找发现没有,它会继续找,找什么?找和这个类名相同的.java文件。因为这个类通常对应着一个源文件,找到源文件,对其进行编译,再产生这个class文件。

  • 相关阅读:
    最棒的HyperV监控工具 HyperV Gadget
    VSTS 强制TFS更新用户组权限
    Touch Diamond 印象
    Travelers
    Touch 全能名片王
    惠普前总裁孙振耀指点职业规划
    Shinning 我所听过最棒的演讲
    DB2 9 运用开辟(733 考试)认证指南,第 2 局部: DB2 数据独霸(9)
    DB2 9 使用斥地(733 测验)认证指南,第 1 局部: 数据库对象与编程措施(2)
    DB2 9 行使启示(733 检验)认证指南,第 2 部分: DB2 数据行使(2)
  • 原文地址:https://www.cnblogs.com/wsw-bk/p/7679971.html
Copyright © 2011-2022 走看看