自学内容网 自学内容网

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

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 />
    ps: 参数相同,但返回值相同,那不叫重载,错误写法

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

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

1.19 Integer与int的区别

  • Integer是int的包装类,可以为 null 值
  • int是8种原始数据类型之一<br />
    8种原始数据类型与其包装类型
原始包装类
byteByte
shortShort
intInteger
longLong
booleanBoolean
charCharacter
floatFloat
doubleDouble

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方法?

  • 抽象类可以实现接口
  • 抽象类可以继承具体类
  • 抽象类中可以有静态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 有什么区别?

  • abstract class可以有构造方法,而interface不行
  • 单继承(抽象类),多实现(接口)
  • 方法类型:接口只能有抽象方法。抽象类可以具有抽象和非抽象方法。从Java 8开始,接口还可以具有默认方法和静态方法。
  • 最终变量:在Java接口中声明的变量默认为final,抽象类可能包含非 final 变量。
  • 变量类型:抽象类可以具有 final,非 final,static和非 static 变量。接口只有 static 变量和 final 变量。
  • 实现:抽象类可以提供接口的实现。接口无法提供抽象类的实现。
  • 继承与抽象:可以使用关键字“ implements”来实现Java接口,而可以使用关键字“ extends”来扩展抽象类。
  • 数据成员的可访问性:默认情况下,Java接口的成员是公共的。Java抽象类可以具有private,protected修饰的类成员
  • 接口是用来约束类的,抽象类基本是用来代码复用的

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

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

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

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



喜欢的朋友记得点赞、收藏、关注哦!!!


原文地址:https://blog.csdn.net/rita_0567/article/details/144407851

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!