




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 8 章 高级特性:内部类和异常 一、本章知识点 知识点 1:内部类 成员内部类、静态内部类、匿名内部类、局部内部类 外部类又叫 Top class 顶级类,通常必须是 public 的 内部类的分类:成员内部类、静态内部类、匿名内部类、局部内部类 包含在外部类中的不带 static 的内部类,叫成员内部类( 跟随外部类实例对象 ) 包含在外部类中 static 修饰的内部类,叫静态内部类 (类似顶级类,仅仅是可见性有区 别) 内部类的特点:内部类可以很好的实现隐藏,可以使用 protected 修饰、private 修饰 符;内部类可以直接访问外部类的所有成员,包括私有的成员;外部类不能直接访问 内部类的成员,必须首先要建立内部类的对象才可访问。 重点: 怎样在成员内部类(实例)方法中访问外部类(实例) 对象? Outter.this.属性(方法) 怎样在测试类中创建内部成员类对象? Inner inner = outer.new Inner(); /需要导包,内部类在外部不可见 匿名内部类: 当某个方法的参数是抽象类或者接口时,在调用处直接 new 这个抽象 类或接口,使用局部重写方法实现的方式,称为匿名内部类,这类语法在 Java/Android 中极其常见!(形参是普通父类, 直接 new 一个匿名内部类局部重写 普通父类的某个方法这种语法也存在,但不太多见) 1.1.1【案例 1:演示、讲解】成员内部类 /*外部类中创建成员内部类 测试成员内部类的访问 */ public class OuterClass private String name; private int id; /创建外部类方法 public void show() System.out.println(“外部类对象的姓名:“+name+“ 学号:“+id); /* * 创建成员内部类 *内部类中不能声明静态的方法和属性(静态常量除外) * 1.测试创建内部类对象 * 2.测试内部类如何访问外部类的属性 */ public class MemberInnerClass private String name; private int id; /* * 创建成员内部类方法 */ public void Innershow() /2 测试外部类的属性 System.out.println(“外部类对象的姓名:“+ OuterC+“ 学号:“+OuterClass.this.id); /访问外部类的方法 OuterClass.this.show(); /show(); /成员内部类可以直接访问外部类的属性和方法 /外部类不能直接访问内部类的属性和方法,如果调用可以先创 建对象 System.out.println(“成员内部类对象的姓名:“+name+“ 学号:“+id); 1.1.2【案例 2: 练习、讲解 】静态内部类 /测试静态内部类和外部类 在上面案例中加入静态内部类 public static class StaCalss private String name=“zhangsan“; private int id=10; public void staShow() System.out.println(“静态内部类对象的姓名:“+name+“ 学号:“+id); /静态内部类不能访问外部类非静态的成员 /外部类访问静态内部类非静态的成员 通过对象.属性(方法) System.out.println(OuterClass.score); /测试类里加入 OuterClass.StaCalss osc=new OuterClass.StaCalss(); osc.staShow(); 1.1.3【案例 3: 练习、讲解 】局部内部类 /在第一个例题中加入方法 方法 测试类中 oc.showInner(); public void showInner() final int score1=5; System.out.println(“外部类对象的姓名:“+name+“ 学号:“+id); class PInner private String name=“zhngsi“; private int id; public void showPInner() System.out.println(name); /局部内部类只能访问其方法中声明的常量 System.out.println(score1); /访问外部类的属性 System.out.println(“外部类对象的姓名:“ + OuterC + “ 学号:“ + OuterClass.this.id); 1.1.3【案例 4:、讲解】匿名内部类 /测试匿名内部类 public abstract class Student public abstract void sayHi(); /* * 形参是抽象父类 * param stu */ public void testStudent(Student stu) stu.sayHi(); /* * 形参是接口 * param intf */ public void testIntf(Intf intf) intf.on(); intf.off(); /* * 形参是系统 API 某个接口 * param com */ public void testComparator(Comparator com) /* * * param args */ public static void main(String args) TestAInnerType test = new TestAInnerType(); test.testIntf(new Intf() Override public void on() System.out.println(“test on“); Override public void off() System.out.println(“test off“); ); new TestAInnerType().testComparator(new Comparator() Override public int compare(String o1, String o2) return pareTo(o1); ); TestAInnerType test1 = new TestAInnerType(); test1.testStudent(new Student() Override public void sayHi() System.out.println(“局部重写 sayHello“); ); String ary = new String“abb“,“aab“,“abc“; System.out.println(“默认升序“); Arrays.sort(ary); for(String s: ary) System.out.println(s); System.out.println(“降序(匿名内部类实现 )“); Arrays. Sort(ary, new Comparator() /此处 new 出来的是接口的 实/现类,是子类 Override public int compare(String o1, String o2) return pareTo(o1); ); for(String s: ary) System.out.println(s); /* * 测试接口 * author Ava * */ interface Intf public void on(); public void off(); 知识点 2:自动拆箱和封箱 引用类型和基本数据类型之间的转换,称为装箱拆箱 常用包装类: Integer,Double,Character,Boolean,Float Long 装箱操作: int -Interger 将基本类型自动转换成相对应的包装类 拆箱操作: Integer- int 将包装类转换成基本类型 总结: 字符串转基本数据类型:包装类.parseXXX(String str)方法 基本数据类型转字符串:String.valueOf(基本数据类型)方法 2.1.1【案例 5:演示、讲解】自动拆箱和封箱 /将引用类型转赋值给基本类型(Integerint),如何将字符串通过包装类转换成基本数 据类型 Integer it=new Integer(124); Int a=it; /将引用类型赋值给基本数据类型(自动拆箱 ) It=123; / 将基本数据类型赋值给引用类型(自动装箱) Sout(it.toString() String s1=new String(“123”); Int i=Integer.parseInt(s1); /将 String 字符串转换成基本数据类型 前提是字符串中 /必须是基本数据类型的数据 /如何将基本型转换成 String 字符串 Int i=10; String s=”“; s=String.valueOf(i); /此方法返回 int 参数的字符串形式 查 API s=i+”; /通过连接符将数字和字符串连接 Integer is=i; /先将基本类型封装成引用类型 s=is.toString(); /调用 toString()方法返回字符串 /从键盘获得一个小数,先转换成字符串,再转换成小数输出 知识点 3:String、StringBuffer、StringBuilder /String 类的两种创建方式 特点 String 对象一旦创建就不能改变,如果需要大量的字符串操作,使用 StringBuffer/StringBuilder; StringBuffer:线程安全的字符串序列;类似于 String 字符串缓冲区;通过调用某些方法 可以改变该序列的长度和内容;每个字符串缓冲区都有一定的容量,只要字符串缓冲 区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组;如果 内部缓冲区溢出,则此容量自动增大。 StringBuilder: 该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单 个线程使用的时候(这种情况很普遍) ;不执行同步操作,速度快。 StringBuilder:常用方法:length();capacity();append();insert();indexOf();lastIndexOf(); 详见 API / 知识点 4:常用类 知识点 5:异常的概念 程序中可能出现的错误,使用异常处理机制处理后,能够保证代码的健壮性,使程序 可以正常运行。 java 异常处理类: Throwable 类,其子类有 Eerror (错误) 、Exception() 异常的两种主要处理机制: 捕获:try-catch-finally 抛出:throw,throws 规则:把可能发生异常的代码段,放置在 try 块中,预计可能引发的异常,使用多重 catch(由子到父,通常最后一个是异常基类 Exception)捕获和处理。finally 是无论异常 触发与否都会执行的代码段。如果异常不能主动被捕获,可以用条件判断,并主动抛 出异常再做处理 throw 关键字,捕获的异常类必须大于等于抛出的异常类 知识点 6:try-catch-finally try 要处理的 java 代码,可能会抛出代码,也可能会顺利执行 catch(异常类型) (当 java 运行时系统接收到 try 块中所抛出的异常对象时,会寻找处理这一异常的 catch 块进行处理,通常会跟多个 catch 块,小的在前大的在后 )异常处理方法, finally 不管系统有没有抛出异常都会执行,一般用来释放资源。除了在之前执行 System.exit(0); 4.1.1【案例 6:演示、练习、讲解】try-catch-finally 知识点 7:th
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东省德州市名校2025届初三9月月考英语试题含答案
- 21《我不能失信》课件【知识提要】三年级下册语文统编版
- 江西应用技术职业学院《现代汽车生产与管理》2023-2024学年第二学期期末试卷
- 四川卫生康复职业学院《卫生毒理学》2023-2024学年第一学期期末试卷
- 天水师范学院《遗民文学研究》2023-2024学年第二学期期末试卷
- 山东省庆云县重点中学2024-2025学年初三新课程教学质量监测生物试题试卷含解析
- 江苏扬州市梅岭中学2024-2025学年初三第一次质量调研卷化学试题文试卷含解析
- 内蒙古通辽市奈曼旗市级名校2025届普通高中毕业班3月质量检查生物试题含解析
- 图木舒克职业技术学院《发动机原理与构造》2023-2024学年第二学期期末试卷
- 吉林省蛟河高级中学2024-2025学年高三2月阶段性测试物理试题含解析
- 抖音账号合同协议
- 基建招聘面试题及答案
- 儿童生长发育的健康监测与指导
- 铺货协议合同
- 2025至2030年中国分子筛干燥剂市场现状分析及前景预测报告
- 福建省能源石化集团有限责任公司招聘笔试真题2024
- 专业税务顾问服务合同范本
- 村庄湾塘承包协议书8篇
- 走进物理-诺贝尔物理学奖的120年知到课后答案智慧树章节测试答案2025年春广西师范大学
- 基于Scrum的软件产品自动化测试框架研究
- 抢救病人护理书写规范
评论
0/150
提交评论