1
、面向对象的特征有哪些方面?
继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超
类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定
的延续性。
封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的
接口。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口
多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同
样的对象引用调用同样的方法但是做了不同的事情。多态存在的条件有三个:继承或者实现
关系,方法重写,子类对象指向父类引用。
2
、访问修饰符
public,private,protected,
以及不写(默认)时的区别?
private
修饰符:可用来修饰内部类、属性、方法,即被
private
修饰的属性、方法、类只能
被该类的对象访问,其子类不能访问,
private
可以修饰内部类,不可以修饰外部类。
default
修饰符:当定义变量、方法以及类时,没有写访问修饰符,则代表默认的修饰符
default
,
default
修饰的属性、方法、类,只能被本类或者同一个包中的其他类访问到,针
对本包访问而设计,任何处于本包下的属性、方法、类、接口等,都可以相互访问。在接口
中,方法默认的访问修饰符是
public
protected
修饰符:表示受保护的,它主要的作用是保护子类,子类可以用它修饰的成员,
其他的不可以
public
修饰符:表示公开的,公共的。不同类、不同包下都可以访问
3
、
String
是最基本的数据类型吗?
不是。
Java
中的基本数据类型只有
8
个:
byte
、
short
、
int
、
long
、
float
、
double
、
char
、
boolean
;除了基本类型(
primitive type
),剩下的都是引用类型(
referencetype
)。
4
是否可以继承
String
类?
String
类是
final
类,不可以被继承
5 final
、
finally
、
finalize
的区别
final
的用法:
被
final
修饰的类不可以被继承
被
final
修饰的方法不可以被重写
被
final
修饰的变量不可以被改变
,
如果修饰引用
,
那么表示引用不可变
,
引用指向的内
容可变
.
finally
的用法:
finally
是在异常处理中的使用的
不管有没有出现异常
,finally
块中的代码都会执行
;
当
try
和
catch
中有
return
时
,finally
仍然会执行
;
6 String
和
StringBuilder
、
StringBuffer
的区别?
1
、
String
类的内容是不可改变的。能改变的只是其内存指向。
2
、
String
对象不可修改指的是对象本身不可修改,而不是引用不可修改。
3
、
StringBuffer
类的对象内容是可以修改的。
4
、
String
可以直接通过赋值的方式实现对象实例化,而
StringBuffer
只能通过构造方法的方
式对象实例化。
5
、
StringBuffer
在处理字符串的时候,不会生成新的对象。从内存这个角度来说,
StringBuffer
要比
String
更好。
6
、
StringBuffer
是线程安全的,速度慢。
7
、
StringBuilder
是线程不安全的,不能同步访问,执行速度快。
7
重载和重写的区别
重载
(overloading)
是在一个类里面,方法名字相同,而参数不同。返回值类型可以相同也
可以不同
重写是子类对父类的允许访问的方法的实现过程进行重新编写
,
返回值和形参都不能改变。
8
抽象类(
abstract class
)和接口(
interface
)有什么异同?
抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。一个类如果继承了某
个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被
声明为抽象类。接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和
具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。抽象类中的成员可
以是
private
、默认、
protected
、
public
的,而接口中的成员全都是
public
的。抽象类中可
以定义成员变量,而接口中定义的成员变量实际上都是常量。有抽象方法的类必须被声明为
抽象类,而抽象类未必要有抽象方法。
9
静态变量和实例变量的区别。(被
static
修饰的变量和普通变量的区别)
静态变量是被
static
修饰符修饰的变量,也称为类变量,它属于类,不属于类的任何一个对
象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝;实例变量必须依存
于某一实例,需要先创建对象然后通过对象才能访问到它。静态变量可以实现让多个对象共
享内存。
10 throw
和
throws
的作用
在
Java
中,当程序发生异常时,可以使用
throw
关键字来抛出异常对象。
throw
语句的格
式为:
throw new
异常类名称
(
构造函数参数
);
Java
中的
throws
关键字用于声明可能会抛出哪些异常,它只是在方法签名中声明了方法可
能抛出的异常,而并未实际抛出异常。
throws
语句的格式为:
修饰符 返回类型 方法名
(
参数列表
) throws
异常列表
{
//
方法体
}
11
编译异常和运行异常
运行时异常: 都是
RuntimeException
类及其子类异常,这些异常是不检查异常,程序中可
以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑
角度尽可能避免这类异常的发生。
常见的运行异常:
NullPointerException(
空指针异常
)
IndexOutOfBoundsException(
下标越界异常
)
ClassNotFoundException
(指定的类不存在)
NoSuchMethodError (
方法不存在错误
)
NumberFormatException (
数字格式异常
)
ArrithmeticException(
算数异常)
编译异常: 是
RuntimeException
以外的异常,类型上都属于
Exception
类及其子类。从程序
语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。
常见的编译异常:
IOException
(包括
FileNotFoundException
)
SQLException