随笔分类 -  改善Java代码

摘要:上一个建议之处了asList方法在转换基本类型数组时候存在的问题,在看下asList方法返回的列表有何特殊的地方.看代码: 编译没有任何问题,运行结果: 不支持List的add方法,看asList的源代码. 直接new 了一个ArrayList对象返回,难道ArrayList不支持add方法?问题就 阅读全文
posted @ 2016-07-04 17:39 SummerChill 阅读(1395) 评论(0) 推荐(0)
摘要:开发中经常用到Arrays和Collections这两个工具类. 在数组和列表之间进行切换.非常方便.但是也会遇到一些问题. 看代码: 运行结果: 为什么不是5? 事实上data确实是一个有5个元素的int类型数组,只是通过asList转换列表之后就只有一个元素了. 看Arrays.asList的方 阅读全文
posted @ 2016-07-04 17:08 SummerChill 阅读(852) 评论(4) 推荐(0)
摘要:注解的写法和接口很类似,都采用了关键字interface,而且都不能有实现代码,常量定义默认都是pulbic static final类型的. 他们的主要不同点是:注解在interface前加上@字符,而且不能继承,不能实现,这经常会给我们的开发带来一些障碍. 分析一个ACL(Access Cont 阅读全文
posted @ 2016-07-04 16:32 SummerChill 阅读(7313) 评论(0) 推荐(0)
摘要:为了更好的使用枚举,Java提供了两个枚举集合:EnumSet和EnumMap,这两个集合的使用方法都比较简单,EnumSet表示其元素必须是某一枚举的枚举项,EnumMap表示Key值必须是某一枚举的枚举项,由于枚举类型的实例数量固定并且有限,相对来说,EnumSet和EnumMap的效率会比其他 阅读全文
posted @ 2016-07-04 11:40 SummerChill 阅读(1803) 评论(0) 推荐(0)
摘要:工厂方法模式(Factory Method Patter)是"创建对象的接口",让子类决定实例化哪一个类,并使一个类的实例化延迟到其子类.工厂方法模式在我们的开发工作中,经常会用到. 下面以汽车制造为例,看看一般的工厂方法模式是如何实现的,代码如下: 这是最原始的工厂方法模式,有两个产品"福特骑车和 阅读全文
posted @ 2016-07-01 15:28 SummerChill 阅读(2551) 评论(0) 推荐(0)
摘要:switch的后跟枚举类型,case后列出所有的枚举项,这是一个使用枚举的主流写法,那留着default语句似乎没有任何作用了,程序已经列举出了所有的可能选项,肯定不会执行到default语句,. 错了...这个default还是很有用的,以我们定义的日志级别来举例说明,这是一个典型的枚举常量.如下 阅读全文
posted @ 2016-07-01 13:43 SummerChill 阅读(555) 评论(0) 推荐(0)
摘要:每个枚举都是java.lang.Enum的子类,都可以访问Enum类提供的方法,比如hashCode(),name(),valueOf()等..... 其中valueOf()方法会把一个String类型的名称转变为枚举项,也就是枚举项中查找出字面值与该参数相等的枚举项,虽然这个方法很简单,但是JDK 阅读全文
posted @ 2016-07-01 13:16 SummerChill 阅读(13429) 评论(0) 推荐(1)
摘要:使用枚举定义常量时,会伴有大量的switch语句判断,目的是伪类每个枚举项解释其行为,例如: 上面的代码输入 了一个Season类型的枚举,然后使用switch进行匹配,目的是输出每个季节的活动.但是代码是否有问题? doSports(null),似乎会打印出"输出错误",因为在switch中没有匹 阅读全文
posted @ 2016-07-01 12:49 SummerChill 阅读(8156) 评论(0) 推荐(0)
摘要:上一个建议解释了为什么要使用forName,本建议就说说哪些地方不适合使用动态加载. 如果forName要加载一个类,那它必须是一个类 8中基本类型就排除在外.它们不是一个具体的类. 其次它必须具有可追溯的类路径...否则就会报ClassNotFoundException. 在Java中,数组是一个 阅读全文
posted @ 2016-06-29 11:12 SummerChill 阅读(388) 评论(0) 推荐(0)
摘要:动态加载(Dynamic Loading)是指在程序运行时加载需要的类库文件,对Java程序来说,一般情况下,一个类文件在启动时或首次初始化时会被加载到内存中,而反射则可以在运行时再决定是否需要加载一个类,比如从Web上接受一个String参数作为类名,然后在JVM中加载并初始化,这就是动态加载,此 阅读全文
posted @ 2016-06-29 11:11 SummerChill 阅读(574) 评论(0) 推荐(0)
摘要:Java的Class类提供了很多的getDeclaredxxx方法和getxxx方法,例如getDeclaredmethod和getMethod成对出现,getDeclaredConstructors和getConstructors也是成对出现. 那这两者有什么区别呢? 上面的异常是说m2变量的ge 阅读全文
posted @ 2016-06-29 11:04 SummerChill 阅读(291) 评论(0) 推荐(0)
摘要:Java语言是先把Java源文件编译成后缀为class的字节码文件,然后再通过ClassLoader机制把这些类文件加载到内存中,最后生成实例执行的,这是Java处理的基本机制,但加载到内存中的数据是如何描述一个类的呢? 比如在Dog.class文件中定义了的是一个Dog类,那它在内存中是如何展现的 阅读全文
posted @ 2016-06-29 10:55 SummerChill 阅读(303) 评论(0) 推荐(0)
摘要:从哲学上来说,很难描述一个具体的人,你可以描述它的长相,性格,工作等,但是人都是有多重身份的,估计只有使用多个And(与操作)将所有的描述串联起来才能描述一个完整的人,人在不同的环境中角色也在不断的更换. 用Java程序来对一类人进行管理,比如在公交车费优惠系统中,对部分人员,工资低于2500元的上 阅读全文
posted @ 2016-06-29 10:54 SummerChill 阅读(1275) 评论(0) 推荐(0)
摘要:List接口的toArray方法可以把一个结合转化为数组,但是使用不方便,toArray()方法返回的是一个Object数组,所以需要自行转变. toArray(T[] a)虽然返回的是T类型的数组,但是还是需要传入一个T类型的数组,这也挺麻烦的.我们期望输入的是一个泛型化的list,这样就能转化为 阅读全文
posted @ 2016-06-29 10:54 SummerChill 阅读(352) 评论(0) 推荐(0)
摘要:什么叫做协变(covariance)和逆变(contravariance)? 在变成语言的类型框架中,协变和逆变是指宽类型和窄类型在某种情况下(如参数,泛型,返回值)替换或交换的特性,简单的说,协变是用一个窄类型替换宽类型,而逆变则是用宽类型覆盖窄类型. 协变:宽类型 >窄类型 逆变:窄类型 >宽类 阅读全文
posted @ 2016-06-28 17:24 SummerChill 阅读(753) 评论(0) 推荐(0)
摘要:Java泛型支持通配符(Wildcard),可以单独使用一个"?"表示任意类,也可以使用extends关键字标识某一类(接口)的子类型,还可以使用super关键字标识某一类(接口)的父类型,但问题是什么时候该用extends,什么时候该用super? (1)泛型结构只参与"读"操作则限定上界(ext 阅读全文
posted @ 2016-06-28 17:23 SummerChill 阅读(609) 评论(0) 推荐(0)
摘要:Arrays工具类有一个方法asList可以把一个变长参数或数组变成列表,但是它有一个缺点:它所生成的List长度是不可改变的,而这在我们的项目开发中很不方便. 如果你期望生成的列表长度是可变的,那就需要自己来写一个数组的工具类了.代码如下: 与Arrays.asList的调用方式相同,我们传入一个 阅读全文
posted @ 2016-06-28 17:13 SummerChill 阅读(979) 评论(0) 推荐(0)
摘要:泛型类型在编译期被擦除,我们在类初始化时将无法获得泛型的具体参数,比如这样的代码: 这段代码有什么问题? t,tArray,list都是类变量,都是通过new声明了一个类型,看起来非常的相似. 但是这段代码是通不过的,因为编译期在编译时需要获得T类型,但是泛型在编译期类型已经被擦除了,所以new T 阅读全文
posted @ 2016-06-28 17:12 SummerChill 阅读(2971) 评论(0) 推荐(0)
摘要:泛型可以减少强制类型的转换,可规范集合的元素类型,还可以提高代码的安全性和可读性,正是因为有了这些优点,自从Java引入泛型之后,项目的编码规则上便多了一条,优先使用泛型. Java泛型(Generic)的引入加强了参数类型的安全性,减少了类型的转换,它与C++中的模板templates比较类似.但 阅读全文
posted @ 2016-06-28 17:04 SummerChill 阅读(2361) 评论(0) 推荐(0)
摘要:思考这样一个案例: 阅读全文
posted @ 2016-06-28 16:59 SummerChill 阅读(255) 评论(0) 推荐(0)