自学内容网 自学内容网

Java每日面试题(java基础)(day17)

JDK/JRE/JVM三者的关系


  • Jdk【Java Development ToolKit】

    java开发 工具箱,提供了 Java 的开发环境和运行环境。

  • Jre【Java Runtime Enviromental】

    为 Java 的运行提供了所需 环境。

  • JVM【Java Virtual Machine】

    就是我们耳熟能详的 Java 虚拟机。Java 能够跨平台运行的核心在于 JVM 。

JRE = JVM + Java 核心类库
JDK = JRE + Java工具 + 编译器 + 调试器

JDK常用的包

  • java.lang:这个是系统的 基础类,比如String、Math、Integer、System和Thread,提供常用功能。
  • java.io: 这里面是所有 输入输出 有关的类,比如文件操作等。
  • java.net: 这里面是与 网络 有关的类,比如URL,URLConnection等。
  • java.util : 这个是系统 辅助类,特别是集合类Collection,List,Map等。
  • java.sql: 这个是 数据库 操作的类,Connection,Statememt,ResultSet等

== 和 equals 的区别是什么?


  • ==运算符
    • 基本类型:比较值
    • 引用类型:比较地址
  • equals()
    • 基本类型:比较值
    • 引用类型:默认使用的==比较的地址,不过一般进行重写,如Integer和String重写后比较的是值

Java 中的几种基本数据类型了解么?

Java 中有 8 种基本数据类型,分别为:

  • 6 种数字类型
    • 4 种整数型:byteshortintlong
    • 2 种浮点型:floatdouble
  • 1 种字符类型char
  • 1 种布尔型boolean

什么是自动拆装箱?


  • 装箱:将基本类型用它们对应的包装类包装起来;
  • 拆箱:将包装类型转换为基本数据类型;

final 关键字中有什么作用?

  • 修饰引用

    1. 如果引用为基本数据类型,则该引用为常量,该值无法修改;
    2. 如果引用为引用数据类型,比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改
    3. 如果引用是类的成员变量,则必须当场赋值,否则编译会报错。
  • 修饰方法无法被子类重写,但仍然可以被继承。

  • 修饰无法被继承

接口和抽象类有什么区别?


  • 相同点
    1. 都不能直接实例化
    2. 都可以有抽象方法
    3. 都是体现多态
  • 不同点
    1. 抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。
    2. 抽象类可以有 构造函数;接口不能有。
    3. 类可以实现很多个接口;但是只能继承一个抽象类。单继承多实现
    4. 接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。

String, StringBuffer 和 StringBuilder区别


  1. 可变性
    • String 不可变
    • StringBufferStringBuilder 可变
  2. 线程安全
    • String 不可变,因此是线程安全的
    • StringBuilder 不是线程安全的
    • StringBuffer 是线程安全的,内部使用 synchronized 进行同步

String 类的常用方法有哪些?


  • indexOf():返回指定字符的索引。
  • charAt():返回指定索引处的字符。
  • replace():字符串替换。
  • trim():去除字符串两端空白。
  • split():分割字符串,返回一个分割后的字符串数组。
  • getBytes():返回字符串的 byte 类型数组。
  • length():返回字符串长度。
  • toLowerCase():将字符串转成小写字母。
  • toUpperCase():将字符串转成大写字符。
  • substring():截取字符串。
  • equals():字符串比较

Object的常用方法有哪些


  • toString():默认输出对象地址。
  • equals():默认比较两个引用变量是否指向同一个对象(内存地址)。
  • hashCode():将与对象相关的信息映射成一个哈希值,默认的实现hashCode值是根据内存地址换算出来。
  • clone():复制对象的副本,使用的是浅拷贝。
  • getClass():返回此 Object 的运行时类,常用于java反射机制。
  • wait():使当前线程释放对象锁,进入等待状态。
  • notify():唤醒在此对象上等待的单个线程,选择是任意性的。
  • notifyAll():唤醒在此对象上等待的所有线程

