1、 什么是类?什么是对象?JAVA中类的定义形式
类是具有相同属性和服务的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和方法说明两个主要部分。类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类。
从面向对象的角度出发,客观世界中的一切实体都是对象。
JAVA中定义类的形式:
public class ClassName{
//定义类的属性
//定义类的对象的属性
//定义构造器
//定义类的方法
//定义对类的对象的属性访问的方法
//定义类的对象的方法
}
2、 什么是构造方法?其作用是什么?构造方法的特点
在类中用来建立对象的方法是类的构造方法。其作用就是用来创建类的对象,使得类的对象的属性都获取到相应的值。构造方法的特点是:
(1) 名称与类名称相同;
(2) 没有返回值,但是不需要使用void修饰。
3、 关于接口
接口是抽象类的一种,只包含常量和方法的定义,而没有变量和方法的实现,且其方法都是抽象方法。它的用处体现在下面几个方面:
◇ 通过接口实现不相关类的相同行为,而无需考虑这些类之间的关系。
◇ 通过接口指明多个类需要实现的方法。
◇ 通过接口了解对象的交互界面,而无需了解对象所对应的类。
1)接口的定义
接口的定义包括接口声明和接口体。
接口声明的格式如下:
[public] interface interfaceName[extends listOfSuperInterface] { … }
extends 子句与类声明的extends子句基本相同,不同的是一个接口可有多个父接口,用逗号隔开,而一个类只能有一个父类。
接口体包括常量定义和方法定义
常量定义格式为:type NAME=value; 该常量被实现该接口的多个类共享; 具有public ,final, static的属性。
方法体定义格式为:(具有 public和abstract属性)
returnType methodName([paramlist]);
2)接口的实现
在类的声明中用implements子句来表示一个类使用某个接口,在类体中可以使用接口中定义的常量,而且必须实现接口中定义的所有方法。一个类可以实现多个接口,在implements子句中用逗号分开。
3) 接口类型的使用
接口作为一种引用类型来使用。任何实现该接口的类的实例都可以存储在该接口类型的变量中,通过这些变量可以访问类所实现的接口中的方法。
4、 JAVA中的访问控制
java语言中有四种不同的限定词,提供了四种不同的访问权限。
1) private
类中限定为private的成员,只能被这个类本身访问。
如果一个类的构造方法声明为private,则其它类不能生成该类的一个实例。
2) default
类中不加任何访问权限限定的成员属于缺省的(default)访问状态,可以被这个类本身和同一个包中的类所访问。
3) protected
类中限定为protected的成员,可以被这个类本身、它的子类(包括同一个包中以及不同包中的子类)和同一个包中的所有其他的类访问。
4) public
类中限定为public的成员,可以被所有的类访问。
5、 什么是抽象类?什么是抽象方法?
java语言中,用abstract 关键字来修饰一个类时,这个类叫做抽象类,用abstract 关键字来修饰一个方法时,这个方法叫做抽象方法。格式如下:
abstract class abstractClass{ …} //抽象类
abstract returnType abstractMethod([paramlist]) //抽象方法
抽象类必须被继承,抽象方法必须被重写。抽象方法只需声明,无需实现;抽象类不能被实例化,抽象类不一定要包含抽象方法。若类中包含了抽象方法,则该类必须被定义为抽象类。
6、什么是接口?接口和抽象类的异同?
接口是JAVA中的特殊的一个类,由于在JAVA中不支持多重继承,而要解决类的扩充问题时,就需要使用接口来实现。接口中定义了一组常量或者一些抽象方法。处于不同层次的类要实现功能的扩充时,只要通过实现接口,就可以直接调用接口中定义的常量或者通过覆盖掉接口中定义过的抽象方法来实现具体的功能。
接口和抽象类的相同之处在于:他们从本质上描述的都是类的继承关系,接口和抽象类中都包含抽象方法。主要的不同之处在于:抽象类中可以包含抽象方法,也可以包含普通方法,但是接口中的方法一定是抽象方法。抽象类中可以包含变量和类的属性,而接口中只能包含常量。
7、什么是方法的重载?什么是方法的覆盖?在实现方法的覆盖时要注意什么问题?
方法的重载指的是在JAVA中的类中,允许出现方法名称相同,但是方法的参数序列不同的方法。参数序列不同指的是参数的类型、个数、顺序都不相同。在类中使用方法重载主要是为了扩充类的功能。
方法的覆盖指的是在父类和子类中定义了两个名称及其参数序列都相同的方法。这种情况叫方法的覆盖,因为在调用这些方法时,子类对象把父类中的方法给隐藏掉了。
在进行方法覆盖时需要注意的问题是:方法的覆盖与方法的返回类型有关系,即要求不但方法的名称和参数序列要相同,而且返回类型也要相同。在子类中对方法的访问限制不能超过父类中定义的访问限制。
8、JAVA的安全性如何保证?
JAVA代码的安全性可以从以下四个方面得到保证:
(1) JAVA语言自身提供的安全机制,比如对内存的自动管理,取消了指针操作等,保证了程序在运行过程中不会发生内存泄漏。
(2) 编译器提供的安全。JAVA的源文件经过JVM的编译器编译后,会形成标准格式的类文件,这个类文件是一个字节码文件。
(3) 字节码校验。JAVA的类文件在被JVM执行时首先要被类加载器加载,然后通过字节码校验器校验,校验通过后才能交给硬件系统去执行,如何类文件经过窜改,在校验时就会被校验器检查出来,这是JAVA的解释器就会拒绝执行程序。
(4) 类装载。类装载通过将本机类与网络资源分开,来保证安全性。因为在调入类时,总是要对类进行检查。
9、面向对象程序设计的特点是什么?
封装性,继承性,多态性。
封装:封装性就是把对象的属性和方法结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义:
(1)把对象的全部属性和全部方法结合在一起,形成一个不可分割的独立单位(即对象)。
(2)信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界〔或者说形成一道屏障〕,只保留有限的对外接口使之与外部发生联系。
封装的原则在软件上的反映是:要求使对象以外的部分不能随意存取对象的内部数据(属性),从而有效的避免了外部错误对它的"交叉感染",使软件错误能够局部化,大大减少查错和排错的难度。
继承:特殊类的对象拥有其一般类的全部属性与方法,称作特殊类对一般类的继承。例如,轮船、客轮;人、大人。一个类可以是多个一般类的特殊类,它从多个一般类中继承了属性与服务,这称为多继承。例如,客轮是轮船和客运工具的特殊类。在java语言中,通常我们称一般类为父类(superclass,超类),特殊类为子类(subclass)。
多态:对象的多态性是指在一般类中定义的属性或服务被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或服务在一般类及其各个特殊类中具有不同的语义。例如:"几何图形"的"绘图"方法,"椭圆"和"多边形"都是"几何图"的子类,其"绘图"方法功能不同。
10、异常是什么?我们在编写程序时,为什么要处理异常?在处理异常是,请写出处理异常的代码框架,并详细描述一下各部分的作用?
异常表示的是程序中不正常的内容。或者需要程序员和用户特别关注的内容。我们在编写程序时使用异常处理主要是保证程序在发生问题时不致于异常中止执行,而是能够正常执行结束,但是可以提示程序员用户程序中出现了什么问题,便于程序员找出程序中存在的潜在的错误。
在JAVA中异常处理的框架是:
try{
//有问题的代码需要用try块处理,抛出异常
}catch(Exception1 e){
//使用catch来捕获程序中的异常,或者有问题的代码
}catch(Exception2 e){
}finally{
//无论程序中有无异常,finally中的代码总是能够被执行
}
|
11、谈谈final, finally, finalize的区别。
final修饰符(关键字):如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载
finally关键字:在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。