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
泛型结合可以添加泛型的子类的对象实例。
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 |