Java面试题目网站有哪些?( 三 )


补充:使用Unicode 意味着字符在JVM内部和外部有不同的表现形式 。在JVM内部都是 Unicode 。当这个字符被从JVM内部转移到外部时(例如存入文件系统中) 。需要进行编码转换 。所以 Java 中有字节流和字符流 。以及在字符流和字节流之间进行转换的转换流 。如 InputStreamReader和OutputStreamReader 。这两个类是字节流和字符流之间的适配器类 。承担了编码转换的任务 。
10、抽象的(abstract)方法是否可同时是静态的(static) 。是否可同时是本地方法(native) 。是否可同时被 synchronized?
都不能 。
● 抽象方法需要子类重写 。而静态的方法是无法被重写的 。因此二者是矛盾的 。
● 本地方法是由本地代码(如 C++ 代码)实现的方法 。而抽象方法是没有实现的 。也是矛盾的 。
● synchronized 和方法的实现细节有关 。抽象方法不涉及实现细节 。因此也是相互矛盾的 。
Java面向对象面试题
1、面向对象包括哪些特性 。怎么理解的?
(1)封装:通常认为封装是把数据和操作数据的方法绑定起来 。对数据的访问只能通过已定义的接口 。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象 。我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装 。可以说 。封装就是隐藏一切可隐藏的东西 。只向外界提供最简单的编程接口 。
(2)继承:继承是从已有类得到继承信息创建新类的过程 。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类) 。继承让变化中的软件系统有了一定的延续性 。同时继承也是封装程序中可变因素的重要手段 。
(3)多态:多态性是指允许不同子类型的对象对同一消息作出不同的响应 。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情 。多态性分为编译时的多态性和运行时的多态性 。如果将对象的方法视为对象向外界提供的服务 。那么运行时的多态性可以解释为:当 A系统访问B系统提供的服务时 。B 系统有多种提供服务的方式 。但一切对 A 系统来说都是透明的 。方法重载(overload)实现的是编译时的多态性(也称为前绑定) 。而方法重写(override)实现的是运行时的多态性(也称为后绑定) 。运行时的多态是面向对象最精髓的东西 。要实现多态需要做两件事:
第一:方法重写(子类继承父类并重写父类中已有的或抽象的方法);
第二:对象造型(用父类型引用指向子类型对象 。这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为) 。
(4)抽象:抽象是将一类对象的共同特征总结出来构造类的过程 。包括数据抽象和行为抽象两方面 。抽象只关注对象有哪些属性和行为 。并不关注这些行为的细节是什么 。
2、访问权限修饰符 public、private、protected 。以及不写(默认)时的区别?
修饰符
当前类
同包
子类
其他包
public




protected



×
默认(缺省)


×
×
private

×
×
×
3、Java中为什么要用 clone?
在实际编程过程中 。我们常常要遇到这种情况:有一个对象 A 。在某一时刻 A 中已经包含了一些有效值 。此时可能会需要一个和 A 完全相同新对象 B 。并且此后对 B 任何改动都不会影响到 A 中的值 。也就是说 。A 与 B 是两个独立的对象 。但 B 的初始值是由 A 对象确定的 。在 Java 语言中 。用简单的赋值语句是不能满足这种需求的 。要满足这种需求虽然有很多途径 。但clone()方法是其中最简单 。也是最高效的手段 。
● 说到对象的克隆 。涉及到深克隆和浅克隆?
浅克隆:创建一个新对象 。新对象的属性和原来对象完全相同 。对于非基本类型属性 。仍指向原有属性所指向的对象的内存地址 。
深克隆:创建一个新对象 。属性中引用的其他对象也会被克隆 。不再指向原有对象地址 。
4、new一个对象的过程和clone一个对象的区别?
new 操作符的本意是分配内存 。程序执行到 new 操作符时 。首先去看 new 操作符后面的类型 。因为知道了类型 。才能知道要分配多大的内存空间 。分配完内存之后 。再调用构造函数 。填充对象的各个域 。这一步叫做对象的初始化 。构造方法返回后 。一个对象创建完毕 。可以把他的引用(地址)发布到外部 。在外部就可以使用这个引用操纵这个对象 。

推荐阅读