
effective java
文章平均质量分 71
iteye_8208
这个作者很懒,什么都没留下…
展开
-
避免创建不必要的对象
public class AutoBoxing { public static void sum() { long start = new java.util.Date().getTime(); //使用基本数据类型 long sum = 0L; for(long i = 0; i < Integer.MAX_VALUE; i++) { ...原创 2016-03-29 13:39:18 · 107 阅读 · 0 评论 -
java异常编程
* 只针对异常的情况才使用异常:异常应该只用于异常的情况下,它永远不应该用于正常的控制流。 如果类具有“状态相关”的方法,即只有在特定的条件下才能被调用的方法,这个类往往也应该有个单独 的状态测试方法。如Iterator的hasNext()和next()。***************************************************************...原创 2016-04-03 03:25:20 · 151 阅读 · 0 评论 -
非public类中的public方法有什么作用
package com.jaeson.javastudy.effectivejava;public abstract class PublicMethodInNonPublicClass { public static PublicMethodInNonPublicClass getInstance() { return new NonPublicClass(); }...原创 2016-04-17 13:25:13 · 490 阅读 · 0 评论 -
交替构造器调用机制
public class PrivateConstructorCapture { public static void main(String[] args) { System.out.println(new PrivateConstructorCapture().new MyThing()); } class Thing { Thing(int i) {...原创 2016-05-03 13:15:09 · 144 阅读 · 0 评论 -
被动使用不会引发类初始化
public class PassiveUse { public static void main(String[] args) { System.out.println(NewBaby.hoursOfSleep); System.out.println(NewBaby.greeting); } static { System.out.print...原创 2016-05-18 11:44:16 · 147 阅读 · 0 评论 -
Java中的自动装箱与拆箱
自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应的对象。自动装箱与拆箱的机制可以让我们在Java的变量赋值或者是方法调用等情况下使用原始类型或者对象类型更加简单直接。如果你在Java1.5下进行过编程的话,你一定不会陌生这一点,你不能直接地向集合(Collections)中放入原始类型值,因为集合只接收对象。通常这种情况下你的做法是,将这些原始类型的值转换成对象...原创 2016-10-04 12:46:26 · 104 阅读 · 0 评论 -
java字符串的拼接
不可变的String对象在Java中,String对象是不可变的(Immutable)。在代码中,可以创建多个某一个String对象的别名。但是这些别名都是的引用是相同的。比如s1和s2都是”droidyue.com”对象的别名,别名保存着到真实对象的引用。所以s1 = s2fileos:false123String s1 = "droidyue....原创 2016-10-04 13:02:30 · 155 阅读 · 0 评论 -
Java中的substring真的会引起内存泄露么?
在Java中开发,String是我们开发程序可以说必须要使用的类型,String有一个substring方法用来截取字符串,我们想必也常常使用。但是你知道么,关于Java 6中的substring是否会引起内存泄露,在国外的论坛和社区有着一些讨论,以至于Java官方已经将其标记成bug,并且为此Java 7 还重新进行了实现。读到这里可能你的问题就来了,substring怎么会引起内存泄露呢?...原创 2016-10-05 17:39:33 · 280 阅读 · 0 评论 -
探究Java中的克隆
本文将尝试介绍一些关于Java中的克隆和一些深入的问题,希望可以帮助大家更好地了解克隆。Java中的赋值在Java中,赋值是很常用的,一个简单的赋值如下1234567//原始类型int a = 1;int b = a;//引用类型String[] weekdays = new String[5];String[]...原创 2016-10-05 17:41:19 · 112 阅读 · 0 评论 -
译文:理解Java中的弱引用
不久之前,我面试了一些求职Java高级开发工程师的应聘者。我常常会面试他们说,“你能给我介绍一些Java中得弱引用吗?”,如果面试者这样说,“嗯,是不是垃圾回收有关的?”,我就会基本满意了,我并不期待回答是一篇诘究本末的论文描述。然而事与愿违,我很吃惊的发现,在将近20多个有着平均5年开发经验和高学历背景的应聘者中,居然只有两个人知道弱引用的存在,但是在这两个人之中只有一个人真正了解这方面...原创 2016-10-06 13:12:41 · 103 阅读 · 0 评论 -
对于所有对象都通用的方法
import java.util.*;public class OverrideObjectMethod { public static void main(String[] args) { Map<PhoneNumberBad, String> map = new HashMap<PhoneNumberBad, String>(); m...原创 2016-04-03 03:23:10 · 148 阅读 · 0 评论 -
多个构造器参数要考虑使用构建器模式(Builder模式)
public class BuilderPattern { private final String name; private final String category; private final int size; private final int code; private BuilderPattern(Builder builder) { t...原创 2016-04-03 03:22:52 · 144 阅读 · 0 评论 -
用enum代替int常量
public class EnumObject { public static void main(String[] args) { double x = 1.11; double y = 2.01; for (Operation op : Operation.values()) System.out.printf("%f %s %f = %f%n",...原创 2016-03-29 13:39:38 · 139 阅读 · 0 评论 -
java 泛型Generics
import java.util.*;public class Generics { //无限制的通配符类型 static int numElementsInCommon(Set<?> s1, Set<?> s2) { int result = 0; for (Object o : s1) if (s2.contains(o)) ...原创 2016-03-30 14:03:33 · 97 阅读 · 0 评论 -
static、final、private方法的区别
public class FinalAndPrivate { @SuppressWarnings("all") public static void main(String[] args) { Parent p = new Parent(); p.call(); p.call2(); p.print(); p.staticMethod(); ...原创 2016-03-31 12:45:38 · 287 阅读 · 0 评论 -
用私有构造器或者枚举类型enum强化singleton
public class Singleton { private static Singleton instance = new Singleton(); private Singleton() { } public static Singleton getInstance() { return instance; } public void ser...原创 2016-03-31 12:46:22 · 174 阅读 · 0 评论 -
复合优先于继承
public class CompositionOverInheritance { public static void main(String[] args) { InstrumentedSet<String> st = new InstrumentedSet<String>(new HashSet<String>()); Instrumen...原创 2016-03-31 12:46:30 · 127 阅读 · 0 评论 -
通用程序设计
import java.util.*;public class CommonProgram { enum Suit { CLUB, DIAMOND, HEART, SPADE } enum Rank { ACE, DEUCE, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING } pr...原创 2016-03-31 12:48:48 · 217 阅读 · 0 评论 -
同步访问共享的可变数据
public class Concurrency { //方法一:使用volatile关键字,不能执行互斥访问,但能保证看到其他线程修改的结果。 private static volatile boolean stopRequested; //方法二:使用同步synchronized关键字,可以看到其他线程修改的结果(必须同步读写方法) private static synch...原创 2016-04-01 13:12:24 · 157 阅读 · 0 评论 -
方法设计原则
import java.util.*;public class MethodDesign { private Date startday; public MethodDesign() { } public MethodDesign(Date startday) { if(startday == null) throw new IllegalArgument...原创 2016-04-01 13:13:06 · 224 阅读 · 0 评论 -
接口和类
接口中的方法自动是public abstract 的. * 接口优先于抽象类: java提供了两种机制可以用来定义允许多个实现的类型:接口和抽象类。 最明显的区别在于,抽象类允许包含某些方法的实现,接口则不允许。 更重要的区别在于,为了实现抽象类定义的类型,类必须成为抽象类的子类。 因为java只允许单继承,所以抽象类受到了极大的限制。 因为java允许实现多个接口...原创 2016-04-01 13:14:27 · 128 阅读 · 0 评论 -
返回零长度的数组或者集合,而不是null
如果一个方法的返回值类型是集合或者数组 ,如果在方法内部需要返回的集合或者数组是零长度的,也就是没有实际对象在里面,我们也应该放回一个零长度的数组或者集合,而不是返回null。如果返回了null,客户端程序员就要检测返回的是不是null,然后才能进行下一步操作,否则就会引发NullPointException。但是如果是返回的的是空数组或者集合,就不会再后续的使用这个对象上,引发空指...原创 2016-11-26 18:41:09 · 177 阅读 · 0 评论