java学习笔记 - 第三季_第1页
java学习笔记 - 第三季_第2页
java学习笔记 - 第三季_第3页
java学习笔记 - 第三季_第4页
java学习笔记 - 第三季_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java学习笔记Java入门第三季第1章-异常与异常处理1-1 异常简介 (06:50) Throwable 是所有异常的父类,两个子类分别是 Error 和 Exception ,其中 Error 异常是系统异常(我理解为硬件问题)如内存溢出,JVM虚拟机异常等, Exception 是运行环境错误,程序错误比如数组越界等出现error错误 ,系统无法修护,系统必崩溃-硬伤出现Exception错误,如:代码逻辑错误、输入错误、环境、用户操作出现错误等非检查异常:系统自动抛出,出现此错误多为代码本身问题,应从代码逻辑上进行修改检查异常:各种奇葩问题,必须添加代码捕获。1-2 使用try.ca

2、tch.finally实现异常处理 (05:08) try抛出异常-抛出异常的方法会终止执行-catch块中的代码会进行相应处理如:Try-catch块后的代码会逐句执行Catch块写的顺序:catch从小-大,即子-父以下报错说明顺序不对:1-3 通过案例学习 try.catch.finally (14:00) package com.imooc.test;public class TryCatchTest /* * param args */public static void main(String args) TryCatchTest tct = new TryCatchTest();

3、int result = tct.test();System.out.println("test()方法,执行完毕!返回值为:" + result);/* * divider(除数): * result(结果): * try-catch捕获while循环 * 每次循环,divider减一,result=result+100/divider * 如果:捕获异常,打印输出”抛出异常了!“,返回-1 * 否则:返回result */public int test()int divider = 10;int result = 100;trywhile(divider > -1

4、)divider-;result = result + 100/divider;return result;catch(Exception e)e.printStackTrace(); /打印异常的具体信息System.out.println("循环抛出异常了!");return -1;catch(Exception e)e.printStackTrace();printStackTrace();/打印异常的具体信息,左面框中的错误信息为printStackTrace()打印出的ArithmeticException为算数异常package com.imooc.test;p

