Java八股文总结一

Java基础

一、JDKJREJVM之间的关系?

1、JDK(Java Development Kit):Java开发工具包,提供给Java程序员使用,包含了JRE,同时还包含了编译器javac与自带的调试工具Jconsole、jstack等。

2、JRE(Java Runtime Environment):Java运行时环境,包含了JVM,Java基础类库。是使用Java语言编写程序运行的所需环境。

3、JVM:Java虚拟机,运行Java代码。

二、==和equals的区别

1、==对于基本数据类型,比较的就是值,对于引用数据类型,比较的是他们的内存地址是否为同一地址。

2、equals比较的是对象的内容是否相同。

三、说说final 关键字

1. 修饰变量或字段,表示常量(即不能修改)

2. 修饰类:表示此类不能被继承

3. 修饰方法:表示该方法不能被重写

四、java语言有哪些特点

简单性、面向对象、分布式、健壮性、安全性、体系结构中立、可移植性、解释性、高性能、多线程、动态性等。

五、面向对象和面向过程的区别

  1. 抽象级别:面向过程主要关注解决问题的步骤和过程,以函数为基本单位,强调算法和流程控制。而面向对象则更关注问题领域中的实体和对象,强调将问题划分为多个相互关联的对象,并通过对象之间的交互来解决问题。
  2. 数据和行为:面向过程将数据和行为分离,强调数据的处理和操作,而面向对象则将数据和行为封装在一个单元中,即对象,对象包含了自身的状态(数据)和行为(方法)。
  3. 可重用性和扩展性:面向对象具有良好的可重用性和扩展性,通过继承、封装和多态等机制可以更方便地创建和扩展新功能。而面向过程缺乏这样的机制,代码复用和扩展相对较为困难。

六、instanceof关键字的作用

用于测试一个对象是否是指定类型的实例;(object instanceof class) 

七、八大数据类型及封装类

八、java自动装箱与拆箱

自动装箱是 Java 编译器在基本类型和它们对应的包装类之间进行的自动转换。例如,将 int 类型转换为 Integer 类型,将 double 类型转换为 Double 型等等。如果转换以相反的方式进行,则称为拆箱// 包装类和基本数据类型的相互转换

 九、hashCode的作用

hashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的。

十、什么是字节码,采用字节码的好处

字节码是Java等编程语言源代码经过编译器编译后生成的一种中间代码格式,它包含了程序的所有信息,但比机器码更抽象,不能直接被计算机硬件执行。相反,字节码需要在Java虚拟机(JVM)或其他类似的虚拟机上执行,由虚拟机将其转换成特定平台的机器码后再执行。

采用字节码的好处:Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可以移植的特点。所以Java程序运行时比较高效,而且,由于字节码并不专对一种特定机器,因此,Java程序无须重新编译便可以在多种不同的计算机上运行。

十一、Object类有哪些常见的方法

详细参考:Object类常见方法_object有哪些方法-CSDN博客

 十二、java创建对象有几种方法

1、使用`new`关键字直接创建对象

2、工厂模式(Factory Pattern)

工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

3、单例模式(Singleton Pattern)

单例模式确保一个类仅有一个实例,并提供一个全局访问点。在单例模式中,对象的创建被封装在类内部,客户端通过类的静态方法获取对象实例。

4. 反射(Reflection)

Java反射API允许程序在运行时检查或修改类的行为。使用反射,可以在运行时动态地创建对象。

5. 序列化与反序列化

在Java中,序列化和反序列化是对象持久化的一种方式,它们分别用于将对象的状态保存到一系列字节中(序列化),以及从字节序列中恢复对象(反序列化)。虽然序列化和反序列化本身不是直接“创建”对象的过程,但它们可以用于在需要时重新构造对象的状态。

序列化

序列化是将对象的状态信息转换为可以存储或传输的形式的过程。在Java中,这通常是通过实现`java.io.Serializable`接口(或`java.io.Externalizable`接口,但后者需要更复杂的实现)来完成的。对象被序列化后,可以将其写入文件、发送到网络上的另一个进程,或者存储在内存中等待后续使用。

反序列化

反序列化是序列化的逆过程,即将序列化后的字节序列转换回原来的对象。通过反序列化,可以从文件中读取对象、从网络上接收对象,或者在程序的其他部分中重新构造对象。

 详细参考:

java中创建对象地方式有哪几种?(面试高频)_java创建对象的几种方式-CSDN博客

Java 创建对象的几种方式_java创建对象的几种方式-CSDN博客

十三、获取类class对象的方式有哪些

详细参考:三种获取Class的对象的方法_获取class对象的三种方式-CSDN博客

十四、什么是泛型,泛型有什么作用

详细参考:什么叫泛型?有什么作用?-CSDN博客

十五、重载和重写的区别 

十六、StringStringBufferStringBuilder的区别

1、String的内容不可修改,StringBufferStringBuilder的内容可以修改.

2、StringBufferStringBuilder大部分功能是相似的

3、StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作。

十七、String安全吗

安全,(1)String是一种不可变对象,String类被final修饰(被final修饰意味着不能被继承,有助于确保String类的稳定性和安全性)(2)String类中的字符实际保存在内部维护的value字符数组中,value被修饰被final修饰,表明value自身的值不能改变,即不能引用其它字符数组,但是其引用空间中的内容可以修改。

尽量避免对String的直接修改,如果要修改建议尽量使用StringBuffer或者StringBuilder

StringStringBuilder最大的区别在于String的内容无法修改,而StringBuilder的内容可以修改。

 十八、深拷贝与浅拷贝区别了解吗

 

十九、抽象类和接口的区别

 核心区别: 抽象类中可以包含普通方法和普通字段, 这样的普通方法和字段可以被子类直接使用(不必重写), 而接口中不能包含普通方法, 子类必须重写所有的抽象方法。

详细参考:

抽象类和接口的区别(最详细)_抽象类与接口的区别-CSDN博客

接口和抽象类的区别-CSDN博客

补充:

抽象类和接口

一、抽象类特性:六点

  1. 抽象类不能直接实例化对象
  2. 抽象方法不能是 private 的
  3. 抽象方法不能被final和static修饰,因为抽象方法要被子类重写
  4. 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用 abstract 修饰
  5. 抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类
  6. 抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量

二、接口

  1. 在java中,接口可以看成是:多个类的公共规范,是一种引用数据类型。
  2. 接口不能直接使用,必须有一个“实现类”实现该接口,实现接口中的所有的抽象方法。

三、接口特性:八点

  1. 接口类型是一种引用类型,但是不能直接new接口的对象
  2. 接口中每一个方法都是public的抽象方法, 即接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)
  3. 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现
  4. 重写接口中方法时,不能使用默认的访问权限
  5. 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量
  6. 接口中不能有静态代码块和构造方法
  7. 接口虽然不是类,但是接口编译完成后字节码文件的后缀格式也是.class
  8. 如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类
  9. jdk8中:接口中还可以包含default方法。

四、一个类只能继承一个类(只有一个父类),但可以实现多个接口,当一个类实现多个接口时,每个接口中的抽象方法都要实现,否则该类必须设置为抽象类。接口可以多继承接口。

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值