Java面向对象程序设计 期末复习

第1章
1.Java应用程序分几类?各有什么特点?
不同的Java程序运行在不同的环境中,习惯上将运行环境相同的Java程序归为一类,可以分3类:
Java Application应用程序,属于JavaSE
Applet小程序(目前实际开发中基本不使用)
Servlet程序(在JavaEE中使用)
2.至多有一个公共类public类,源程序名与其修饰类名相同;
第2章
1.标识符:由字母、数字、下划线、美元符号,不能以数字开头;
2.文档注释:/** */,使用工具javadoc.exe;
3.数据类型:基本数据类型、引用数据类型;
4.byte、short没有常量表示法;
5.整数类型:byte(8)、short(16)、int(32)、long(64),默认值0,有符号数,byte:-2^7~2^7-1-128-127;
6.程序中整数默认int,如果写short则在数值后加L或l,默认十进制,八进制以0开头,十六进制以0x或0X开头;float,要在数字后加F或f;
7.字符型:char,存储字母、数字、标点、单引号引起来的单个Unicode字符,占两个字节,内存用数字表示,取值0~65535(2^16);
8.自动转换:byteshortintlongfloatdouble,charintlongfloatdouble;
9.强转:(类型名)变量名(int)money;
10.x++先用再加,++X先加再用 int a=20,b; b1=++a1;b2=a2++,b1输出21,a1输出20,b2输出20,a2输出21;
11.switch中每一个case必须匹配一个break;
12.方括号可以放在变量名后,也可以放在数据类型后;
第3章
1.面向对象的四个基本特征是什么?如何理解他们?
答:面向对象程序设计包括四个基本特征:抽象、封装、继承和多态。
抽象是根据业务需要,把客观世界的事物中与业务相关的特征和功能归纳总结出来、忽略与本业务无关的特征和功能,从形成类的过程。
封装是指把同一类事物的特征和功能都定义到一个类里,变成类的属性和方法。同时通过访问控制符来定义每个属性和方法的可见性。
继承是类之间的一种重用机制。如果A类继承了B类,则A类拥有了B类的除了私有属性和私有方法外的所有属性和方法,同时可以添加自己特有的属性和方法。
多态是实现接口的多个类或一个父类的多个子类有相同的方法名,但是具有不同的表现方式。例如动物类具有喊叫的方法,但是它的子类猫和子类狗的喊叫效果却不一样。

2.java源程序的结构是什么?
答:源程序结构如下:
package 包名;
import 包名.类名;
import 包名.类名;

[public ] class 类名{
属性变量定义… …
方法定义… … }
… …
[public ] class 类名{属性变量定义… …
方法定义… … }

程序结构说明如下:
(1)package语句放在第一行,且只能有一个package语句;
(2)如果类中使用到了其他包中的类,可以写import语句。import语句必须放在package语句之后、类的定义之前。如果引入多个包中的类,可以写多行import语句。可以用“包名.*”表示引入该包名里的所有类,但不包括子包下的类;
(3)类的定义要放在import语句的后面。一个java源文件可以包括多个类的定义,但是只有一个类可以定义成public。如果另一个类也需要定义成public则必须单独再建一个java源程序文件。

3.包是Java语言提供的一种区别类名字命名空间的机制,它是类的一种文件组织和管理方式,是一组功能相似或相关的类或接口的集合;

4.方法的参数传递:参数类型:值参数、引用参数、数组参数、可变参数;


5.包的作用是什么?带包类如何执行?环境变量classpath如何配置?
通过包的定义可以起到两个作用:一是解决命名冲突问题,在同一个包中的类不能重名,但在不同包中的类可以重名;二是通过包以及访问权限控制符可以限制不同包之间类的访问权限。
运行时要用java 报名.类名。
Classpath也该设置为该包所在的文件夹,而不是类文件本身所在的文件夹。
第4章
1.this有哪几种用法?super有哪几种用法?
this主要有三种用法。
(1)用this来引用当前对象的成员变量或成员方法。
(2)用this来调用类中的另一个构造方法。
(3)把this当做参数传递给其他方法
super主要有两种用法。
(1)引用父类的成员变量或成员方法。
(2)调用父类的构造方法。