5、ublic class TryCatchTest /* * param args */public static void main(String args) TryCatchTest tct = new TryCatchTest();int result2 = tct.test2();System.out.println("我想大声告诉你!test2()执行完毕! 返回值为:" + result);/* * divider(除数): * result(结果): * try-catch捕获while循环 * 每次循环,divider减一,result=result+100/

6、divider * 如果:捕获异常,打印输出”抛出异常了!“,返回 result=999; * 否则:返回result * finally:打印输出”这是finally!哈哈!“,同时打印输出result的值 */public int test2()int divider = 10;int result = 100;trywhile(divider > -1)divider-;result = result + 100/divider;return result;catch(Exception e)e.printStackTrace();System.out.println("

7、循环抛出异常了!");return result = 999;finallySystem.out.println("这是finally!哈哈!");System.out.println("我是Result!我的值是:"+result);/* * divider(除数): * result(结果): * try-catch捕获while循环 * 每次循环,divider减一,result=result+100/divider * 如果:捕获异常,打印输出”抛出异常了!“ * finally:打印输出”这是finally!哈哈!“,同时打印输出re

8、sult的值 * 最后,返回1111做为结果 */结果:Finally语句块执行catch语句后,执行的package com.imooc.test;public class TryCatchTest /* * param args */public static void main(String args) TryCatchTest tct = new TryCatchTest();int result = tct.test3();System.out.println("我想大声告诉你!test3()执行完毕! 返回值为:" + result);/* * divider(

9、除数): * result(结果): * try-catch捕获while循环 * 每次循环,divider减一,result=result+100/divider * 如果:捕获异常,打印输出”抛出异常了!“ * finally:打印输出”这是finally!哈哈!“,同时打印输出result的值 * 最后,返回1111做为结果 */public int test3()int divider = 10;int result = 100;trywhile(divider > -1)divider-;result = result + 100/divider;catch(Exception

10、 e)e.printStackTrace();System.out.println("循环抛出异常了!");finallySystem.out.println("这是finally!哈哈!");System.out.println("我是Result!我的值是:"+result);System.out.println("我是test3!我运行完了!表想我!");return 1111;结果:以上输出看出:try-catch语句块中如果没有return返回值,则调用try-catch语句块之外的return返回值。1

11、-4 练习题 try 语句块不可以独立存在,必须与 catch 或者 finally 块同存1-5 Java 中的异常抛出以及自定义异常 (04:32) 如:无法处理的异常,要抛出给上层人员解决:Java异常库:Java异常库中没有的异常,可自定义:自定义的异常要么继所有异常的基类Exception,要么继承相近的异常package com.imooc.test;public class DrunkException extends Exception public DrunkException() /无参构造器public DrunkException(String message) /有参

12、构造器super(message);1-6 练习题 Exception 是异常类,自定义异常要继承于 Exception 类或者其子类1-7 Java 中的异常链 (06:09) package com.imooc.test;public class ChainTest /* * test1():抛出“喝大了”异常 * test2():调用test1(),捕获“喝大了”异常,并且包装成运行时异常,继续抛出 * main方法中,调用test2(),尝试捕获test2()方法抛出的异常 */public static void main(String args) ChainTest ct = ne

13、w ChainTest();tryct.test2();catch(Exception e)e.printStackTrace();public void test1() throws DrunkExceptionthrow new DrunkException("喝车别开酒!");public void test2()try test1(); catch (DrunkException e) / TODO Auto-generated catch blockRuntimeException newExc = new RuntimeException("司机一滴酒

14、,亲人两行泪"); newExc.initCause(e); /将捕获的异常传递进去throw newExc;package com.imooc.test;public class ChainTest /* * test1():抛出“喝大了”异常 * test2():调用test1(),捕获“喝大了”异常,并且包装成运行时异常,继续抛出 * main方法中,调用test2(),尝试捕获test2()方法抛出的异常 */public static void main(String args) ChainTest ct = new ChainTest();tryct.test2();ca

15、tch(Exception e)e.printStackTrace();public void test1() throws DrunkExceptionthrow new DrunkException("喝车别开酒!");public void test2()try test1(); catch (DrunkException e) / TODO Auto-generated catch blockRuntimeException newExc = new RuntimeException(e);throw newExc;1-8 练习题 捕获到的异常,可以在当前方法的 c

16、atch 块中处理,也可抛出给调用者去处理1-9 经验总结 (02:20)作业:代码:package j_1;import java.util.Scanner;public class BookManagerEasy private static Scanner console = new Scanner(System.in); /定义全区变量,在main方法之上-多次要获得键盘输入的值时public static void main(String args) /定义”图书“数组String books = "C语言", "数据结构&qu

17、ot;, "汇编语言", "高数", "大学语文", "毛概" ;while (true) /为了使用continue语句System.out.println("输入命令:1-按照名称查找图书;2-按照序号查找图书");String book;try /取得整型命令int command = inputCommand();/根据不同命令值,进行不同操作switch (command) case 1:/按照图书名称选择图书book = getBookByName(books);System.out

18、.println("book:" + book);break;case 2:/按照图书序号(数组下标)选择图书book = getBookByNumber(books);System.out.println("book:" + book);break;case -1:/返回值为-1,说明输入有误System.out.println("命令输入错误!请根据提示输入数字命令!");continue;default:/其他值的命令均认为是错误命令System.out.println("命令输入错误!");continue

19、;break;/退出程序 catch (Exception bne) /捕获”图书不存在异常“时,要求重新输入命令System.out.println(bne.getMessage(); /getMessage()continue; /按照图书名称查询图书private static String getBookByName(String books)throws Exception System.out.println("输入图书名称:");/获取输入的图书名称String name = console.next();for (int i = 0; i < book

20、s.length; i+) if (name.equals(booksi)/输入的名称与某一图书名称匹配,返回该图书return booksi;/若无匹配,抛出”图书不存在异常“throw new Exception("图书不存在!");/根据图书序号(数组下标)查询图书private static String getBookByNumber(String books)throws Exception while (true) /while是为了使用continue语句System.out.println("输入图书序号:");try /获取输入的图书

21、序号(数组下标)int index = inputCommand();/若返回值为-1if(index = -1)System.out.println("命令输入错误!请根据提示输入数字命令!");continue;/若不出现”数组下标越界异常“,则返回相应位置的图书String book = booksindex;return book; catch (ArrayIndexOutOfBoundsException e) /输入的序号不存在(引发”数组下标越界异常“),则抛出”图书不存在异常“Exception bookNotExists = new Exception(&

22、quot;图书不存在!");bookNotExists.initCause(e);throw bookNotExists;/从控制台输入命令,用于输入命令和输入图书序号private static int inputCommand()int command;try command = console.nextInt();return command; catch (Exception e) /若输入字符型或者字符串,则抛出异常,捕获该异常,抛出”错误命令异常“console = new Scanner(System.in);/返回-1return -1;第2章-认识 Java 中的字

23、符串2-1 什么是 Java 中的字符串 2-2 Java 中字符串的不变性 说明:对于String对象来说,=比较的是内存地址,equals比较的是内容2-3 Java 中 String 类的常用方法 String类的常用方法:结合代码来熟悉一下方法的使用:public class HelloWorld public static void main(String args) / Java文件名String fileName = "HelloWorld.jav" / 邮箱String email = "laurenyang"/ 判断.java文件名是否

24、正确:合法的文件名应该以.java结尾 /* 参考步骤: 1、获取文件名中最后一次出现"."号的位置 2、根据"."号的位置,获取文件的后缀 3、判断"."号位置及文件后缀名 */ /获取文件名中最后一次出现"."号的位置int index = fileName.lastIndexOf("."); / 获取文件的后缀String prefix =fileName.substring(index+1); / 判断必须包含"."号,且不能出现在首位,同时后缀名为"jav

25、a"if (index>0 && prefix.equals("java") ) System.out.println("Java文件名正确"); else System.out.println("Java文件名无效"); / 判断邮箱格式是否正确:合法的邮箱名中至少要包含"", 并且""是在"."之前 /* 参考步骤: 1、获取文件名中""符号的位置 2、获取邮箱中"."号的位置 3、判断必须包含&qu

26、ot;"符号,且""必须在"."之前 */ / 获取邮箱中""符号的位置int index2 = email.indexOf(''); / 获取邮箱中"."号的位置int index3 = email.indexOf('.'); / 判断必须包含""符号,且""必须在"."之前if (index2 != -1 && index3 > index2) System.out.println(&qu

27、ot;邮箱格式正确"); else System.out.println("邮箱格式无效");2-4 Java 中的 String 类常用方法 我们继续来看 String 类常用的方法,如下代码所示:运行结果:public class HelloWorld public static void main(String args) / 定义一个字符串String s = "aljlkdsflkjsadjfklhasdkjlflkajdflwoiudsafhaasdasd" / 出现次数int num = 0; / 循环遍历每个字符,判断是否是字符

28、 a ,如果是,累加次数for (int i=0;i<s.length();i+) / 获取每个字符,判断是否是字符aif (s.charAt(i)='a') / 累加统计次数num+; System.out.println("字符a出现的次数:" + num);2-5 认识 Java 中的 StringBuilder 类 public class HelloWorld public static void main(String args) / 创建一个StringBuilder对象,用来存储字符串StringBuilder hobby=new St

29、ringBuilder("爱慕课"); System.out.println(hobby);2-6 Java 中的 StringBuilder 类的常用方法 StringBuilder 类提供了很多方法来操作字符串:例如:在下面的示例代码中,创建了 StringBuilder 对象,用来存储字符串,并对其做了追加和插入操作。这些操作修改了 str 对象的值,而没有创建新的对象,这就是 StringBuilder 和 String 最大的区别。public class HelloWorld public static void main(String args) / 创建一个

30、空的StringBuilder对象StringBuilder str=new StringBuilder(); / 追加字符串str.append("jaewkjldfxmopzdm"); / 从后往前每隔三位插入逗号for(int i=str.length()-3;i>0;i=i-3) str.insert(i,','); / 将StringBuilder对象转换为String对象并输出System.out.print(str.toString();2-7 练习题在需要频繁对字符串进行修改操作时使用 StringBuilder 的效率比 String

31、 要高,所以选项 B 的说法不正确,选择 B第3章-Java 中必须了解的常用类3-1 Java 中的包装类 Integer 包装类的构造方法:如下代码所示:Integer包装类的常用方法:3-2 Java 中基本类型和包装类之间的转换 3-3 练习题 3-4 Java 中基本类型和字符串之间的转换 public class HelloWorld public static void main(String args) double m = 78.5;/将基本类型转换为字符串/String str1 =String.valueOf(m); /String str1 =Double.toStri

32、ng(m); String str1 =m+"" System.out.println("m 转换为String型后与整数20的求和结果为: "+(str1+20);String str = "180.20" / 将字符串转换为基本类型/Double a = Double.valueOf(str); Double a =Double.parseDouble(str);System.out.println("str 转换为double型后与整数20的求和结果为: "+(a+20);3-5 练习题 基本类型是不能调用方

33、法的,而其包装类具有很多方法。包装类都在java.lang包中。3-6 使用 Date 和 SimpleDateFormat 类表示时间 1. 使用 format() 方法将日期转换为指定格式的文本代码中的 “yyyy-MM-dd HH:mm:ss” 为预定义字符串, yyyy 表示四位年, MM 表示两位月份, dd 表示两位日期, HH 表示小时(使用24小时制), mm 表示分钟, ss 表示秒,这样就指定了转换的目标格式,最后调用 format() 方法将时间转换为指定的格式的字符串。2. 使用 parse() 方法将文本转换为日期代码中的 “yyyy年MM月dd日 HH:mm:ss”

34、 指定了字符串的日期格式,调用 parse() 方法将文本转换为日期。运行结果:import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class HelloWorld public static void main(String args) throws ParseException / 使用format()方法将日期转换为指定格式的文本SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日

35、 HH时mm分ss秒");SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd HH:mm");SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); / 创建Date对象,表示当前时间 Date now=new Date(); / 调用format()方法,将日期转换为字符串并输出System.out.println(sdf1.format(now);System.out.println(sdf2.fo

36、rmat(now);System.out.println(sdf3.format(now);/ 使用parse()方法将文本转换为日期String d = "2014-6-1 21:05:36"SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); / 调用parse()方法,将字符串转换为日期Date date =sdf.parse(d); System.out.println(date);3-7 Calendar 类的应用 Date 类最主要的作用就是获得当前时间,同时这

37、个类里面也具有设置时间以及一些其他的功能,但是由于本身设计的问题,这些方法却遭到众多批评,不建议使用,更推荐使用 Calendar 类进行时间和日期的处理。java.util.Calendar 类是一个抽象类,可以通过调用 getInstance() 静态方法获取一个 Calendar 对象,此对象已由当前日期时间初始化,即默认代表当前时间,如 Calendar c = Calendar.getInstance();那么如何使用 Calendar 获取年、月、日、时间等信息呢?我们来看下面的代码:其中,调用 Calendar 类的 getInstance() 方法获取一个实例,然后通过调用 g

38、et() 方法获取日期时间信息,参数为需要获得的字段的值, Calendar.Year 等为 Calendar 类中定义的静态常量。3-8 使用 Math 类操作数据Math 类位于 java.lang 包中,包含用于执行基本数学运算的方法, Math 类的所有方法都是静态方法,所以使用该类中的方法时,可以直接使用类名.方法名,如: Math.round();常用的方法:通过案例我们来认识一下他们的使用吧!public class HelloWorld public static void main(String args) / 定义一个整型数组,长度为10int nums = new int

39、10; /通过循环给数组赋值for (int i = 0; i < nums.length; i+) / 产生10以内的随机数int x = (int)(Math.random()*10); numsi = x;/ 为元素赋值 / 使用foreach循环输出数组中的元素for (int num:nums) System.out.print(num + " ");第4章-Java 中的集合框架(上)4-1 Java 中的集合框架概述 (09:50) 集合就是盛装东西的容器,java中就是众多相同类型的属性的集合。数组长度固定,而集合长度在实际使用中可以动态变化。Set:

40、无须,不可重复;list与queue:有序,可重复。最后一行为实现类,其余为为接口,最上一行为中间一行的负接口,黄色框为常用的实现类4-2 Collection 接口 & List 接口简介 (02:28) 查看jdk的api文档可以常看java.util.collection中定义的所有方法:(以下是部分截图)4-3 学生选课-创建学生类和课程类 (05:03) 1.Course.Java:package com.imooc.collection;/* * 课程类 * author Administrator * */public class Course public String

41、 id; /实际开发应为private属性,并建立相应的getter与setter方法public String name;public Course(String id, String name) /含参构造器this.id = id ; = name;public Course() /无参构造器2. Student.java:package com.imooc.collection;import java.util.HashSet;import java.util.Set;/* * 学生类 * author Administrator * */public class S

42、tudent public String id;public String name;public Set<Course> courses;public Student(String id, String name) /含参构造器this.id = id; = name;this.courses = new HashSet<Course>();4-4 学生选课-添加课程 (12:18) 1.ListTest.java:package com.imooc.collection;import java.util.ArrayList;import java.

43、util.Arrays;import java.util.Iterator;import java.util.List;/* * 备选课程类 * author Administrator * */public class ListTest /* * 用于存放备选课程的List */public List coursesToSelect;public ListTest() this.coursesToSelect = new ArrayList();/* * 用于往coursesToSelect中添加备选课程 */public void testAdd() /创建一个课程对象,并通过调用add方

44、法,添加到备选课程List中Course cr1 = new Course("1" , "数据结构");coursesToSelect.add(cr1);/获得并输出以验证是否插入成功Course temp = (Course) coursesToSelect.get(0); /(Course)-对象存入集合都变成object类型,取出时需要类型转换System.out.println("添加了课程:" + temp.id + ":" + ); Course cr2 = new Course(&q

45、uot;2", "C语言");coursesToSelect.add(0, cr2); /cr2放在最前,正常add(cr2)后cr2是在cr1后,这样cr2在cr1前Course temp2 = (Course) coursesToSelect.get(0);System.out.println("添加了课程:" + temp2.id + ":" + );/以下方法会抛出数组下标越界异常/Course cr3 = new Course("3", "test");/

46、coursesToSelect.add(4, cr3); /数组中正常添加完cr1及cr2时,访问位置有0,1;则添加add(4, cr3),会报数组越界错误public static void main( String args) ListTest lt = new ListTest();lt.testAdd();4-5 学生选课-添加课程 (06:42) 以上使用的是add方法,以下为另外两个添加方法,在以上的方法中继续添加:public void testAdd() ./以下方法会抛出数组下标越界异常/Course cr3 = new Course("3", &quo

47、t;test");/coursesToSelect.add(4, cr3); /数组中正常添加完cr1及cr2时,访问位置有0,1;则添加add(4, cr3),会报数组越界错误Course course = new Course("3", "离散数学"), new Course("4", "汇编语言");coursesToSelect.addAll(Arrays.asList(course);Course temp3 = (Course) coursesToSelect.get(2);Course te

48、mp4 = (Course) coursesToSelect.get(3);System.out.println("添加了两门课程:" + temp3.id + ":" + + "" + temp4.id + ":" + );Course course2 = new Course("5", "高等数学"), new Course("6", "大学英语");coursesToSelect.addA

49、ll(2, Arrays.asList(course2);Course temp5 = (Course) coursesToSelect.get(2);Course temp6 = (Course) coursesToSelect.get(3);System.out.println("添加了两门课程:" + temp5.id + ":" + + "" + temp6.id + ":" + );其上绿色2的效果如下: 4-6 学生选课课程查询 (11:15) public v

50、oid testAdd() /再次插入的重复数据是为了证明list中的数据是有序可重复的coursesToSelect.add(cr1);Course temp0 = (Course) coursesToSelect.get(2);System.out.println("添加了课程:" + temp.id + ":" + ); /以下方法会抛出数组下标越界异常/Course cr3 = new Course("3", "test");/coursesToSelect.add(4, cr3); /数

51、组中正常添加完cr1及cr2时,访问位置有0,1;则添加add(4, cr3),会报数组越界错误./* * 取得List中的元素的方法 * param args */public void testGet() int size = coursesToSelect.size();System.out.println("有如下课程待选:");for(int i= 0 ; i < size; i+) Course cr = (Course) coursesToSelect.get(i);System.out.println("课程:" + cr.id +

52、 ":" + );/* * 通过迭代器来遍历List * param args */public void testIterator() /通过集合的iterator方法,取得迭代器的实例Iterator<Course> it = coursesToSelect.iterator();System.out.println("有如下课程待选(通过迭代器访问):");while(it.hasNext() Course cr = it.next();System.out.println("课程:" + cr.id + ":"

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论