一.
我们仔细看这个题目,数据工具类,这意味着我们现在讲述的对象,都是数组,创建数组类。
这里是接着上节讲的, 创建完对象后,调用方法,这个过程显得很正常。
但是,实际上有个问题。
一般的开发,把方法封装到对象当中去,找到对象,就知道这些方法。可是呢?我们在定义方法的时候,需要定义该方法的修饰符的。这个修饰符不是瞎定义的,写每一个都是有原因的,java是一个严谨性语言。写public是为了提升权限,让它被更多地访问到。第二,是否需要加静态。咱这个类中没有成员变量,意味着该对象是否有封装特有数据,没有。那方法不可能访问成员变量。方法都没有访问到特有数据,你琢磨着主函数中创建对象有用么?主函数中ArrayTool tool=new ArrayTool(),创建的对象没有用,除了浪费空间外。当描述类中的方法没有访问过特有数据时,它就需要静态化。谁访问到,谁就不静态。
重新对上面的内容叙述一下。首先,这里有两个类,ArrayToolDemo类和ArrayTool类。最初的讲解中,它们一个是描述事物类,一个是创建事物中的具体对象类。但是,讲到现在,从最本质来看,类和对象都是为了封装而存在的。描述类就是封装对象所需的成员,包括成员函数和成员变量。但是,随着发展,描述类中甚至可以不需要访问任何对象,可以全是static修饰的(那这样的类存在的目的是为了什么?)
解析一下描述类中的方法,对于getMax(int[] arr)方法而言,它没有访问任何成员变量,也就是说没有访问任何对象。
我们重新记录一下视频的讲解,ArrayTool类中没有成员变量,那就意味着ArrayToolDemo类中的对象没有封装特有数据,那方法就没有访问到成员变量,没有成员变量,自然也不会访问到。方法都没有访问到特有数据(成员变量就是为了对象中的特有数据而存在的),创建对象也就没有用(对象存在的目的就是为了成员变量,为了特有数据么?)。ArrayTool too=new ArrayTool(); 这块创建对象就没有用,这个对象除了浪费空间外,其他一点用都没有。
(我仔细看了一下ArrayToolDemo类中的内容,主要就是两种实体,以及实体调用描述类中的方法。我将数组和对象都当成实体,而且我认为描述类的存在就是为了给实体类封装数据和方法用的。类中创建的对象没有调用描述类中的方法,就说明这个类没用啦?显然不是这样的。我所称呼的描述类,创建对象的类应该都是不正确的叫法,创建对象的类难道就是为了创建对象而存在的么?之前没有创建对象,也有类。描述事物的类也不是完全为了实体封装数据而存在的,它也可以是内容全是静态的,为自己服务→功能的多样性与唯一性)
当getMax(int[] arr)方法没有访问过特有数据时,它就需要静态化,即public static int getMax(int[] arr),如果方法访问到了到了特有数据就不需要加上静态修饰符。
由于ArrayTool类中,没有成员变量,对象自然也就没有封装特殊数据,对象也就没有存在的必要(按照视频中的讲解就是这样的),对象中没有特殊数据,新建对象也就不需要调用ArrayTool类中的方法,因为没有对象中没有特殊数据,方法访问对象,对对象而言起不到任何作用,自然对象也就没有存在的必要。最后使用类名调用方法对ArrayToolDemo类中的数据实体进行方法调用即可,
这就是我们说的,静态的基本使用,但是像这样的对象不多,java有很多这样的对象,但是相比较其它的对象,还是少的,因为其它的对象里面封装了特有数据,还是最终以对象为主。但是,有一些像这样的类,它是确实只提供工具方法,而没有封装特有数据的,像这种情况就要定义为静态的了。这样的类叫做工具类,一个非静态方法都没有,全是静态的。
这里还有一点,两个类实际上是建立在两个java文件中的,一个是ArrayTool.java文件,另一个是ArrayToolDemo.java文件。
上面说到,不需要创建对象。但是创建对象可不可以?
可以,在ArrayTool类里面有一个默认的构造函数(为什么会有?这个类为什么会有,ArrayToolDemo类有没有呢?)刚才交代过,创建对象没有意义。如果不创建对象,有点麻烦,为什么这么说?交代有一个数组工具类,但是不用创建对象,类名直接调用了。但是别人不一定听,别人创建了一个对象,DOS运行发现没问题,那岂不是在用对象在浪费内存空间。所以应该强制不让创建对象,要不然想创建就创建,完全不在我们控制范围之内。我们不允许创建。为什么?我们这全都是静态方法,对象的创建是一点意义都没有。怎么强制不让创建对象。对象一创建,一定要做初始化,初始化里面有一步,叫做构造函数初始化,构造函数是我定义的(默认的构造函数怎么定义?)我要是不让它进行构造初始化,就创建不了对象。说白了,我们让ArrayTool类中的 默认初始化ArrayTool() {},不接受访问即可,
也就是加上修饰符private。
总结:这里创建的就是数组工具类,下次如果需要用查找,折半之类的操作的,拿这个工具类就可以用了。这已经封装完了,直接拿去用就可以了。