1 工具常用的快捷键
1)
Eclipse和MyEclipse,IBM,2001,Java编写,开源,跨平台跨语言
2)Alt+/快速内容提示(自己习惯定义)
3)Ctrl+1快速修补错误
4)Syso+Alt+/快速显示System.out.println()语句
5)Ctrl+Shift+F快速排版正确代码
6)Ctrl+Shift+X转大写,Ctrl+Shift+Y转小写
7)Ctrl+Shift+O一次性导入多个包
8)Ctrl+/加或减单行注释
9)
Ctrl+Shift+/加多行注释,Ctrl+Shift+\取消多行注释
10) 选中行+Alt+上下光标键移动行
2 使用断点调试程序,使用Junit测试程序
1)通过断点方式调式程序的每个步骤
2)Step over查看代码粗粒度执行过程
3)Step into查看代码细粒度执行过程
4)@Before和@After会在@Test方法执行前后各执行一次
5)@BeforeClass和@AfterClass是在类前后各执行一次
*3 静态导入和自动装拆箱
1)静态导入可以导入对象,属性,方法,*
2)语法:
import static java.lang.Math.PI;
import static java.lang.Math.pow;
import static java.lang.System.out;
3)在JDK5中,编译器自动将基本类型和对应的包装类型,自动转换
例如:int<->Integer
*4 增强for循环(foreach)
1)循环迭代数组/List/Set/Map集合
List:
List list = new ArrayList();
list.add("jack");
list.add("marry");
list.add("sisi");
for(String name : list){
System.out.print(name+"\t");
}
Set:
Set set = new HashSet();
set.add(100);
set.add(200);
set.add(300);
Iterator it = set.iterator();//Iterator为迭代器
while(it.hasNext()){
Integer key = it.next();
System.out.print(key+"\t");
}
2)对Map集合的二种迭代方式:
a)keySet()
Map map =
new HashMap();
map.put(100,"jack");
map.put(200,"marry");
map.put(300,"sisi");
Set set = map.keySet();
Iterator it =
set.iterator();
while(it.hasNext()){
Integer key = it.next();
String value =
map.get(key);
System.out.println(key+"-"+value); }
b)entrySet()
Map map = new HashMap();
map.put(100,"jack");
map.put(200,"marry");
map.put(300,"sisi");
Set> set = map.entrySet();
Iterator> it =
set.iterator();
while(it.hasNext()){
Entry entry = it.next();
Integer key =
entry.getKey();
String value =
entry.getValue();
System.out.println(key+"<->"+value);}
3)在迭代集合时,一定要动态通知Iterator,而不要动态通知List集合,应选用ListIterator。
ListIterator it = list.listIterator();
*5 可变参数
1)参数的个数不确定的
2)可变参数只能放置在参数的最后,即最右边
3)可变参数最少0个,最多1个
4)编译器将可变参数当作一个一维数组来对待
*6 枚举
1)当取值是某范围中的之一,这时可以使用枚举
2)当向用户提示严重的错误时,尽可以使用抛异常的方式通知客户端
3)可以对枚举在运行时验证
4)可以对枚举在编译时验证
5)枚举值相当于实例变量
6)枚举类与普通一致,可以继承或实现,如果有抽像方法的话,可以利用每个枚举值以匿名内部类的方式去实现
7)枚举值可以用在switch()语句中
8)枚举类常用方法如下:
a)name():显示枚举值
b)ordinal():显示枚举值对应的索引,从0开始
c)values():取得该枚举类对应的所有枚举值,是一个数组
d)valueOf():判段某个字符串是否属性枚举值之一
*7 反射
1)解析一个类的各个部分,形成一个对象。
2)外存中的类,加载到内存中,会形成该对象的Class类,例如:String类,加载到内存中,就是StringClass对象。
3)使用不同的方式,取得同一个类型的字节码对象Class是相同的。
类名.class Class c1 = String.class;
对象.getClass() Class c2 =
new String().getClass();
Class.forName() Class c3 =
Class.forName("java.lang.String");
4)通过getXxxxx()只能取得该类public的类型
通过getDeclaredXxxxxx()可以取得该类非public的类型
设置非public类型的可访问性,默认为false,不可访问
c.setAccessible(true);
5)反射可以反射private/public的构造方法,字段,普通方法
6)在反射main方法时,编译器会将数组自动拆分,取第一个值
解决方案:
//m.invoke(null,(Object)new
String[]{"A","B","C","D"});,将数组当作对象,此时编译器不进行拆分
m.invoke(null,new Object[]{new
String[]{"A1","B1","C1","D1"}});在数组中嵌入另一个数组
7.总步骤
①取得Person类对应的字节码对象Class
Class clazz =
Class.forName("cn.itcast.java.reflect.Person");
②取得该类的唯一构造方法
//Constructor c =
clazz.getConstructor(null);
//Constructor c =
clazz.getConstructor(String.class,int.class);
Constructor c = clazz.getDeclaredConstructor(null);
③创建实例
//Person p = (Person) c.newInstance(null);
//Person p = (Person)
c.newInstance("berry",10);
④
设置非public成员的访问性,默认false即不可访问性
c.setAccessible(true);
⑤ 执行方法
p.show();