高新技术(1)

今天看了一下javaweb里面的第一天内容,感觉自己学到了很多东西,结合以前的经验,许多东西相通了。

首先是JUint,这真是一个相当好的东西,以前一直听说什么什么单元测试,测试的重要性,但一直没去看是什么东西,仅仅看了这么一节就学到了基础,知道了大概后,以后的学习就会方便很多。

JUint通过在方法上标记@Test来标记方法,当以JUnit运行时,会自动运行此方法。@before   @after 是用于每个测试方法之前的初始化资源,以及之后的释放资源。@beforeClass    @afterClass  适用于所测试的类开始之前初始化,和结束之后释放。   

两者的区别是假如一个类里面有两个Test方法,则@before   @after   运行两次,每个测试方法前后都有,而@beforeClass    @afterClass只运行一次。

JUint的出现极大的方便了程序的测试,避免了main方法测试时的多方法干扰,资源获取等。而且当出现异常时会标记失败,就可以明确的知道位置。通过使用断言Assert来判断结果是否是我们所期望的。虽然我认为单元测试不会这么简单,但我相信原理是一样的,通过给方法传入不同的参数,根据结果来判断方法的正确性和健壮性。

以后需要对每一个类都写一个测试方法,至少需要测试它的public方法。因为程序写出来相当容易,但是调试相当难。前面写的那个mt游戏写代码的时间来大概也就3-4个小时,只要逻辑清晰,差不多一气呵成就能写出一个大体框架。而简单的错误调试花费了半小时,但是有些相当小的错误,每一个找起来需要至少20分钟,因为当你发现错误时,就需要重新理清当前代码的上下文,才能查找到底层相当不起眼的错误。

而如果每一个类都能保证自身的正确性,那么组合起来后,就算错,也只是大逻辑上的错误,而无须去每次考虑底层逻辑。

第二课是静态成员导入和自动装箱

静态成员的导入,这个我觉得也就算跟类的导入对应吧

import static java.lang.System.out

用处不大,因为elicpse的补全功能很强大,对于代码的补全很容易。就像喜欢使用this一样,我一直认为我喜欢用这个的原因是当点”.“一出现,辅助选择列表出来,选择起来相当方便。如果需要自己去想,首先需要写下前几个字母,然后需要按下alt+/才会出现辅助选择,这样效率相差无几,后者需要大量准确的记忆,而前者只需要有印象即可,所以对于常用的静态成员使用,这个没什么必要。

如果是不常用的话,这个还是有用的。还有一种用途是对不同类的相同静态成员,通过修改类就可以快速的切换。虽然这会增加名字重复的几率。


       自动装箱,拆箱。我认为跟c++的自动类型转换差不多。不过我还只遇到基本数据类型的自动装拆箱。在需要使用对象的场景,自动将基本类型封装成对象,在需要使用基本数据的场景将对象拆箱为基本数据。


      增强for循环:这是个相当由用的东西,c++11也有功能。要求容器实现Iterable接口。他的好处很多,就像我们喜欢用List来接ArrayList一样,都可以算是一种泛型和接口的应用好处。因为使用接口,以后如果修改同接口底层容器,其余全部不需要修改。而就算换成set,这个for里面的代码也不需要改变。

       增强for的格式简单明了,而且再也不需要手动去写迭代器等。

        唯一区别是增强for内不会修改原始数据。因为他就是使用一个临时变量将每个元素接出,对他的赋值只是改变了临时变量的指向,对于原始数据无修改。

         但是如果是调用对象的的方法来修改数据,在不改变原始对象的地址的基础上,对于原始数据是可以修改的,比如setXXXXX方法。


        第三个学习的是可变参数,用法是类型名...变量名,用于参数的最后位置,这种方式就如同使用该类型名的一个数组来接收参数一样,如同使用T[]  args={参数1,参数2}。这个比较好理解,只是简化了我们手动将一系列参数打包的过程。特别需要注意的是main方法的可变参数,由于编译器会将数组自动拆开,所以需要将其强制转换为一个对象传入。

第四个学习的是枚举。枚举要求构造函数私有,其对外实例只有枚举的对象。其余的跟类差不多,但是当有虚函数时,在定义枚举的时候就需要实现这个方法。

声明枚举类是方法是,将class改为enum即可。

定义枚举成员的方法是 名字(构造参数){虚函数的实现};

枚举还有一个方法是valueOf方法,可以使用对象的,也可以使用静态的。功能是通过字符串来返回该枚举对象。

枚举我认为应该用于一些特性相近,且个数确定的对象,通过枚举来标识每一个对象。switch可以接受枚举。

枚举的clone方法被覆盖,始终抛出异常。所以保证了枚举的不可复制性,保证了单枚举的单态性。

枚举的compareTo 比较的是声明常量的顺序。
枚举的getDeclaringClass 所返回的类是声明的类,也就是 ENUM 类名{实现},
枚举的getClass方法返回的是枚举对象的类文件,是使用的getDeclaringClass 返回的类名+$编号
比如一个WeekDay 枚举类型,里面有MON这个枚举,则getDeclaringClass 获得的是包.weekDay ,而getClass 获得的是 包.weekDay$1.

所以判断两个枚举是否是同一类型的枚举,就应该使用getDeclaringClass




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值