第五周学习总结

20145113第五周学习总结

教材学习内容总结

1.异常:
Throwble:分为Error与Exception。而Exception又分为非检查性异常(RuntimeException)与检查性异常。
RuntimeException:空指针异常、数组下标越界异常、类型转换异常、算术异常....由java虚拟机自动抛出,自动捕获。
检查异常:文件异常(IOException)、SQl异常(SQLException)....需要手动添加捕获。

2.捕获和处理异常
try-catch及try-catch-finally
e.printStackTrace()输出异常。

    if (a==1)
    {
        while(true){
            System.out.println("please input the book's name:\n");
            String b=input.nextLine();
            try
            {
                for(int i=0;;i++)
                {
                    if(b.equals(ob[i])) {
                        System.out.println("book:" + ob[i] + "\n");
                        break;
                    }
                }
                break;
            }
            catch (RuntimeException e)
            {
                System.out.println("none");
            }
        }

    }

尝试使用运行时异常处理来编写了模拟图书馆借书,让用户分别按“书名”和“图书序号”查找图书,根据输入信息进行适当的异常处理 ##代码调试过程中的问题和解决过程

1.List使用

add()方法的使用add(Object e)与add(int index,Object e): 开始时如下编写,则显示编译错误

 public void TestAdd(){
    Courses cr1=new Courses("1","java");
    SeCourse.add(cr1);
    Courses temp=SeCourse.get(0);
    System.out.println();
}

因为对象存入集合都变成Object类型,取出时需要类型转换。

 Courses temp=SeCourse.get(0);

则需要强制转换:

Courses temp=(Courses)SeCourse.get(0);

则得到运行结果:

继续编写

Courses cr2=new Courses("2","C");
    SeCourse.a
    SeCourse.add(1,cr2);
    Courses temp1=(Courses)SeCourse.get(1);

add可以选择插入的位置,如上在0的位置插入则原先0位置的值将往后移,但是选择插入位置的时候不能越界。

addAll()的使用方法:add(collection c)与addAll(int index,collection c)

 Courses []course={new Courses("3","Math"),new Courses("4","Chinese")};
    SeCourse.addAll(Arrays.asList(course))

需要通过使用Arrays中的方法将couse转为实例。

将集合中的元素取出

 public void getTest(List SeCourse)
{
    int size=SeCourse.size();
    for(int i=0;i<size;i++)
    {
        Courses temp=(Courses)SeCourse.get(i);
        System.out.println("取得课程:"+temp.getId()+":"+temp.getName()+"\n");
    }
}

可以用.size方法取得集合的长度。

public void testIterator(List SeCourse)
{
   System.out.println("通过迭代器访问:\n");
   Iterator it=SeCourse.iterator();
   while (it.hasNext())
   {
       Courses cr=(Courses)it.next();
       System.out.println("取得课程:"+cr.getId()+":"+cr.getName()+"\n");
   }
}

it.hasNext()判断下个元素是否为空,不为空返回true,it.next()取得下一个值。
简便写法

 private void simple(List SeCourse)
{
   for(Object o:SeCourse)
   {
       Courses cr=(Courses) o;
       System.out.println("取得课程:"+cr.getId()+":"+cr.getName()+"\n");
   }
}

修改集合中的某个元素。使用set(int index,Object element)

 public List replace(List SeCourse)
{
    System.out.println("修改第二个元素\n");
    SeCourse.set(1,new Courses("5","Music"));
    return SeCourse;
}

删除集合中的某个元素。使用remove语句,使用方法与add相似

public List remove(List SeCourse)
{
    System.out.println("移除第二个\n");
    SeCourse.remove(1);
    return SeCourse;
}

使用removeAll语句与addAll相似

public List removeAll(List SeCourse)
{
    System.out.println("移除第一位与第二位\n");
    Courses[] course1={(Courses)SeCourse.get(0),(Courses)SeCourse.get(1)};
    SeCourse.removeAll(Arrays.asList(course1));
    return SeCourse;
}

