• 常见面试问题及回答——JAVA基础


    java的特点和优点

    1、首先java具有良好的平台移植性,java通过编译生成的.class文件支持多平台允许,JVM对不同系统有具体的实现,不同平台均可运行字节码
    2、面向对象的编程语言,拥有封装继承和多态
    3、避免了C++中指针等概念,简单易用
    4、java提供了垃圾回收,开发人员不需要随时对占用的内存进行回收,jvm底层的垃圾回收机制会自动处理
    5、丰富的框架,包括spring,mybatis等

    JAVA的基本数据类型和引用类型

    基本数据类型:byte,short,int,long, float,double, char ,boolean,
    string不是java的基本数据类型
    基本数据类型,被声明之后会立刻在栈上分配内存空间

    引用数据类型:除基本数据类型之外都是引用类型,包括String,数组,类,接口,
    引用数据变量在声明的时候不会分配内存空间,只是存储了一个内存地址

    抽象类和接口的区别

    1、抽象类本质上是类,有构造函数,而接口没有
    2、抽象类可以被继承,接口可以实现,只能继承一个抽象类,接口可以实现多个
    3、抽象类中可以有方法的具体实现,而接口中只能存在抽象方法
    4、接口只能定义静态常量,不能定义普通成员变量
    5、接口不能包含初始化块,抽象类中可以

    final关键字

    1、final关键字修饰的是不能被修改的
    2、final修饰的类是不能被继承的
    3、final修饰的方法不能被重写
    4、final修饰的变量不能改
    5、final修饰引用类型不能变,但是引用对象的内容可以变

    static修饰符

    1、java类成员包含成员变量,方法,构造函数,代码块和内部类,
    2、static不能修饰构造函数
    3、static声明的方法和成员变量,在类加载的时候加载,属于类,所以static声明的内容优先与对象存在,静态内容不能访问非静态内容,非静态内容可以访问静态内容(类成员不能访问实例成员)

    String类 new

    1、String是字符串,一但声明不能更改,如果更改了,就是另外一个字符串
    2、底层是char的数组
    3、StringBuilder 线程不安全,但是效率高和StringBuffer 线程安全
    4、String类是用final修饰的,所以不能被继承
    5、String的new有两种方式,一个是直接使用字符串创建,(直接使用字符串常量池管理字符串)二个是使用new String(“d s”),(先在字符串常量池里面管理字符串,再String构造器生成String对象,并保存至堆中)
    6、String的常用方法:charAt,split,trim,subString

    ==equals的区别

    == 基本数据类型比较的是值,引用数据类型比较的是地址
    equals没有重写时,比较的是两个对象的内存地址是否一致,重写之后按照对象的内容进行比较

    hashcode和equals的区别,为什么重写equals就要重写hashcode

    1、hashcode主要用来计算hashcode
    2、equals主要用来比较两个对象是否相等
    3、两者之间有约定,equals判断相等时,hashcode一定相等,而hashcode相等时,equals不一定相等
    4、对象的equals方法继承于objects,原始的equals方法比较的是内存地址,而我们实际使用中,通常需要比较的是对象的值是否相等,因此需要重写equals,为了满足约定,重写equals时也需要重写hashcode

    JAVA8的新特性

    1、lambda表达式,运行函数作为方法的参数
    2、streamAPI
    3、DatetimeApi
    4、方法引用

    包装类的自动装箱和自动拆箱

    1、java有8中基本数据类型byte,short,int,long,float,double,char,boolean
    2、对应的包装类,Byte,Short,long,Int,Float,Double,Char,Boolean
    3、从基本数据类型变成包装类叫自动装箱,反过来是自动拆箱
    4、通过自动装箱和拆箱简化了基本数据类型和包装类之间的转换

    java的异常处理机制

    1、java的异常都继承于Throwable
    2、主要分为exception和error
    3、exception是程序本身可以处理的异常:包括CheckedException(需要捕获)和UncheckedException(无需捕获)
    4、CheckedException通常有IOException
    5、UncheckedException通常NullPointerException
    6、error是程序本身不可以处理的错误,通常有OutOfMemory
    7、CheckedException需要try()catch()finally
    8、try用来执行代码,catch用来捕获异常,finally用来关闭资源
    9、finally一定会执行,除非碰到线程被interrupter或者system.exit(1)
    10、如果fnally中有return语句会覆盖掉trycatch中的return语句

    重载和重写的区别,构造方法能不能重写

    1、重载是同一个类中,存在名字一样,参数类型或数量的不一样的函数,重载与方法的返回值和访问修饰符无关
    2、重写是在父子类之间,存在名字一样,参数列表也一样的函数,返回对象要是父类返回对象的子类或类型一致;访问修饰符要大于等于父类方法
    3、构造方法不能重写,构造方法要求与类名一致,而父类的构造方法与父类类名一致,如果对构造方法重写,那么构造出来的就不是子类了

    泛型和泛型擦除

    1、泛型是类型参数化
    2、java早期是没有泛型的,在泛型之前,为了实现泛型编程,通过继承实现的,通过继承Object类实现泛型编程,但是存在安全性和强制类型转换的问题,因此提出了泛型在编译时进行类型安全检查,强制转换自动或隐式的
    3、泛型擦除就是java在编译阶段会将类型信息擦除,JVM处理.class文件时是没有类型信息的

    反射

    1、反射是在编译器不知道类的属性和方法,在运行期间获得类的属性和方法
    2、通常通过对象.getClass;类.class;Class.forName(“”)获取class对象
    3、通过反射可以通过代理的模式实现对象的创建,降低耦合
    4、常用场景AOP中的动态代理使用到了反射机制,使用xml进行配置管理,使用了反射机制将配置文件实例化

  • 相关阅读:
    STM32HAL库开发
    Google guava之ListMultimap简介说明
    【机器学习算法】聚类算法-4 模糊聚类 密度聚类,如何判断超参数:数据群数
    重磅开源:基于.NET 6.0 自研轻量级ORM框架
    你有对象类,我有结构体,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang结构体(struct)的使用EP06
    K8S集群应用国产信创适配实战经验总结
    万字Numpy教程带你从入门到放弃
    【JVM系列】- 启航·JVM概论学习
    系列四、Java8的Lambda表达式
    Go 处理粘包拆包
  • 原文地址:https://blog.csdn.net/weixin_44567900/article/details/126714497