特性列表
泛型
枚举
自动装箱拆箱
可变参数
注解
foreach循环(增强for、for/in)
静态导入
格式化(System.out.println 支持%s %d等格式化输出)
线程框架/数据结构 JUC
Arrays工具类/StringBuilder/instrument
1、泛型
所谓类型擦除指的就是Java源码中的范型信息只允许停留在编译前期,而编译后的字节码文件中将不再保留任何的范型信息。也就是说,范型信息在编译时将会被全部删除,其中范型类型的类型参数则会被替换为Object类型,并在实际使用时强制转换为指定的目标数据类型。而C++中的模板则会在编译时将模板类型中的类型参数根据所传递的指定数据类型生成相对应的目标代码
Map<Integer, Integer> squares = new HashMap<Integer, Integer>();
- 通配符类型:避免unchecked警告,问号表示任何类型都可以接受
public void printList(List<?> list, PrintStream out) throws IOException { for (Iterator<?> i = list.iterator(); i.hasNext(); ) { out.println(i.next().toString()); } }
- 限制类型
public static <A extends Number> double sum(Box<A> box1,Box<A> box2){ double total = 0; for (Iterator<A> i = box1.contents.iterator(); i.hasNext(); ) { total = total + i.next().doubleValue(); } for (Iterator<A> i = box2.contents.iterator(); i.hasNext(); ) { total = total + i.next().doubleValue(); } return total; }
2、枚举
- EnumMap
public void testEnumMap(PrintStream out) throws IOException { // Create a map with the key and a String message EnumMap<AntStatus, String> antMessages = new EnumMap<AntStatus, String>(AntStatus.class); // Initialize the map antMessages.put(AntStatus.INITIALIZING, "Initializing Ant..."); antMessages.put(AntStatus.COMPILING, "Compiling Java classes..."); antMessages.put(AntStatus.COPYING, "Copying files..."); antMessages.put(AntStatus.JARRING, "JARring up files..."); antMessages.put(AntStatus.ZIPPING, "ZIPping up files..."); antMessages.put(AntStatus.DONE, "Build complete."); antMessages.put(AntStatus.ERROR, "Error occurred."); // Iterate and print messages for (AntStatus status : AntStatus.values() ) { out.println("For status " + status + ", message is: " + antMessages.get(status)); } }
- switch枚举
public String getDescription() { switch(this) { case ROSEWOOD: return "Rosewood back and sides"; case MAHOGANY: return "Mahogany back and sides"; case ZIRICOTE: return "Ziricote back and sides"; case SPRUCE: return "Sitka Spruce top"; case CEDAR: return "Wester Red Cedar top"; case AB_ROSETTE: return "Abalone rosette"; case AB_TOP_BORDER: return "Abalone top border"; case IL_DIAMONDS: return "Diamonds and squares fretboard inlay"; case IL_DOTS: return "Small dots fretboard inlay"; default: return "Unknown feature"; } }
3、自动拆箱/装箱
将primitive类型转换成对应的wrapper类型:Boolean、Byte、Short、Character、Integer、Long、Float、Double
4、可变参数
private String print(Object... values) { StringBuilder sb = new StringBuilder(); for (Object o : values) { sb.append(o.toString()) .append(" "); } return sb.toString(); }
5、注解
- Inherited表示该注解是否对类的子类继承的方法等起作用
@Documented @Inherited @Retention(RetentionPolicy.RUNTIME) public @interface InProgress { }
- Target类型
- Rentation表示annotation是否保留在编译过的class文件中还是在运行时可读。