2.变量的隐藏和方法的覆盖有什么区别?
当父类和子类的属性名字一样时,在子类中默认使用的是子类定义的属性,除非明确使用super来调用,所以在子类对象的内存里实际上有2个同名的变量,默认使用的是子类的变量,这种现象称作子类变量隐藏了父类的同名变量。
当父类和子类定义的方法名一样时,子类对象内存里只有子类定义的方法,不再有父类定义的方法,这种现象称作子类的方法覆盖了父类的同名方法。

3.请介绍一下4种访问控制符的作用。
java一共定义了四种访问权限控制符:private、默认权限、protected、public,通过权限控制符和包能够控制访问权限。
(1)private
private可以用来修饰成员变量、成员方法、构造方法以及内部类(内部类是定义在另一个类里面的类,跟成员变量一样属于另一个类的成员)。private修饰的成员只能被它所属的类内的其他方法访问,不能被该类以外的其他类访问。
(2)默认访问权限
默认访问权限也称为包访问权限,不写访问控制符的就是默认访问权限。默认访问权限可以用来修饰成员变量、成员方法、构造方法、类和接口。默认访问权限定义的内容可以被同一个包中的类所访问,包括它本身,但不能被别的包中的类不能访问。
(3)protected
protected可以用来修饰成员变量、成员方法、构造方法以及内部类。protected修饰的成员可以被同一个包内的其他类访问,不同包如果是它的子类的话也可以访问,其他包中不是它的子类的不能访问。
(4)public
public可以用来修饰成员变量、成员方法、构造方法以及类和接口。public修饰的成员可以被任何类访问,无论是否在同一个包内。
类和类成员都存在访问级别的定义。对于普通外部类来说,只有public和默认权限两种,普通外部类不能使用protected和private修饰符。
类的成员(包括内部类)的访问级别有四种:private、默认方式、protected、public。

4.类变量和实例变量有什么区别?
类的成员变量有2种:一种是类变量(随着类存在),一种是实例变量(随着对象的存在和消亡而存在和消亡)。定义成员变量时,若变量前有关键字static,则称为类变量,若没有static关键字,则称为实例变量。类变量存贮在类的公用区,属于类所有,所有该类的对象共享这一个类变量,而实例变量属于对象所有,每个对象拥有自已独立的实例变量,保存在对象的内存中。

5.类方法如何调用,是否必须创建对象才能调用类方法?
方法声明时,方法名前不加static的是实例方法,加static的是类方法。
类方法调用时不必创建对象就可以调用。
调用类方法有两种格式:
对象名.方法() 或者 类名.方法()
建议使用: 类名.方法();

6.实例方法如何调用?
对象名.方法();

