zoukankan      html  css  js  c++  java
  • Java面试必知必会(扩展)——Java基础

    float f=3.4;是否正确?

    不正确

    3.4是双精度,将双精度赋值给浮点型属于向下转型,会造成精度损失;

    因此需要强制类型转换:

    方式一:float f=(float)3.4

    方式二:float f=3.4F

    &和&&的区别?

    &运算符有两种用法 (1):按位与;(2):逻辑与

    &&运算符是短路与运算。

    逻辑与和短路与的区别是很大的,虽然二者都要求运算符左右两端的布尔值都为true整个值才为true。

    &&之所以为短路与是因为:如果&&左边的表达式值为false,右边的表达式会被直接短路掉,不会运行计算。

    Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?

    Math.round:返回与括号内值最相近的整数

    Math.round(11.5):等于12

    Math.round(-11.5):等于-11

    public class Test {
        public static void main(String[] args) {
            System.out.println(Math.round(11.5));
            System.out.println(Math.round(11.4));
            System.out.println(Math.round(-11.5));
            System.out.println(Math.round(-11.4));
            System.out.println(Math.round(-11.6));
        }
    }
    
    结果:
        
    12
    11
    -11
    -11
    -12
    

    可以看出,正数情况下,0,1,2,3,4向下取整;5,6,7,8,9向上取整

    补充:

    static double ceil(double a):返回大于等于a的最小整数

    static double floor(double a):返回小于等于a的最大整数

    static double rint(double a):返回与a最相近的整数,返回10.0

    static long round(double a):返回与a最相近的长整形数

    static int round(float a):返回与a最相近的整型数

    System.out.println(Math.ceil(-11.6));
    System.out.println(Math.ceil(11.6));
    System.out.println(Math.floor(11.6));
    System.out.println(Math.floor(-11.6));
    System.out.println(Math.rint(11.6));
    System.out.println(Math.rint(-11.6));
    
    结果:
        
    -11.0
    12.0
    11.0
    -12.0
    12.0
    -12.0    
    

    switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?

    • 在Java5以前:swich(expr)中,expr只能是 byte、short、char、int。
    • 从java5开始:java中引用了枚举类型,expr可以是enum类型
    • 从java7开始:expr可以是String引用类型
    • 目前所有版本:expr不可以是long类型

    数组有没有length()方法?String有没有length()方法?

    • 数组没有length()方法,只有length属性
      • arr.length
    • String有length()方法
      • str.length()

    在Java中,如何跳出当前的多重嵌套循环?

    在最外层前加个标记A,然后可以通过break A来结束循环

    构造器(constructor)是否可被重写(override)?

    构造器不能被继承,也不能被重写,但可以被重载。

    两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

    不对

    如果两个对象满足x.equals(y) == true,那么它的hashcode一定相同

    java对equals和hashcode是这样规定的:

    • 如果两个对象的相同(x.equals(y) == true),那么它们的hashcode一定相同
    • 如果相关对象的hashcode相同,它们并不一定相同
    • 更详细的内容请返回《Java面试必知必会》的基础部分查看

    是否可以继承String类?

    String是final类,不可继承

    当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

    值传递

    java语言的方法调用只支持参数的值传递。

    当一个对象实例做为一个参数被传递到方法时,参数的值就是该对象的引用

    char型变量能不能存储一个中文汉字,为什么?

    char类型可以存储一个中文汉字,因为java中使用的编码是Unicode,一个char类型占2个字节(16比特),所以放一个汉字是没有问题的。

    静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?

    Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化

    Java 中会存在内存泄漏吗,请简单描述。

    理论上Java因为有垃圾回收机制(GC)不会存在内存泄露问题(这也是Java被广泛使用于服务器端编程的一个重要原因);

    然而在实际开发中,可能会存在无用但可达的对象,这些对象不能被GC回收,因此也会导致内存泄露的发生。

    抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchronized修饰?

    都不能。

    • 抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。
    • 本地方法是由本地代码(如C代码)实现的方法,而抽象方法是没有实现的,也是矛盾的。
    • synchronized和方法的实现细节有关,抽象方法不涉及实现细节,因此也是相互矛盾的。

    阐述静态变量和实例变量的区别。

    • 静态变量 是被static修饰符修饰的变量,也称为类变量,它属于类,不属于类的任何一个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝;
    • 实例变量 必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。静态变量可以实现让多个对象共享内存。

    是否可以从一个静态(static)方法内部发出对非静态(no-static)方法的调用?

    不可以,静态方法只能访问静态成员,因为非静态方法的调用要先创建对象,在调用静态方法时可能对象并没有被初始化。

    如何实现对象克隆?

    有两种方式

    • 实现Cloneable接口并重写Object类中的clone()方法;
    • 实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆

    String s = new String("xyz");创建了几个字符串对象?

    两个对象,一个是静态区的"xyz",一个是用new创建在堆上的对象。

    接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?

    接口可以继承接口,而且支持多重继承。抽象类可以实现(implements)接口,抽象类可继承具体类也可以继承抽象类。

    一个".java"源文件中是否可以包含多个类(不是内部类)?有什么限制?

    可以。

    但一个源文件中最多只能有一个公开类(public class)而且文件名必须和公开类的类名完全保持一致。

    匿名内部类是否可以继承其它类?是否可以实现接口?

    可以继承其他类或实现其他接口,在Swing编程和Android开发中常用此方式来实现事件监听和回调

    内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制?

    一个内部类对象可以访问创建它的外部类对象的成员,包括私有成员。

    如何将字符串转换为基本数据类型? 如何将基本数据类型转换为字符串?

    调用基本数据类型对应的包装类中的方法parseXXX(String)valueOf(String)即可返回相应基本类型;

    • 一种方法是将基本数据类型与空字符串("")连接(+)即可获得其所对应的字符串;
    • 另一种方法是调用String 类中的valueOf()方法返回相应字符串

    怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串?

    new String() + getBytes()方法

    String s1 = "WMS";
    String s2 = new String(getBytes("GB2312"), "ISO-8859-1");
    

    try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?

    会执行,在方法返回调用者前执行。

    Java语言如何进行异常处理,关键字:throws、throw、try、catch、finally分别如何使用?

    在Java中,每个异常都是一个对象,它是Throwable类或其子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并可以对其进行处理

    • try用来指定一块预防所有异常的程序
    • catch子句紧跟在try块后面,用来指定你想要捕获的异常的类型;
    • throw语句用来明确地抛出一个异常;
    • throws用来声明一个方法可能抛出的各种异常
    • finally为确保一段代码不管发生什么异常状况都要被执行;

    列出一些你常见的运行时异常?

    • ArithmeticException(算术异常)
    • ClassCastException (类转换异常)
    • IllegalArgumentException (非法参数异常)
    • IndexOutOfBoundsException (下标越界异常)
    • NullPointerException (空指针异常)
    • SecurityException (安全异常)
  • 相关阅读:
    二项堆(三)之 Java的实现
    二项堆(二)之 C++的实现
    二项堆(一)之 图文解析 和 C语言的实现
    斜堆(三)之 Java的实现
    斜堆(二)之 C++的实现
    斜堆(一)之 C语言的实现
    左倾堆(三)之 Java的实现
    左倾堆(二)之 C++的实现
    左倾堆(一)之 图文解析 和 C语言的实现
    二叉堆(三)之 Java的实现
  • 原文地址:https://www.cnblogs.com/kylinxxx/p/14504555.html
Copyright © 2011-2022 走看看