java基础面试题1

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

你可能感兴趣的:(java,开发语言)