面试-Java基础

1、Java的特点

        1.Java是一门面向对象的编程语言

        2.Java具有良好的平台独立性和可移植性。他可以一次编写到处运行,这个的关键在于Java虚拟机。编译好的程序可以放到任何平台上的Java虚拟机上运行。

        3.Java具有稳健性。它有垃圾回收机制、try-catch-finally异常处理语句等,这些可以保证了Java的稳健性。

        4.Java摒弃了C++中的一些概念,比如指针和多重继承。

2、JDK和JRE的区别

        JDK包含了JRE,JDK全称是Java Development kit,Java开发工具包,JRE的全程是Java RunTime Environment,Java运行时环境,这里面包含了Java运行时的核心库。

3、面向对象的特性

        三大特性:封装、继承、多态

        1.封装:将属性和方法等类信息封装到一个类里面,不允许外部程序直接访问

        2.继承:子类继承父类的属性和方法,并且在子类中可以重写父类的方法,也可以扩展自己新的功能。

        3.多态:实现多态的三要素是:继承、重写、父类引用指向子类对象。

4、基本数据类型

        Java有八大基本数据类型

类型booleanbytecharshortintfloatlongdouble
大小-8bit16bit16bit32bit32bit64bit64bit
包装类型BooleanByteCharacterShortIntegerFloatLongDouble

        其中boolean大小可能是4个字节也可能是1个字节,在用int的时候4字节,byte数组的时候1字节

5、为什么浮点数不能表示金额

        因为在计算机中小数是近似值,会有精度损失。可以用BigDecimal来表示金额。

6、什么是值传递什么是引用传递

        值传递就是传递这个变量的副本,改变这个副本不会影响这个变量

        引用传递传递的是对象的地址,对这个对象进行操作会影响原对象

7、Integer初始化

        以下代码结果的原因是:在给Integer变量赋值的时候,会先从Integer Cache中取值,如果在Integer Cache中取不到,就会新建一个对象。Cache的范围是-128~127,当在这个范围内时,返回是同一个对象,范围外返回的是不同的对象。

Integer a = 100;
Integer b = 100;
// true
System.out.println(a==b);


Integer a1 = 128;
Integer b1 = 128;
// false
System.out.println(a1==b1);

8、String、StringBuilder、StringBuffer的区别

        String不可变,StringBuilder和StringBuffer可变

        String和StringBuffer是线程安全的,StringBuilder是线程不安全的;String被final关键字修饰了所以不可变,StringBuffer则通过Synchronized进行了同步。

9、什么是字符串常量池

        顾名思义,字符串常量池就是存储字符串常量的池子。在需要创建一个字符串的时候,会先去字符串常量池中查找,如果存在该字符串就返回这个字符串的引用,如果不存在就会在堆中新建一个字符串放到常量池中,然后返回其引用。

10、Object的常用方法

        toString()、equals()、hashCode()、clone()、getClass()、wait()、notify()等

11、深拷贝与浅拷贝

        浅拷贝:拷贝对象和原始对象的引用指向的是同一个对象

        深拷贝:拷贝对象和原始对象的引用指向不同的对象,在深拷贝的时候会为其分配新的空间,然后将原始对象中的内容复制到拷贝对象中

12、为什么重写equals就要重写hashCode?

        equals为true那么hashCode必定一致,但是hashCode一致equals不一定相等。

        hashCode是为了加快比较的效率,在比较两个对象时会先比较他们的hashCode,如果不一样那么就不用再用equals比较了。

        当重写了equals但是没有重写hashCode的时候,就会造成两个对象equals相等但是hashCode不一致的情况。当在以这个对象为key存在HashMap中时,用另一个对象去查就有可能会出现查不到的情况。因为HashMap中查找用的是hashCode的值。

13、Java创建对象的几种方式

        直接new、clone、反序列化、反射Class.newInstance()

14、equals和==的区别

        对于基本数据类型来说,不能用equals比较,只能用==比较,比较的是他们的值

        对于引用类型来说,==比较的是对象的地址,equals方法默认比较的也是地址,但一般会重写,比较对象中的值。

15、常见的关键字

        1.satic

                static修饰的变量是静态变量,在类加载的时候会被初始化

                static修饰的方法是静态方法,可以不创建对象直接用类名访问

                static修饰的代码块只会在类加载的时候执行一次

        2.this

                用于访问本类的属性和方法

        3.super

                用于访问父类的属性和方法

        4.final

                被final修饰的变量不可以被修改,而且必须初始化。

                被final修饰的方法不能被重写

                被final修饰的类不能被继承

16、final、finally和finalize的区别

        final修饰的变量不能被修改,方法不能被重写,类不能被继承

        finally是异常处理语句中的一部分,finally的语句块不管异常是否发生都会被执行

        finalize是Object的一个方法,当用System.gc()的时候会调用这个函数进行垃圾回收

17、重载和重写的区别

        重载是在同一个类中有多个相同名字的方法,但是形参列表(形参个数、类型、顺序)不一致。

        重写是在子类中重写父类的方法,要求方法名称一致,形参列表一致,返回类型可以不一致但是必须是父类返回类型的子类。

18、接口和抽象类的区别

        1.在语法方面:抽象类中可以实现方法,接口只有抽象方法;抽象类中成员变量可以是各种类型的,接口的变量由public static final修饰;一个类可以实现多个接口但只能继承一个抽象类。

        2.在设计层面,抽象类实现的是“是不是”的关系,比如对于一个Animal的抽象类,可以由Cat、Dog等类继承,是一种属于的关系;接口实现的是“有没有”的关系,比如鸟有飞的功能,飞机也可以飞。

19、常见的异常

        数组下标越界异常、空指针异常、数学运算异常、类型转换异常等

20、异常Exception和错误Error的区别

        异常是程序可以自己处理的问题,比如碰到异常可以抛出;错误是程序无法解决,比如栈溢出、内存溢出等错误。

21、throw和throws的区别

        throw抛出的是一个具体的异常对象,throws则是声明可能抛出的异常。

22、什么是反射

        反射指的是在运行状态中,对于任意一个类,能够动态地获取类的属性和方法;对于任意一个对象,能够调用它的属性和方法。

        反射的场景有:JDK动态代理,JDBC连接数据库等

22、Java的泛型

        泛型是在声明和定义接口时使用的类型参数,在具体使用的时候可以用具体类型替换。泛型的好处就是可以减少代码的复用,比如对于List而言,里面可以存String,也可以存Integer,使用泛型就可以不用写两个List了。

23、序列化和反序列化是什么?为什么要序列化和反序列化

序列化:将对象转换为字节流的过程

反序列化:将字节流转化为对象的过程

对内存中的对象进行持久化或网络传输的时候需要序列化和反序列化,统一成字节流

如果有些字段不想序列化,就使用transient修饰,只能修饰变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值