Java创建对象有几种方式?


  1. new语句创建对象。
  2. 使用反射,使用Class.newInstance()创建对象。
  3. 调用对象的clone()方法。
  4. 使用反序列化

throw 和 throws 有什么区别?


  • throw 用于 手动抛出 java.lang.Throwable 类的一个例化对象
  • throws 的作用是作为 方法声明和签名的一部分,方法被抛出相应的异常以便调用者能处理。

&和&&的区别


&运算符有两种用法:(1)按位与;(2)短路与。

  • &:按位与,通过&两边的值计算结果。
  • &&短路运算,如果&&左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。

注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。

final、finally、finalize有什么区别?


final、finally和finalize是Java中的三个不同的概念。

  • final:用于声明变量、方法或类,使之不可变、不可重写或不可继承。
  • finally:是异常处理的一部分,用于确保代码块(通常用于资源清理)总是执行。
  • finalize:是Object类的一个方法,用于在对象被垃圾回收前执行清理操作,但通常不推荐使用

重载和重写有什么区别?


  • 重载

    重载发生在同一个类内部,目的是提供多种同名方法以适应不同的情况。

    • 方法名必须 相同。
    • 参数列表必须 不同(参数的数量、类型或顺序不同)。
    • 返回类型无要求。
  • 重写

    在子类中重新定义父类中的方法称为方法重写。

    • 方法名必须 相同。
    • 参数列表必须 相同。
    • 返回类型必须 相同。
    • 访问修饰符不能比父类的方法更严格(例如,父类方法为public,则子类重写的方法也应该是public)。

常见的Exception有哪些?


常见的 RuntimeException

  • ClassCastException // 类型转换异常
  • IndexOutOfBoundsException // 数组越界异常
  • NullPointerException // 空指针
  • ArrayStoreException // 数组存储异常
  • NumberFormatException // 数字格式化异常
  • ArithmeticException // 数学运算异常

常见的 CheckedException

  • NoSuchFieldException // 反射异常,没有对应的字段
  • ClassNotFoundException // 类没有找到异常
  • IOException // IO异常
  • SQLException // SQL异常

什么是反射?


反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有属性和方法。

Java的反射可以:

  1. 在运行时判断任意一个 对象所属的类。
  2. 在运行时判断任意一个类 所具有的成员变量和方法。
  3. 在运行时任意调用一个对象的 方法
  4. 在运行时 构造任意一个类的对象

反射常见的应用场景

  1. 动态代理
  2. JDBC的class.forName
  3. BeanUtils中属性值的拷贝
  4. RPC框架
  5. ORM框架
  6. Spring的IOC/DI

Java 中 IO 流分为几种?


  • 按功能来分:输入流(input)、输出流(output)。
  • 按类型来分:字节流和字符流。
  • 字节流和字符流的区别是:
    1. 字节流按8位(一个字节),以字节为单位输入输出数据
    2. 字符流按 16位(两个字节),以字符为单位输入输出数据

Files类的常用方法都有哪些?


  • exists():检测文件路径是否存在。
  • createFile():创建文件。
  • createDirectory():创建文件夹。
  • delete():删除一个文件或目录。
  • copy():复制文件。
  • move():移动文件。
  • size():查看文件个数。
  • read():读取文件。
  • write():写入文件。

什么是AIO、BIO和NIO?


  • BIO (Blocking I/O)同步阻塞I/O, 线程发起IO请求后,一直阻塞,直到缓冲区数据就绪后,再进入下一步操作。

  • NIO (Non-Blocking I/O)同步非阻塞IO,线程发起IO请求后,不需要阻塞,立即返回。用户线程不原地等待IO缓冲区,可以先做一些其他操作,只需要定时轮询检查IO缓冲区数据是否就绪即可。

  • AIO ( Asynchronous I/O)异步非阻塞I/O模型。线程发起IO请求后,不需要阻塞,立即返回,也不需要定时轮询检查结果,异步IO操作之后会回调通知调用方


原文地址:https://blog.csdn.net/qq_57036151/article/details/142822228

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