@version 1.0 2011.01.10
1,引言
→基础+学习能力
→ide工具开发配置(Eclipse)
java、javac的jdk版本
→知识面(java ee IDE jms jmx jndi...)、jdk5/jdk6新特性
2,jdk5新特性要摘
import static 导入一个类中的某个或所有静态方法
(import 导入一个类或包中所有类)
→overload vs override
→可变参数 ...(隐藏数组)
→增加for循环 (实现Iterable接口的集合类)
for(VariableModifiers Type Identifier:Expression)statement
→自动拆装箱autoboxing/unboxing(将对象中的基本数据形态信息从对象中自动取出,隐藏细节)
说明:http://www.talentdigger.cn/home/space-6-do-blog-id-2368.html
→享元模式(flyweight)
3,枚举 enum
→说明和应用:http://tech.e800.com.cn/articles/2009/97/1252286198897_1.html
→eg
----------------------------------
import java.util.Date;
public class EnumTest {
public static void main(String[] args) {
WeekDay1 weekDay = WeekDay1.MON;
System.out.println(weekDay.nextDay());
WeekDay weekDay2 = WeekDay.FRI;
System.out.println(weekDay2);
System.out.println(weekDay2.name());
System.out.println(weekDay2.ordinal());
System.out.println(WeekDay.valueOf("SUN").toString());
System.out.println(WeekDay.values().length);
}
public enum WeekDay{
SUN(1),MON(),TUE,WED,THI,FRI,SAT;
private WeekDay(){System.out.println("first");} //带有构造函数
private WeekDay(int day){System.out.println("second");}
}
public enum TrafficLamp{
RED(30){ //带有抽象方法
public TrafficLamp nextLamp(){
return GREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp(){
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp(){
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){this.time = time;}
}
}
→单成员枚举可以作为单例实现方式
5,反射★
→Class类 描述Java程序中的Java类,代表Java类在内存中的字节码
类.class\对象.getClass()\Class.forname("类名")
→数组类型实例对象 Class.isAarry
→反射 把Java中的各种成分映射成相应的Java类
Field、Method、Constructor、Package等
→构造方法反射Constructor
//new String(new StringBuffer("abc")); //需求:反射生成字符串abc
Constructor constructor = String.class.getConstructor(StringBuffer.class);
String str = (String)constructor.newInstance(/*"abc"*/new StringBuffer("abc"));
System.out.println(str.charAt(2));
→成员变量反射Field
//需求:反射获得成员变量的值
ReflectPoint pt1 = new ReflectPoint(3,5);
Field fieldY = pt1.getClass().getField("y");
//fieldY不是对象身上的变量,而是类上,要用它去取某个对象上对应的值
System.out.println(fieldY.get(pt1));
Field fieldX = pt1.getClass().getDeclaredField("x"); //私有
fieldX.setAccessible(true); //暴力反射
System.out.println(fieldX.get(pt1));
→成员方法反射Method
//TestArguments.main(new String[]{"111","222","333"});//需求:反射调用循环显示数组内容成员方法
String startingClassName = args[0];
Method mainMethod = Class.forName(startingClassName).getMethod("main", String[].class);
//mainMethod.invoke(null, new Object[]{new String[]{"111","222","333"}});
mainMethod.invoke(null, (Object)new String[]{"111","222","333"});
→面向对象的专家模式
→数组反射以及数组与Object的关系
----------------------------------
int [] a1 = new int[]{1,2,3};
int [] a2 = new int[4];
int[][] a3 = new int[2][3];
String [] a4 = new String[]{"a","b","c"};
System.out.println(a1.getClass() == a2.getClass());
System.out.println(a1.getClass() == a4.getClass()); //*
System.out.println(a1.getClass() == a3.getClass()); //*
System.out.println(a1.getClass().getName());
System.out.println(a1.getClass().getSuperclass().getName());
System.out.println(a4.getClass().getSuperclass().getName());
Object aObj1 = a1;
Object aObj2 = a4;
//Object[] aObj3 = a1;
Object[] aObj4 = a3;
Object[] aObj5 = a4;
System.out.println(a1);
System.out.println(a4);
System.out.println(Arrays.asList(a1));
System.out.println(Arrays.asList(a4));
//打印传入内容
printObject(a4);
printObject("xyz");
private static void printObject(Object obj) {
Class clazz = obj.getClass();
if(clazz.isArray()){
int len = Array.getLength(obj);
for(int i=0;i<len;i++){
System.out.println(Array.get(obj, i));
}
}else{
System.out.println(obj);
}
}
----------------------------------
→ArrayList vs HashSet、HashCode分析(哈希算法)
→eg HashSet机制和内存泄漏
Collection collections = new HashSet();
ReflectPoint pt1 = new ReflectPoint(3,3);
ReflectPoint pt2 = new ReflectPoint(5,5);
ReflectPoint pt3 = new ReflectPoint(3,3);
collections.add(pt1);
collections.add(pt2);
collections.add(pt3);
collections.add(pt1);
pt1.y = 7;
collections.remove(pt1); //内存泄漏
→开发框架原理的理解(反射的应用)
本文详细介绍了Java 5引入的新特性,包括静态导入、可变参数、增强型for循环及自动拆装箱等,并深入探讨了枚举类型的新用法和反射机制的应用。通过示例展示了如何使用反射进行动态类加载、构造方法调用、成员变量获取及方法调用。
1835

被折叠的 条评论
为什么被折叠?



