第六章 内部类与异常类
- 格式:pdf
- 大小:569.54 KB
- 文档页数:44
一、实验目的1. 理解内部类的概念及其在Java编程中的应用。
2. 掌握内部类的定义、使用方法和特点。
3. 通过实例分析,加深对内部类的理解。
二、实验环境1. 操作系统:Windows 102. 开发工具:Eclipse IDE3. 编程语言:Java三、实验内容1. 内部类的定义及特点2. 成员内部类3. 静态内部类4. 局部内部类5. 匿名内部类四、实验步骤1. 创建一个名为“OuterClass”的类,作为外部类。
2. 在“OuterClass”中定义一个成员内部类“InnerClass”。
3. 在“OuterClass”中定义一个静态内部类“StaticInnerClass”。
4. 在“OuterClass”中定义一个局部内部类“LocalInnerClass”。
5. 创建一个匿名内部类的实例,并演示其使用。
五、实验代码```java// 1. 创建外部类OuterClasspublic class OuterClass {// 2. 成员内部类InnerClasspublic class InnerClass {public void display() {System.out.println("这是成员内部类InnerClass的方法");}}// 3. 静态内部类StaticInnerClasspublic static class StaticInnerClass {public void display() {System.out.println("这是静态内部类StaticInnerClass的方法");}}// 4. 局部内部类LocalInnerClasspublic void outerMethod() {class LocalInnerClass {public void display() {System.out.println("这是局部内部类LocalInnerClass的方法");}}LocalInnerClass localInner = new LocalInnerClass();localInner.display();}// 5. 匿名内部类public void anonymousInnerClass() {Runnable runnable = new Runnable() {@Overridepublic void run() {System.out.println("这是匿名内部类的方法");}};new Thread(runnable).start();}public static void main(String[] args) {OuterClass outer = new OuterClass();OuterClass.InnerClass inner = outer.new InnerClass(); InnerClass.display();StaticInnerClass staticInner = new StaticInnerClass(); staticInner.display();outer.outerMethod();outer.anonymousInnerClass();}}```六、实验结果与分析1. 成员内部类:通过定义在类中的内部类,可以访问外部类的成员变量和方法。
《Java基础入门》课后习题第1章Java开发入门一、填空题1、Java的三大体系分别是_JavaSE_____、_JavaEE_____、_JavaME_____。
2、Java程序的运行环境简称之为JRE_____。
3、编译Java程序需要使用_javac_____命令。
4、和两个可执行程序存放在JDK安装目录的bin______目录下。
5、path______环境变量用来存储Java的编译和运行工具所在的路径,而_classpath_____环境变量则用来保存保存Java虚拟机要运行的“.class”文件路径。
二、选择题1、以下选项中,哪些属于JDK工具?(多选)ABCDA、Java编译器B、Java运行工具C、Java文档生成工具D、Java打包工具2、Java属于以下哪种语言?CA、机器语言B、汇编语言C、高级语言D、以上都不对3、下面哪种类型的文件可以在Java虚拟机中运行?DA、.javaB、.jreC、.exeD、.class4、安装好JDK后,在其bin目录下有许多exe可执行文件,其中命令的作用是以下哪一种?BA、Java文档制作工具B、Java解释器C、Java编译器D、Java启动器5、如果jdk的安装路径为:d:\jdk,若想在命令窗口中任何当前路径下,都可以直接使用javac和java命令,需要将环境变量path设置为以下哪个选项?BA.d:\jdk; B.d :\jdk\bin; C.d:\jre\bin; D.d: \jre;三、问答题1、简述Java的特点。
面向对象、跨平台性、健壮性、安全性、可移植性、多线程性、动态性等。
2、简述JRE与JDK的区别。
JRE(Java Runtime Environment,Java运行时环境),它相当于操作系统部分,提供了Java程序运行时所需要的基本条件和许多Java基础类,例如,IO类、GUI控件类、网络类等。
JRE是提供给普通用户使用的,如果你只想运行别人开发好的Java程序,那么,你的计算机上必须且只需安装JRE。
实验一 Java语言概述【实验目的】1.掌握开发Java应用程序的三个步骤:编写源文件、编译源文件和运行应用程序。
2.熟悉Java应用程序的基本结构,并能联合编译应用程序所需要的类。
文件保存要求:在D:盘新建文件夹“学号”,在“D:\ 学号”下新建文件夹“timu1”。
题目1的文件保存在“timu1”中,以下依次类推。
【题目1】1、实验要求:编写一个简单的Java应用程序,该程序在命令行窗口输出两行文字:“你好,很高兴学习Java”和“We are students”。
2、程序模板:请按模板要求,将【代码】替换为Java程序代码。
3、实验后的练习a.编译器怎样提示丢失大括号的错误。
b.编译器怎样提示语句丢失分号的错误。
c.编译器怎样提示将System写成system这一错误。
d.编译器怎样提示将String写成string这一错误。
【题目2】1、实验要求:编写3个源文件:、、,每个源文件只有一个类。
含有应用程序的主类(含有main方法),并使用了Teacher和Student类。
将3个源文件保存到同一目录,D:\timu2,然后编译。
2、程序模板:请按模板要求,将【代码】替换为Java程序代码。
3、实验后的练习a.将编译通过后,不断地修改源文件中的【代码2】。
比如,在命令行窗口输出“我是语文老师”或“我是数学老师”。
要求每次修改源文件后,单独编译,然后直接运行应用程序(不要再编译)。
b.如果需要编译某个目录下的全部Java源文件,如D:\1001目录,可以使用如下命令:D:\1001>javac *.java请练习上述命令。
【题目3】1、实验要求:课本第15页习题2、实验后的练习习题8.(4)实验四类与对象【实验目的】1.掌握使用类来封装对象的属性和行为。
2.掌握对象的组合以及参数传递。
3.掌握类变量与实例变量,以及类方法与实例方法的区别。
文件保存要求:在D:盘新建文件夹“shiyan04”,在“D:\ 20120shiyan04”下新建文件夹“timu1”。
Java中异常的概念和分类
异常就是程序在编译时发⽣的意想不到的情况,⼀般⽽⾔分为两类:错误(Error)和异常(Exception)
Error: 分为两种:
程序编写出现语法错误
Exception: 所有异常类的⽗类(我们说的异常处理⼀般就是处理与Exception类相关的异常,Exception和Error合起来被称作异常,但Exception⾃⾝也可以被称为异常,通常我们说的异常指的就是Exception及其⼦类
Exception异常分为编译时异常和运⾏时异常,由于我们⽆法预测程序⾥可能出现的错误或⽤户在使⽤程序时会出现的错误,所以需要异常类来告诉我们程序出现了异常,⽐如0不能作为除数,但⽤户硬是⽤做了除数怎么办?
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
System.out.println(1/a);
}
Exception的⼦类被分为两⼤类:编译时异常,运⾏时异常
编译时异常: 在编写代码时如果有此类异常则必须被捕获(catch)或抛出(throw)
运⾏时异常: 可以不必再编写代码时捕获或抛出
说明: 所有异常都可以被捕获或抛出,如果异常最终没有被捕获⽽是被抛出的话程序会⽴即终⽌运⾏并打印异常信息,另外,如果不捕获运⾏时异常,默认会抛出运⾏时异常
编译时异常的特征: 直接继承⾃Exception类,不继承RuntimeException,必须被显式的捕获或抛出
运⾏时异常的特征: 继承⾃RuntimeException类,可以不被显式的捕获或抛出,如果不被显式的捕获则默认会被抛出。
Java_异常类(错误和异常,两者的区别介绍)在 Java 中,所有的异常都有⼀个共同的祖先 Throwable(可抛出)。
Throwable 指定代码中可⽤异常传播机制通过 Java 应⽤程序传输的任何问题的共性。
Throwable 有两个重要的⼦类:Exception(异常)和 Error(错误),⼆者都是 Java 异常处理的重要⼦类,各⾃都包含⼤量⼦类。
①.Exception(异常)是应⽤程序中可能的可预测、可恢复问题。
⼀般⼤多数异常表⽰中度到轻度的问题。
异常⼀般是在特定环境下产⽣的,通常出现在代码的特定⽅法和操作中。
在 EchoInput 类中,当试图调⽤ readLine ⽅法时,可能出现IOException 异常。
Exception 类有⼀个重要的⼦类 RuntimeException。
RuntimeException 类及其⼦类表⽰“JVM 常⽤操作”引发的错误。
例如,若试图使⽤空值对象引⽤、除数为零或数组越界,则分别引发运⾏时异常(NullPointerException、ArithmeticException)和ArrayIndexOutOfBoundException。
②.Error(错误)表⽰运⾏应⽤程序中较严重问题。
⼤多数错误与代码编写者执⾏的操作⽆关,⽽表⽰代码运⾏时 JVM(Java 虚拟机)出现的问题。
例如,当 JVM 不再有继续执⾏操作所需的内存资源时,将出现 OutOfMemoryError。
检查异常和未检查异常的划分Java中的异常分为两⼤类:1.Checked Exception(⾮Runtime Exception)2.Unchecked Exception(Runtime Exception)运⾏时异常RuntimeException类是Exception类的⼦类,它叫做运⾏时异常,Java中的所有运⾏时异常都会直接或者间接地继承⾃RuntimeException类。
Java知识点整理第⼀章1、Java中没有指针、结构和类型定义等概念,没有全局变量,没有#include和#define等预处理器,也没有多重继承的机制。
只允许单重继承。
在Java中,class定义的⼤括号之后没有分隔符“;”。
2、Java源代码使⽤的是Unicode码,⽽不是ASCⅡ码,Unicode码是⽤16位⼆进制表⽰的⼀个字符。
Java编译器将Java程序编译成⼆进制代码。
3、编译后的Java程序指令并不直接在硬件系统的CPU上执⾏,⽽是由Java虚拟机(JVM)执⾏。
JVM使⽤的代码存储在.class⽂件中。
JVM的代码格式为压缩的字节码。
4、三级代码安全检查,即验证、分析和跟踪监测。
5、字节码校验器要对程序中的代码进⾏四趟扫描。
6、Java程序分为两种:(1)Java应⽤程序(Java Application);(2)Java⼩应⽤程序(Java Applet),或叫Java⼩程序。
7、如果⽅法不是静态(static)的,则必须先创建类的实例,然后调⽤实例的⽅法。
8、String args[]表⽰命令⾏参数。
9、Java规定,如果.java⽂件中包含⼀个公有类,则存储的⽂件名要与该共有类的类名⼀致。
※可以在所有类⾥都写上main ⽅法,给程序提供N多个⼊⼝,但是最后运⾏程序的时候也只能从其中的⼀个⼊⼝进去,这就是main 的作⽤( 程序⼊⼝)。
9、Java规定,在⼀个源⽂件中,最多只能定义⼀个公有类。
10、包说明必须出现在类说明和引⼊语句之前,引⼊语句必须出现在所有的类说明之前。
※只有package语句是零个或⼀个,import语句、类定义、接⼝定义为零个或多个。
11、Java的核⼼API共有32个包。
第⼆章1、Java中的注释有三种:(1)//在⼀⾏的注释;(2)/*在⼀⾏或多⾏的注释*/(3)/**⽂档注释*/2、在Java语⾔中,标识符是由字母、下划线、美元符($)开头,有字母、下划线、美元符和数字组成的字符串。
第一题.目的:验证内部类对象总与创建它的外部类对象关联 (1)第二题.定义一个Father类 (1)第三题.修改BankAccount (2)第四题.拷贝自身重要数据 (3)第五题.连锁店问题 (4)第六题.修改外围类对象数据,影响内部类行为 (4)第七题.迭代器的局部类实现 (6)第一题参考答案 (7)第二题参考答案 (7)第三题参考答案 (8)第四题参考答案 (10)第五题参考答案 (10)第六题参考答案 (11)第七题参考答案 (11)实验五. 内部类,局部类,匿名类背景知识内部类内部类对象的创建局部类匿名类实验目的1.掌握内部类,局部类,匿名类概念2.学习定义内部类,局部类,匿名类。
3.学习创建内部类,局部类,匿名类对象。
实验内容和步骤第一题.目的:验证内部类对象总与创建它的外部类对象关联1.定义一个类A,它有一个内部类B.2.定义B的方法g,它访问A的数据成员。
3.定义A的方法f,它访问B的数据成员,注意必须指明那个内部类对象的数据成员。
4.确保类A有方法修改A的域。
5.确保类B有方法print,输出A的域。
6.定义类C,它只有一个main方法。
在main方法体内创建A类对象a。
a作为外围对象创建B类对象b;7.验证:每个内部类对象,都有一个相关联的外部类对象,就是创建它的外部类对象。
方法:首先对象b调用print,打印a的域,然后修改a的域,最后b再次调用print,打印a的域,打印结果应该与对a的修改一致,从而说明b与a相关联。
第二题.定义一个Father类它包括:1.内部类Son,表示儿子的类,包括a)数据域phone,表示儿子电话号。
b)内部类构造方法c)CallFather方法,给父亲打电话,打印“xxx给yyy打电话”即可,xxx是儿子电话号,yyy是父亲电话号。
2.数据域phone,表示父亲电话号。
3.Son数组,保存儿子。
4.count,保存儿子个数5.构造函数。
6.给儿子打电话的方法CallSon,打印“给xxx打电话”即可,xxx是儿子电话号。
内部类名词解释
内部类(Inner Class)是Java中一种特殊的类定义方式,指的是在一个外
部类内部定义的类。
内部类作为外部类的一个成员,并依附于外部类而存在。
Java中允许在一个类内部定义另一个类,这样的类就称为嵌套类,而内部
类是非静态嵌套类的一种。
内部类分为三种类型:成员内部类(Member Inner Class)、局部内部类(Local Inner Class)和匿名内部类(Anonymous Inner Class)。
成员内部类是最常见的内部类类型,它可以访问外部类的所有成员,包括私有成员。
局部内部类是在方法中定义的内部类,它只能在定义它的方法中被访问。
匿名内部类是一种没有名称的内部类,通常用于实现接口或创建对象。
内部类的出现打破了Java单继承的局限性,使得代码更加模块化和组织良好。
此外,内部类可以访问其外部类的所有成员,包括私有成员,这为
Java编程提供了更多的灵活性和便利性。
第1章Java概述1.编译java application源程序文件将产生相应的字节码文件,这些字节码文件别的扩展名为.java2.执行一个java程序fristapp的方法是运行java fristapp3.main()方法的返回类型是void4.在java代码中,public static void main方法的参数描述正确的是string args【】,string【】args5.内存的回收程序负责释放无用内存√6.java体系主要分为java ME,Java SE,JavaEE三大块第2章Java基础1.Java语言中,下列标识符错误的是40name2.java变量中,以下不属于引用类型的数据类型是字符型3.double d=5.3E12 ×4.C5.A6.for循环的一般形式为;for(初值;终值;增量),以下对for循环的叙述,正确的是初值和增量都是赋值语句,终值是条件判断语句7.当输入下面选项中3值时,将会输出default8.下面哪种方法能够支持javadoc命令/**…*/9.下面声明一个string类型的数组正确的是string str[]10.下面定义一个整型数组,不合法的是int[][]array=new int[][4];11.给定代码;。
下面叙述正确的是输出的结果为:012.java语言规定,标示符只能由字母,数字美元符$和下划线租成,并且第一个字符不能是数字;java是区分大小写的。
13.表达式1/2*3的计算结果是0;设x=2,则表达式(x++)/3的值是014.数组的长度可以用其属性lengt h获得;创建一个数组对象可以使用new关键字创建第3章面向对象基础1.在java中引用对象变量和对象间有什么关系?引用变量是指向对象的一个指针2.对象是面向对象技术的核心所在,在面向对象程序设计中,对象是累的抽象×3.构造方法何时被调用?创建对象时4.A,B,D5.在java语言中在包p1中包含包p2,类A直接隶属于p1,类B直接隶属于包p2.在类c中要使用类a的方法和类b的方法b,需要选择import p1.*; import p1.p2,*;6.java中,访问修饰符限制最高的是private第4章类之间的关系1.在java中,下面关于类的描述正确的是一个父类可以有多个子类2.在java语言中,类worker是类person的子类,worker的构造方法中有一句“super()”,该语句是调用person的构造法法。
内部类和外部类的区别和联系其实外部类和内部类是⼀个相对的定义。
类A中有类B,那么类A⾃然就是外部类了,类B就是内部类。
外部类的访问权限只有两种:public和(default)。
但是内部类因类型不同所以对应的访问权限也不⼀样。
内部类可以使⽤外部类的任何变量和⽅法,但是外部类必须要实例化内部类才可以使⽤内部类。
⽽且在实例化之前必须先创建⼀个外部类的实例。
不过也可以使⽤this来调⽤外部类和内部类的元素。
内部类分为成员内部类,匿名内部类、局部内部类和静态内部类。
①成员内部类 成员内部类其实就是最简简单单的那种内部类了,定义在⼀个类的内部。
public class MemInner {int num = 10;public static void main(String[] args) {MemInner mi = new MemInner();Inner in = mi.new Inner();System.out.println(in.num);in.systemOut();}public class Inner{int num = 9;public void systemOut(){System.out.println(num);System.out.println(MemInner.this.num);}}} 如果外部类想要调⽤内部类,先要实例化内部类相对的外部类,然后再实例化⽬标内部类,然后才能访问⾥⾯的成员变量和⽅法。
并且如果想要访问内部类和外部类同名的成员变量或成员⽅法,需要按照以下格式访问:外部类.this.成员变量外部类.this.成员⽅法 ⽽且⽆论外部类的成员变量或成员⽅法的访问权限是什么,内部类统统都可以访问。
②局部内部类 局部内部类是定义在⽅法或者是⼀个作⽤域上⾯的类,它和成员内部类的区别就在于局部内部类的访问权限仅在定义它的这个⽅法或者作⽤域⾥⾯(访问范围缩⼩)。
public class AreaInner {int num = 9;public static void main(String[] args) {AreaInner ai = new AreaInner();ai.Inner();}public void Inner(){String name = "黄花⼤闺⼥";class AInner{void call(){System.out.println(num);System.out.println(name);}}AInner an = new AInner();an.call();}} 就像是main()函数调⽤不了⽅法中的局部变量⼀样,如果想要在外部类实例化局部内部类,⾸先要在这个⽅法或者作⽤域⾥⾯提前实例化此内部类,然后在外部类调⽤其⽅法或者作⽤域的时候,就可以真正为这个内部类提供资源空间。
清览云题库JAVA2实用教程
《Java 2实用教程(第5版)》是由xxx编著,20xx年清华大学出版社出版的高等学校Java课程系列教材、普通高等教育“十一五”国家级规划教材。
该教材既可作为高等院校相关专业Java程序设计的教材,也可供自学者及软件开发人员参考。
全书共分15章,分别介绍了Java的基本数据类型,运算符、表达式和语句,类与对象,子类与继承,接口与实现,内部类与异常类,常用实用类,组件及事件处理,输入、输出流,JDBC与MySQL数据库,Java多线程机制,Java网络编程,图形、图像与音频,泛型与集合框架等内容。
该教材对部分章节的内容做了调整,删除了原第16章的有关JavaApplet的内容;特别修改了原第11章,将数据库改为MySQL数据库。
该教材由耿祥义、张跃平编著。
外部类与内部类的访问外部类与内部类之间的访问内部类相当于外部类的⼀个成员,和其它成员处于同⼀个级别,因此可以在内部类中直接访问外部类的各个成员(包括私有属性)。
需要注意的是在外部类中要想访问内部类的各个成员(这⾥也包括内部类的私有属性)就必须先实例化内部类,然后才能访问。
对于为什么能访问内部类的私有属性,是因为即使内部类的成员是私有的,但是也是在外部类中,和外部类的其它成员是平等的,只不过被内部类囊括是在内部中,因此访问都必须先实例化。
例如:class NodeManager{private Node root; //根节点//public int a = 3; //此处可以直接在内部类中访问,超出外部类要么⾃⼰访问,要么通过内部类的⽅法来访问//管理添加节点public void addNode(String name){if(root!=null){root.add(name);}else{root = new Node(name);}}public void deleteNode(String name){if(root.getName().equals(name)){root = root.next; //此处即使内部类是私有的,在外部类中也可以通过实例化的对象来访问}else{root.delete(name);}}//管理打印节点public void printNode(){if(root != null){System.out.print(root.getName());}root.print();}/* 此⽅法适⽤于在外部类外部实例化外部类让其访问内部类的属性public int getInt(){return b;}*///内部类,每个节点对象class Node{private String name; //节点名称private Node next; //表⽰当前节点的下⼀个节点 //此处的成员属性要么⾃⼰访问,要么通过外部类中实例化内部类对象访问,要么在整个类外部通过⽅法调⽤来访问 //构造⽅法public Node(String name){ = name;}//获得节点名称public String getName(){return name;}//添加节点public void add(String name){if(this.next != null){this.next.add(name);}else{next = new Node(name);}}//删除节点public void delete(String name){if(this.next != null){if(this.next.getName().equals(name)){this.next = this.next.next;}else{this.next.delete(name);}}}//打印所有节点public void print(){if(this.next != null){System.out.print("->"+this.next.getName());this.next.print();}else{System.out.println();}}/*此⽅法可以让在外部类外实例化的内部类对象访问外部类成员属性public int getInt2(){return a;}*/}}但是要是在整个类的外部不管是实例化外部类还是实例化内部类也好,都⽆法访问对⽅的属性或⽅法,只能通过⾃⼰的⽅法去调⽤对⽅的成员。