7.final修饰类、变量、方法时有什么含义?(不能改变)
final修饰的类表示在该类不能有子类。
final修饰变量有3种情况:
final修饰的类变量只能被赋值一次,以后不能改变。要么定义时赋值,要么在类的初始化代码块中赋值,以后不能再赋值。
final修饰的实例变量只能被赋值一次,以后不能改变。要么定义时赋值,要么在构造方法中赋值,以后不能再赋值。
final修饰的局部变量只能被赋值一次,以后不能改变。要么定义时赋值,要么在后续代码中赋值一次,以后不能再赋值。
final修饰的成员方法表示在子类中不能被覆盖。
8.static代码块可以放在成员变量的位置,在加载类的时候执行;
9.对象的初始化顺序:
无继承时:类变量(只执行一次)实例变量构造方法;
有继承时:父类的类变量和static代码块(一次)子类的类变量和static代码块(一次)父类的实例变量父类的构造方法子类的实例变量子类的构造方法;
第5章
0.抽象类:用abstract关键字来修饰的类;只有声明,没有实现,不能实例化,可以继承,不能定义为final,一个类实现某个接口,但没有方法,则必须定义为抽象类;
01.向上转型:把一个子类的对象转换传给你一个父类的对象,实现多态的手段;
02.向下转型:把一个父类对象转换成一个子类对象;
1.接口与抽象类有什么区别?什么情况下使用接口?什么情况下使用抽象类?
抽象类与接口紧密相关。然而接口又比抽象类更抽象,这主要体现在他们的差别上:
(1)类可以实现多个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口。接口可以支持多继承;
(2)抽象类中可以有普通方法,接口里的方法都是抽象方法,且都是public方法;
(3)抽象类中的成员变量可以被不同的修饰符来修饰,可以有实例变量,也可以有类变量,接口中的成员变量默认的都是public、static、final的变量;
(4)抽象类中有构造方法,接口中不能有构造方法,所以也不能创建对象。
抽象类是对象的抽象,里面的抽象方法也是对子类的一种规范,也可以有普通方法,这些普通方法子类可以继承使用,而接口只是一种行为规范。
那么什么情况该用抽象类,什么情况该用接口呢?主要是看现实的应用场景。如果把现实问题抽象出来后更符合类的特征,具有实例变量、非抽象的方法,那么只能是用抽象类;如果实际问题只能抽象出需要规范的功能方法,而且这些方法不知道如何实现,需要在子类再实现,不能抽象出实例变量,那么就应该使用接口。当然这时使用抽象类也可以,但是会丧失灵活性,因为其他类继承该抽象类后就不能再继承别的类了。

2.什么是多态?多态的好处是什么?多态有哪几种实现方式?
通俗的说,多态是指实现接口的多个类或一个父类的多个子类虽然有相同的方法,但是具有不同的表现方式。
Java中多态有两种实现形式。一种是通过方法的重载,一种是通过方法覆盖,即子类通过覆盖父类的方法或类实现接口的方法。
方法的重载是指一个类中定义了多个名字相同、参数不同的方法。当实际调用时,java编译器会根据参数的不同来自动决定调用哪个方法,静态多态。
利用子类覆盖父类的方法或者利用实现接口的方法来实现的多态,是在程序运行期才能决定应该运行的哪个子类对象的方法,因而称为动态多态。

3.内部类有几种形式?
内部类有4种形式:实例成员内部类、静态内部类static、局部内部类、匿名内部类。

4.外部类里面如何使用实例成员内部类?其他类里如何使用实例成员内部类?
在外部类里使用内部类跟使用普通类一样,直接调用即可。
但是在其他类里使用内部类有与使用普通类语法不一样,有单独的语法格式,需要分为两步,具体如下:
外部类 外部类对象名 = new 外部类构造方法(实参列表);
外部类.内部类 内部类对象名= 外部类对象名.new 内部类构造方法(实参列表);

5.在外部类里面如何使用static内部类?在其他类里如何使用static内部类?
在外部类中使用静态内部类跟使用普通类一样,直接调用即可。
在其他类中使用静态内部类,不需要创建外部类的对象,就可以创建内部静态类的对象。格式如下:
外部类.内部类 内部类对象名= new 外部类.内部类(实参列表);

6.内部匿名类如何定义类体和创建对象?
创建匿名内部类必须事先有一个接口或者父类,把内部匿名类定义为接口的一个实现类或者是某个父类的子类。实际上是把创建对象和定义匿名内部类的类体同时进行的。格式如下:
new 父类构造器(参数列表){
//匿名内部类的类体部分
}
或者
new 接口(){
//匿名内部类的类体部分
}
7.一个类只能有一个直接父类,接口支持多重继承,一个类也可以实现多个接口(权限:public、默认权限);

第6章