在写的时候都是加入Course类型的数据,尝试加入String类型的数据

 public List testtyple(List SeCourse)
{
    System.out.println("添加一个字符串试试\n");
    SeCourse.add("input a String" );
    return SeCourse;
}

虽然编译通过了,但是在执行输出的时候String类型不能强转为Course类型。如果想要在编译期间对添加元素进行检查则可以使用泛型。

public List<Courses> Sleccourse;

在List后用<>中加类型。中间记得要实例化

protected Listfan()
{
    this.Sleccourse=new ArrayList<Courses>();
}

实例化中new ArrayList()也要加类型。使用泛型后如果再向集合中添加String类型的数据时候则会出现编译错误。

泛型结合可以添加泛型的子类的对象实例。

CourseChild ccr=new CourseChild();
    ccr.setName("C");
    ccr.setId("5");
    Sleccourse.add(ccr);

使用泛型在输出的时候也可以简便很多不用从Object类型转为Course

 protected void displays()
{
    for(Courses co:Sleccourse)
    {
        System.out.printf(co.getId() + ":" + co.getName()+"\n");
    }
}

使用indexOf()方法,从头开始找到元素的索引位置,lastindexOf()方法从尾开始找到元素的索引位置。

判断List中是否包含某个对象,用.contains()。

public void Contain()
{
    Courses c2=(Courses)SeCourse.get(3);
    System.out.println("选课系统中有"+c2.getId()+":"+c2.getName()+"   "+SeCourse.contains(c2)+"\n");
    Courses c1=new Courses();
    c1.setName(c2.getName());
    c1.setId(c2.getId());
    System.out.println("选了系统中有"+c1.getId()+":"+c1.getName()+"   "+SeCourse.contains(c1)+"\n");

}

同样的name与ID但是第二个显示false,因为他们是两个完全不同的对象。如果想通过输入名字就可以判断序列中是否含有这个元素,用for循环虽然可以达到要求但比较麻烦。探究contains的原理,是通过调用每个Course的equals方法比较序列中是否有相同的,只要有相同的则就返回true。如果想要使用contains来直接通过名字判断是否存在,则需要重写Course中的equals的方法。

@Override
public boolean equals(Object obj)
{
    if(this==obj)
        return true;
    if(obj==null)
        return  false;
    if(!(obj instanceof Courses))
        return false;
    Courses courses=(Courses)obj;
    if(this.getName()==null) {
        if (courses.getName() == null)
            return true;
        else
            return false;
    }else {
        if (this.getName().equals(courses.getName()))
        return true;
        else
            return false;
    }
}

再次运行程序

set中与List一样通过修改Course中的equals方法。

2.Set接口的使用

public Set<Courses>coursese;
coursese=new HashSet<Courses>();

Set是元素无序并且不可以重复的集合,所以不能用get方法取出元素

Student stu=new Student(Id,neme);
System.out.printf(stu.getName()+"所选课程位:\n");
for(Courses co:stu.coursese)
{
    System.out.println("选择课程:"+co.getId()+":"+co.getName()+"\n");
}

get传入键值,如果如果映射关系存在则返回的就是key所对应的value值,否则返回一个空对象。

3.Map接口的使用

public Map<String,Student> student;
student= new HashMap<String,Student>();

通过put进行添加元素

Student stu=new Student(ID,names);
student.put(ID,stu);

size则可以取得长度,get(key)如果存在则返回对应的key值,否则返回null,put(key,value),remove(key)

Set<String>keyset=student.keySet();
    System.out.println("一共有"+student.size()+"个学生\n");
    for(String key:keyset)
    {
        Student info=student.get(key);
        System.out.println(key+":"+info.getName()+"\n");
    }

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000 25 100
第一周 100/200 1/2 3/5
第二周 300/400 2/3 4/9 使用everything与PowerCmd
第三周 200/600 3/3 8/17 安装了idea,并将代码上传到gitosc上
第四周 400/1000 4/4 15/32
![](http://images2015.cnblogs.com/blog/886876/201604/886876-20160403164306551-359873055.png)

https://git.oschina.net/ISAcrystal/java.git

原文地址:https://www.cnblogs.com/crystallin/p/5330244.html