没有合适的资源?快使用搜索试试~ 我知道了~
首页2018年java面试题大全(整理版)
2018年java面试题大全(整理版)

2018年java面试题大全(整理版),包括了Java中的几乎所有的内容。
资源详情
资源评论
资源推荐

年
面试题大全(整理版)
、面向对象的特征有哪些方面?
- 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象
两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
- 继承:继承是从已有类得到继承信息创建新类的过程。提供继承的类叫父类(超类、基
类)、得到继承的类叫子类(派生类)。
- 封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定
义的接口。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口
(可以想想普通洗衣机和全自动洗衣机的差别,明显全自动洗衣机封装更好因此操作起来
更简单;我们现在使用的智能手机也是封装得足够好的,因为几个按键就搞定了所有的事
情)。
- 多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是
用同样的对象引用调用同样的方法但是做了不同的事情。实现多态需要做两件事: 1). 方
法重写(子类继承父类并重写父类中的方法);2). 对象造型(用父类型引用引用子类型
对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)
、访问修饰符 以及不写(默认)时的区别?
修饰符 当前类 同¹包 子¹类 其他包
public √ √ √ √
protected √ √ √ ×
default √ √ × ×
private √ × × ×
、是最基本的数据类型吗?
答 : 不 是 。 Java 中 的 基 本 数 据 类 型 只 有 8 个 :
byte 、 short 、 int 、 long 、 oat 、 double 、 char 、 boolean ; 除 了 基 本 类 型
( primitive type ) 和 枚 举 类 型 ( enumeration type ) , 剩 下 的 都 是 引 用 类 型
(reference type)。
、是否正确?
答:不正确。3.4 是双精度数,将双精度型(double)赋值给浮点型(oat)属于下转型
( down-casting , 也 称 为窄 化 )会 造 成 精度 损 失, 因 此需要 强 制类 型 转换 oat f
=(oat)3.4; 或者写成 oat f =3.4F;。

、 ! "有错吗# ! "有错吗?
答:对于 short s1 = 1; s1 = s1 + 1;由于 1 是 int 类型,因此 s1+1 运算结果也是 int
型,需要强制转换类型才能赋值给 short 型。而 short s1 = 1; s1 += 1;可以正确编译,
因为 s1+= 1;相当于 s1 = (short)(s1 + 1);其中有隐含的强制类型转换。
$、 和 % 有什么区别?
答:Java 是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据
类型,但是为了能够将这些基本数据类型当成对象操作,Java 为每一个基本数据类型都引
入了对应的包装类型(wrapper class),int 的包装类就是 Integer,从 Java 5 开始引
入了自动装箱/拆箱机制,使得二者可以相互转换。
class AutoUnboxingTest {
public static void main(String[] args) {
Integer a = new Integer(3);
Integer b = 3; // 将 3 自动装箱成 Integer 类
型
int c = 3;
System.out.println(a == b); // false 两个引用没有引用同一
对象
System.out.println(a == c); // true a 自动拆箱成 int 类型
再和 c 比较
}
}
最近还遇到一个面试题,也是和自动装箱和拆箱有点关系的,代码如下所示:
public class Test03 {
public static void main(String[] args) {
Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;
System.out.println(f1 == f2);
System.out.println(f3 == f4);
}
}
如果不明就里很容易认为两个输出要么都是 true 要么都是 false。首先需要注意的是
f1、f2、f3、f4 四个变量都是 Integer 对象引用,所以下面的==运算比较的不是值而是
引用。装箱的本质是什么呢?当我们给一个 Integer 对象赋一个 int 值的时候,会调用
Integer 类的静态方法 valueOf
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];