一、问答题
1.什么是异常?异常分哪几种?
在编写程序过程中,会出现各种错误。有语法错误,有程序运行过程中出错,还有的程序运行过程中尽管没有报错,但出来的结果不对,这属于程序的逻辑错误。除了语法错误和逻辑错误外,例如,想打开的文件不存在、网络连接中断、操作数超出预定范围、正在装载的类文件丢失、访问的数据库打不开等等。Java把这些非正常的意外事件称为异常(Exception,又称为“例外”)。
系统定义异常:指java中对一些常见问题提供了对应的异常类。
用户自定义异常:程序员对特定问题,根据java规范编写的异常类。
Java中所有的异常类都是java.lang.Throwable的子类。Throwable类有两个直接子类:Error类及Exception类。
Error类描述的是内部系统错误,包括动态链接失败、虚拟机错误等,Java程序不做处理。这类异常主要是和硬件有关系,而不是由程序本身抛出。通常不由Java程序处理,用户也无法捕获。
Exception类是Java程序中需要大量处理的。
Java中定义了许多Exception的子类,这些子类分为两种:RuntimeException和非运行时异常。
运行时异常
运行时异常RuntimeException是一些可以通过适当的处理而避免的异常,在程序运行中可自动由JVM引发并处理,编程时不需捕获或声明。如:被0除,数组下标越界等,这类异常是编码时考虑不周产生的,完全可以通过判断来避免。
非运行时异常
非运行时异常,通常由环境因素引起的,与程序员无关,如输入、输出异常IOException,文件不存在、无效的URL等等。Java编译器要求Java程序必须捕获或声明所有的非运行时异常。

2.Java通过什么语句来捕获异常?
java可以通过try、catch、finally语句来捕获异常。

3.简述Java的异常处理机制
概括的说,java的异常处理机制就是三个步骤:
(1)异常的抛出。程序在执行过程中发生异常,java虚拟机就会发现并产生一个异常对象,这个过程就是异常的抛出。可以由系统来抛出异常,也可以由程序员在代码中使用throw强制抛出某种类型的异常。
(2)异常的捕获。出现异常后,java可以通过try、catch、finally语句来捕获异常,并做相应的处理,这个过程称为异常的捕获。
(3)如果没有捕获异常的代码,程序将终止运行。

4.简述try、catch、finally的使用方法
try-catch-finally基本格式:
try{
//可能产生异常的代码放在此处
}
catch (异常类名1 异常对象名){
//在此处理异常类型1对应的异常
}
catch (异常类名2 异常对象名){
//在此处理异常类型2对应的异常
}
finally{
//最终的程序出口,往往会写一些清理资源的语句放在此处
}
try-catch-finally语句把可能产生异常的语句放入try{ }语句块中。当try代码块中的语句发生了异常,系统将这个异常发生的代码行号、类别等信息封装到一个对象中,并将这个对象传递给catch代码块。程序就会跳转到catch代码块中执行。
在try{ }语句后紧跟一个或多个catch块,用于对try代码块中所生成的异常对象进行处理,每一个catch块处理一种可能抛出的特定类型的异常。在运行时刻,如果try{ }语句块中产生的异常与某个catch块处理的异常类型相匹配(匹配是指异常参数类型与实际产生的异常类型一致或是其父类),则将停止执行try中的剩余语句,并跳转到catch中执行该catch语句块。
finally语句是捕获异常的最后一步,是通过finally语句为异常处理提供一个统一的出口。finally子句是可选的。无论try所指定的程序块中是否抛出异常、抛出哪种异常,finally关键字中包含的代码都要被执行。

第7章
1.Set接口不允许有重复元素,List允许;
2.Comparable定义对象本身的内在默认的排序标准,Comparator在对象外部定义其他排序标准;
3.Map保存“关键字-值”形式的对象:有HashMap(采用哈希算法实现map接口)、TreeMap(采用红黑树算法实现接口)、LinkedHashMap(采用链表和哈希算法实现接口);
4.所有实现Collection接口的类都有一个Iterator方法,用来返回实现Iterator接口的对象,对Collection的元素进行遍历等操作,只能单向移动;

  • 6
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值