Java 精选

Java面试宝典 1.13~1.31【2020.5 Beta版】

2020-05-29  本文已影响0人  Java_Pro

Java面试宝典 1.13~1.31【2020.5 Beta版】

<a name="14cb060b"></a>

1.Java基础

<a name="22b8b366"></a>

1.13 静态变量与实例变量的区别?

静态变量 实例变量
定义 使用static关键字声明的 实例变量在类中声明,但是在方法,构造函数或其他块之外
初始化 属于类,只要加载了类的字节码,就会被分配空间 必须创建实例对象,才会被分配空间
加载次数 初始化加载一次 每创建一次对象加载一次

<a name="3360eeec"></a>

1.14 是否可以从一个static方法内部发出对非static方法的调用?

<br />不可以,static方法调用时不需要创建对象,非static方法的调用需要创建实例,那在这个时刻,就像是你想找对象秀恩爱,你对象还没出生,这不扯呢<br />

<a name="6c5ca606"></a>

1.15 Math.round(1.5)等于多少?Math.round(-1.5)又等于多少?

// Math.round 返回一个四舍五入的值
Math.round(1.5)  =  2
Math.round(-1.5) =  -1
//
Math.ceil() 向上取整
Math.floor() 向下取整

<a name="74f218ae"></a>

1.16 下面的代码有什么不妥之处?

// 1
if(str.equals("test")){}

// 2
System.out.println(0.1+0.2);

<br />第一个 str 为 null的话会抛出空指针异常,所以改为 "test".equals(str)<br />第二个会输出0.30000000000000004,改成<br />

System.out.println(new BigDecimal(String.valueOf(0.1)).add(new BigDecimal(String.valueOf(0.2))));

<a name="76fb7dfa"></a>

1.17 java中作用域 public,protected,private和默认不写时的区别

作用域 说明
public 可以被任何类访问
protected 可以被同一包中的所有类访问,被所有子类访问,子类没有在同一包中也可以访问
private 只能够被当前类的方法访问
缺省 无访问修饰符,可以被同一包中的所有类访问,如果子类没有在同一个包中,也不能访问

<a name="2553c675"></a>

1.18 重载与重写的区别

<br />很多,面试的时候就捡简要的说<br />

<br />基本上回答这些就OK<br />扩展:方法的重载与重写都是实现多态的方式,区别是前者是编译时的多态性,后者是运行时的多态性,重写遵循里氏代换原则,就是子类可以扩展父类的功能,但不能改变父类原有的功能<br />

<a name="badee970"></a>

1.19 Integer与int的区别

原始 包装类
byte Byte
short Short
int Integer
long Long
boolean Boolean
char Character
float Float
double Double

1.20 构造器Constructor是否可被override?

<br />构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload<br />

<a name="bdd0c610"></a>

1.21 java的接口可以继承接口吗?接口中可以定义静态或者默认方法吗?

<br />java的接口可以继承接口,第二个在jdk8之后也支持了,可以写静态方法体,但是默认方法要用default修饰符<br />

public interface TestInterface implements A,B,C{  
  
    static void staticMethod() {  
        System.out.println("static method");  
    }
 
    default void defaultMethod() {  
        System.out.println("default method");  
    }
}

<a name="dcf93c57"></a>

1.22 抽象类可以实现接口吗?抽象类是否可以继承具体类?抽象类中是否可以有静态main方法?

<br />抽象类可以实现接口,可以不必须实现接口中的所有方法<br />
<br />抽象类与普通类的区别<br />

<a name="09764d9b"></a>

1.23 clone()有什么作用?

<br />super.clone()<br />拷贝使用<br />

package erdan.demo;

public class TestClone {
    public static void main(String[] args) throws CloneNotSupportedException {
        Demo demo = new Demo();
        demo.a = 1;
        demo.b = 2;
        Demo demo2 = (Demo) demo.clone();
        demo2.a = 100;
        System.out.println(demo.a + " " + demo.b);
        System.out.println(demo2.a + " " + demo2.b);
    }

    static class Demo implements Cloneable {
        int a;
        int b;

        public Object clone() throws CloneNotSupportedException {
            return super.clone();
        }
    }
}

<a name="4e1b36ed"></a>

1.24 面向对象的特征

特征 总结
封装 隐藏对象的属性与实现细节,对外提供公开的访问接口
抽象 将一类对象共同特征总结出来构造类的过程
继承 从已有类得到继承信息创建新类的过程
多态 指允许不同子类型的对象对同一消息作出的不同响应

<a name="03cf2641"></a>

1.25 Java中实现多态的机制是什么?

<br />答:父类中有方法 fun(),子类B与C分别继承与重写了fun()方法,当创建一个 A a = new B()时,a.fun()调用的是B中的fun(),假若是new C(),那么调用的就是C中的fun()方法,怎么判断使用的是哪个类的fun(),就是动态绑定,这个现象,就是多态<br />

1.26 abstract class 与 interface 有什么区别?

1.30 抽象的方法可以是静态的吗?abstract与synchronized可以一起使用吗?

<br />用static声明方法表明这个方法在不生成类的实例时可直接被类调用,而abstract方法不能被调用,所以不能为静态的。<br />synchronized作用在具体的方法上才有意义,所以不行<br />

1.31 什么是内部类?Static Nested Class 与 inner class 不同点?

<br />内部类顾名思义就是在类内部的一个类,内部类中不能定义静态成员<br />Static Nested Class 静态内部类,不依赖于外部实例被实例化,通常的内部类需要在外部实例化后才能实例化。

上一篇 下一篇

猜你喜欢

热点阅读