在eclipse下如何使用调试工具
考察一个程序员水平的高低,编程的能力, 调试能力
常用的几个调试快捷键
f5 跳入
f6 跳过 (逐步执行) f7 跳出
在调试过程中,点击红色方块,表示终止这次调试活动.
大家在编写java
程序,有时,你希望看看jdk源码.
可以通过配置完成 函数和源码的关联.
快捷键:
ctrl+shift+/ /* */ ctr+shiift+\ 取消注释
ctrl+/ // ctrl+/ 取消
? junit
junit 是一个专门用于测试的框架,可以测试某个函数是否正确, junit (unit 就是单元) 可以一次测一个函数,也可一次测多个函数.
? junit快速入门
如何选择junit
? junit是一款很好的测试 mvc 的 model 部分的工具,在
软件公司大量使用.
Cat.java
package com.hsp.junit;
public class Cat { public void cry(){ System.out.println("猫猫叫.."); System.out.println("hhh"); } public void count(int num){ int result=0; for(int i=0;i
JunitTest1.java
package com.hsp.junit2; import org.junit.Test; import com.hsp.junit.Cat; public class JunitTest1 { //这就是一个junit测试函数,测试Cat类的cry是否正确
//junit大量的用在测试model组件 @Test public void testCry(){ //创建Cat 对象 Cat cat=new Cat(); cat.cry(); } @Test public void testCount(){ Cat cat=new Cat(); cat.count(20); } }
? junit的细节说明:
junit的使用步骤: ① 创建Juint case ② 写一个junit测试函数该函数加 @Test ③ 然后初始化某个类实例,调用你希望测试的函数即可 ④ 当测试完后,返回绿条说明被测试函数ok, 返回一个红条说明 err
? 静态导入
静态导入这个功能有点变态,所以我基本不用,但是作为面试题很可能被问. 快如入门:
package com.hsp.staticimport;
//这就话,就是导入System类的out静态变量 //这样导入后就可直接使用out变量的方法 import static java.lang.System.out;
//导入指定类全部静态属性方法 import static java.lang.Math.*; public class Demo1 { public static void main(String[] args) { out.println("hello"); abs(9); } }
? 基本数据类型 和 对应的包装类 java中有八种基本数据类型
byte =>Byte short=>Short int=>Interger long =>Long double=>Double char=>Character float =>Float bool=>Boolean
为什么有包装类: java设计者认为 八种基本数据类型,用的地方很多,但是他们的功能比较弱,于是jdk5.0后增加了对应的八种包装类。
? 自动装箱/拆箱功能 快如入门案例: 两个案例:
//经典的装箱案例(int->Integer)装箱 Integer ii=34;
int a=ii;//(Integer->1int)拆箱
第二个案例
List list=new ArrayList();
list.add(1);//自动装箱 list.add(2);
//for循环增强
for(int i=0;i int j=(Integer)list.get(1); //自动拆箱
? 增强for循环 1. 对数组增强 案例:
int []arr={4,5,78};
//传统取法
for(int i=0;i System.out.println("*************"); //增强for循环
for(int i: arr){
System.out.println(i); }
2. 对List的增强
特别注意 :list是有序集合(先放入的先取出,后放入的后取出)
// TODO Auto-generated method stub List list=new ArrayList();
list.add("宋江"); list.add("林冲"); list.add("武松"); list.add("顺平"); //传统取法1
for(int i=0;i System.out.println(list.get(i)); }
System.out.println("*******list传统取法2************"); //传统取法2(迭代器)
Iterator iterator=list.iterator(); while(iterator.hasNext()){
Object obj=iterator.next(); System.out.println(obj); }
System.out.println("************"); //for增强取法
for(Object obj: list){
System.out.println(obj); }
?面试题:
Dog dog=new Dog(); System.out.println(dog);
问上面的代码,在输出dog对象实例,究竟是做什么事情?
答: 会调用dog 的 toString() 方法. 如果Dog类没有重写toString(),默认会输出dog对象实例的 hash地址
3. set集合增强
特别说明: set集合不是有序集合
案例:
Set set=new HashSet(); set.add("aaa"); set.add("bbb"); set.add("ccc");
//传统取法1
Iterator iterator=set.iterator(); while(iterator.hasNext()){
Object obj=iterator.next(); System.out.println(obj); }
System.out.println("*********增强set*****"); //增强for取法
for(Object obj: set){
System.out.println(obj); }
4. map集合
传统取法基本原理图
代码:
Map map=new HashMap();
//map集合时 key : value 对应出现 map.put("aaa", "孙悟空"); map.put("bbb", "白龙马"); map.put("ccc", "猪八戒"); //传统取法(使用迭代器) Set key=map.keySet();
Iterator iterator=key.iterator(); System.out.println(iterator); while(iterator.hasNext()){
Object key_obj=iterator.next(); Object val_obj=map.get(key_obj);
System.out.println("key = "+key_obj+" val="+val_obj); }
第二传统取法
Map map=new HashMap();
//map集合时 key : value 对应出现 map.put("aaa", "孙悟空"); map.put("bbb", "白龙马"); map.put("ccc", "猪八戒");
System.out.println("*********第二取法********"); //第二种传统取法
Set entryset=map.entrySet(); //Map.entry Iterator iterator2=entryset.iterator(); while(iterator2.hasNext()){
Map.Entry me= (Map.Entry) iterator2.next();
System.out.println(me.getKey()+" "+me.getValue()); }
增强for循环
Map map=new HashMap();
//map集合时 key : value 对应出现 map.put("aaa", "孙悟空"); map.put("bbb", "白龙马"); map.put("ccc", "猪八戒"); //map的增强for循环取法
System.out.println("***************增强*****"); for(Object obj:map.entrySet() ){ Map.Entry me=(Map.Entry)obj;
System.out.println(me.getKey()+" "+me.getValue()); }
//map的增强for循环
for(Object obj: map.keySet()){
System.out.println("key ="+obj +" 值"+map.get(obj));
}
? 可变参数
jdk5.0后,允许输入的参数,个数可以不确定,可变参数将会被当做一个数组对待.
快速入门案例:
//计算多个数的和
//int ... vals就是可变参数
public static void sum(int ... vals){ }
//这时,编译器会把vals当做一个数组对待 for(int i=0;i 调用:
sum(5,7,90);
可变参数的使用注意事项 ① 一个函数最多只能有一个可变参数 ② 一个函数可以有可变参数,也可以有非可变参数,比如: sum(String name,float sal,int ... vals); ③ 可变参数一定是最后参数.
? Arrays.asList()的用法
有时候,我们需要报数组,转成一个List 集合,就可以使用Arrays.asList()方法. 案例:
String []strs={"老鼠","猫","老虎"}; List list=Arrays.asList(arr);
for(int i=0;i System.out.println(list.get(i)); }
使用的注意事项: ① 转换的数组不能是基本数据类型(8类),而是引用类型的数组才能自动转为 list集合 ② 如果你一定要把多个基本数据类型,转为list集合 List list=Arrays.asList(5,90,90,88); ? 枚举
1. 为什么需要枚举enum
Person p1=new Person();
p1.setName("小明"); p1.setSex("abc");
System.out.println(p1.getName()+" "+p1.getSex());
当我们给性别赋值时候,没有办法控制程序员的输入. 2. 解法方法 ① 传统方法(事后诸葛亮) //定义person class Person{
private String name; private String sex;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getSex() { return sex; }
public void setSex(String sex) { }
}
//事后诸葛亮处理不好
if(!sex.matches("男|女")){
throw new RuntimeException("性别的值不对"); }
this.sex = sex;
② 模拟enmu类型 final class Sex{ }
public static Sex man=new Sex("男"); public static Sex woman=new Sex("女"); private String val; //把构造方法设为private
private Sex(String val){ this.val=val; }
public String getVal() { return val; }
③ 用sun在jdk5.0使用enum
//sun公司jdk 5.0后加入enum,枚举的本质就是java类 enum Sex{ }
man("男"),woman("女"),middle("中间");
//man("男") <==>public static Sex man=new Sex("男"); //
private String val;
private Sex(St