建议23:不要让类型默默转换 public class Client { // 光速是30万公里/秒,常量 public static final int LIGHT_SPEED = 30 * 10000 * 1000; public static void main(String[] args) { long dis1 = LIGHT_SPEED * 1; System.out.println("光速1s:" + dis1 + "米"); long dis2 =…
开发中经常用到Arrays和Collections这两个工具类. 在数组和列表之间进行切换.非常方便.但是也会遇到一些问题. 看代码: import java.util.Arrays; import java.util.List; public class Client { public static void main(String[] args) { int[] data = {1,2,3,4,5}; List list = Arrays.asList(data); System.out.p…
建议26: 提防包装类型的null值 我们知道Java引入包装类型(Wrapper Types)是为了解决基本类型的实例化问题,以便让一个基本类型也能参与到面向对象的编程世界中.而在Java 5中泛型更是对基本类型说了“不”,如想把一个整型放到List中,就必须使用Integer包装类型.我们来看一段代码: public class Client { // 计算list中所有元素之和 public static int f(List<Integer> list) { int count = 0…
建议22:用整数类型处理货币. public class Client { public static void main(String[] args) { System.out.println("10-9.5 = " + (10 - 9.5)); System.out.println("10-9.6 = " + (10 - 9.6)); } } 运行结果: 10-9.5 = 0.5 10-9.6 = 0.40000000000000036 奇怪了,为什么10-9.…
建议27:谨慎包装类型的大小比较 基本数据类型比较大小木有问题,不过其对应的包装类型大小比较就需要注意了.看如下代码: public class Client { public static void main(String[] args) { Integer a = new Integer(100); Integer b = new Integer(100); /* compareTo返回值:若a>b则返回1:若a==b则返回0:若a<b则返回-1 */ int result = a.com…
如何使用java代码进行视频格式的转换(FLV) 一,前言 在给网页添加视频播放功能后,发现上传的视频有各种格式,那么就需要将他么转换成FLV,以很好的支持在线视频播放. 公司一直在使用中,配合使用,感觉不错,每天转换的文件超过上千个. 二,准备 工具包  : drv43260.dll,ffmpeg.exe,mencoder.exe,pncrt.dll,pthreadGC2.dll 原理其实是使用java代码在CMD下调用MediaCode,完成视频格式的转换. 完整项目下载地址: Conver…
一.分析  在Java运算中的类型转换,是先运算在进行类型转换的.具体场景如下. 二.场景  在如下程序中: public class Client{ public static final int LIGHT_SPEED = 30 * 10000 * 1000; public static void main(String[] args){ System.out.println("月亮照射到地球需要1秒,计算月亮到地球的距离."); long dis1 = LIGHT_SPEED *…
泛型可以减少强制类型的转换,可规范集合的元素类型,还可以提高代码的安全性和可读性,正是因为有了这些优点,自从Java引入泛型之后,项目的编码规则上便多了一条,优先使用泛型. Java泛型(Generic)的引入加强了参数类型的安全性,减少了类型的转换,它与C++中的模板templates比较类似.但是有一点,Java的反省在编译期有效,在运行期被删除,也就是说所有的泛型参数类型在编译后都会被清除掉. 看如下代码: import java.util.List; public class Foo {…
建议16: 易变业务使用脚本语言编写 Java世界一直在遭受着异种语言的入侵,比如PHP.Ruby.Groovy.JavaScript等,这些“入侵者”都有一个共同特征:全是同一类语言—脚本语言,它们都是在运行期解释执行的.为什么Java这种强编译型语言会需要这些脚本语言呢?那是因为脚本语言的三大特征,如下所示: 1.灵活.脚本语言一般都是动态类型,可以不用声明变量类型而直接使用,也可以在运行期改变类型. 2.便捷.脚本语言是一种解释型语言,不需要编译成二进制代码,也不需要像Java一样生成字节…
List接口的toArray方法可以把一个结合转化为数组,但是使用不方便,toArray()方法返回的是一个Object数组,所以需要自行转变. toArray(T[] a)虽然返回的是T类型的数组,但是还是需要传入一个T类型的数组,这也挺麻烦的.我们期望输入的是一个泛型化的list,这样就能转化为泛型数组了. 看代码: import java.util.Arrays; import java.util.List; public class Client<T> { public static…