return new Integer(i);
}
简单的说,如果整型字面量的值在-128 到 127 之间,那么不会 new 新的 Integer 对象,
而是直接引用常量池中的 Integer 对象,所以上面的面试题中 f1==f2 的结果是 true,而
f3==f4 的结果是 false。
&、'和''的区别?
虽然二者都要求运算符左右两端的布尔值都是 true 整个表达式的值才是 true。&&之所以
称为短路运算是因为,如果&&左边的表达式的值是 false,右边的表达式会被直接短路掉,
不会进行运算。很多时候我们可能都需要用&&而不是&,例如在验证用户登录时判定用户
名 不 是 null 而 且 不 是 空 字 符 串 , 应 当 写 为 : username != null &&!
username.equals(“”),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果
不成立,根本不能进行字符串的 equals 比较,否则会产生 NullPointerException 异常。
注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。
、解释内存中的栈( )*、堆(!*和静态区( *的用法。
栈空间操作起来最快但是栈很小,通常大量的对象都是放在堆空间
String str = new String("hello");
上面的语句中变量 str 放在栈上,用 new 创建出来的字符串对象放在堆上,而”hello”这个
字面量放在静态区。
+、,!(*等于多少?,!(-*等于多少?
答:Math.round(11.5)的返回值是 12,Math.round(-11.5)的返回值是-11。四舍五入
的原理是在参数上加 0.5 然后进行下取整。
、 .!是否能作用在 /上,是否能作用在 上,是否能作用在 上?
expr 可以是 byte、short、char、int、enum、String 类型,但是 long 类型不能
、用最有效率的方法计算 乘以 ?
答:¹2 << 3(左移 3 位相当于乘以 2 的 3 次方,右移 3 位相当于除以 2 的 3 次方)。
、数组有没有 !(*方法? 有没有 !(*方法?
答:数组没有 length()方法,有 length 的属性。String 有 length()方法。JavaScript
中,获得字符串的长度是通过 length 属性得到的,这一点容易和 Java 混淆。
、构造器( )是否可被重写()?
答:构造器不能被继承,因此不能被重写,但可以被重载。

、两个对象值相同(01 (/**,但却可有不同的 ! !,这句话
对不对?
答:不对,如果 两个 对象 x 和 y 满 足 x.equals(y) == true ,它们的哈希 码( hash
code)应当相同。Java 对于 eqauls 方法和 hashCode 方法是这样规定的:(1)如果两个
对象相同(equals 方法返回 true),那么它们的 hashCode 值一定要相同;(2)如果两个
对象的 hashCode 相同,它们并不一定相同
、是否可以继承 类?
答:String 类是 >nal 类,不可以被继承。
$、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回
变化后的结果,那么这里到底是值传递还是引用传递?
答:是值传递。Java 语言的方法调用只支持参数的值传递。当一个对象实例作为一个参数
被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改
变,但对对象引用的改变是不会影响到调用者的
&、 和 2、23 的区别?
答:Java 平台提供了两种类型的字符串:String 和 StringBu@er/StringBuilder,它们
可以储存和操作字符串。其中 String 是只读字符串,也就意味着 String 引用的字符串内
容是不能被改变的。而 StringBu@er/StringBuilder 类表示的字符串对象可以直接进行修
改。StringBuilder 是 Java 5 中引入的,它和 StringBu@er 的方法完全相同,区别在于
它是在单线程环境下使用的,因为它的所有方面都没有被 synchronized 修饰,因此它的
效率也比 StringBu@er 要高。
、重载(4)和重写(4)的区别。重载的方法能否根据返回类型进
行区分?
答:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而
后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表
(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之
间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更
好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有
特殊的要求。
+、描述一下 56, 加载 文件的原理机制?
答:JVM 中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java 中的类加
载器是一个重要的 Java 运行时系统组件,它负责在运行时查找和装入类文件中的类。类的
加载是指把类的.class 文件中的数据读入到内存中,通常是创建一个字节数组读入.class
文件
、抽象类( )和接口()有什么异同?
剩余16页未读,继续阅读













安全验证
文档复制为VIP权益,开通VIP直接复制

评论2