• Java基础知识篇


    1.JDK 和JRE的区别

    JDK 是 Java Development Kit 的缩写,是功能齐全的JavaSDK,拥有JRE的一切,还有编译器(javac)和工具(javadoc和jdb),能够创建和编译程序。
    JRE是Java运行时环境,它是运行已编译Java程序所需的所有内容的集合,包括Java虚拟机,Java类库,Java命令和其他的一些基础构件。 (不能用于创建新程序)

    2.static和final的区别

    static

    • static可以修饰属性、方法、内部类、代码段
    • static修饰的属性初始化在类加载的时候(编译期),初始化之后可以修改
    • static修饰的属性所有对象共享这一个值(并且唯一)

    final

    • final可以修饰属性、方法、类、局部变量
    • final修饰的属性的初始化可以在编译器也可以在运行期,初始化后不能改变
    • final修饰的属性表明是一个常量
    • final修饰的方法不能在子类中被重写
    • final修饰的类不能被继承

    3.静态方法为什么不能调用非静态成员?

    1. 静态方法是属于类的,在类加载时分配内存,可以通过类名直接访问。而非静态成员属于实列对象,只有在对象实列化之后才存在,需要通过类的实例化进行访问。
    2. 在非静态成员不存在时,静态方法已经存在了,此时调用在内存中不存在的非静态成员是非法的。

    4.为什么静态方法不能访问this和super?

    静态方法是存储在静态区的,静态区会随着类加载器一起加载到内存中,此时并没有运行程序,也就没有实例化对象。而this是表示当前对象的,super表示父类的对象,没有实例化对象,因此也就不存在thissuper

    5.抽象类和接口的区别

    • 成员的区别

      • 抽象类:
        有构造方法,用于子类实例化
        成员变量:可以是变量也可以是常量
        成员方法:可以是抽象的,也可以是非抽象的
      • 接口:
        构造方法:没有
        成员变量:只能是常量。默认修饰符:public static final
        成员方法:JDK1.7只能抽象。默认修饰符 public abstract JDK1.8可以用defaultstatic开头的具体方法
    • 类和接口的关系区别

      • 类与类: 继承关系,只能单继承
      • 类与接口:
        实现关系,可以单实现,也可以多实现,类还可以在继承一个类的同时实现多个接口
      • 接口与接口:
        继承关系,可以单继承,也可以多继承
    • 设计理念区别

      • 抽象类里面定义的都是一整个继承体系中的共性内容
      • 接口是一个功能的集合,类似一个工具,需要使用就通过实现使用,是一种定义出来的规则和约束。

    6.选择使用接口和抽象类的依据

    • 抽象类关注对象是什么,比如手机、电脑、平板 三个类 的抽象类可以是 电子类,三者都是电子产品,都有CPU。接口关注对象能做什么,比如发消息、打电话,前者手机、电脑、平板都可以,而后者只能手机和平板。(因此可以实现两个接口,类需要哪个接口就实现哪个)
    • 由于单继承并且抽象类需要编写子类的所有共性,因此抽象类功能丰富,但是成本较高。接口在功能上弱化很多,但是成本低,方便使用。

    7.String StringBuffer StringBuilder的区别和联系

    • String在JDK1.8之前底层是被final修饰的char型数组,且string对象也被final修饰,string不可继承和修改。
    public final class String
         {
        /** The value is used for character storage. */
        private final char value[];
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • StringBufferStringBuilder 均继承抽象类AbstractStringBuilder,底层实现是char类型的数组,没有被final修饰是可以改变的,区别在于StringBuffer的方法都是被synchronized修饰的,是线程安全的,适合多线程环境,但是执行效率较低
    • 对于字符串的拼接,String每次都会生成一个新的String对象到堆中,极大的消耗了内存,当内存不足进行垃圾回收会影响系统性能,而StringBufferStringBuilder的append方法返回的是自身,节约了资源

    注: JDK1.8之后StringStringBufferStringBuilder底层实现全改成了 byte类型的数组

    public final class String
        {
        private final byte[] value;
        }
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    element plus tree组件 check-change 和 check属性的区别
    进程,子进程,线程,协程
    【LeetCode每日一题】——130.被围绕的区域
    如何给PDF文件设置和取消打开密码
    Qt信号槽与事件循环学习笔记
    【ICer的脚本练习】“精通各种语言的hello world!“
    3.BeautifulSoup库
    对话庄表伟:开源第一课
    Ubuntu Docker 开启2375端口 【手把手教程】
    Table of Laplace Transforms
  • 原文地址:https://blog.csdn.net/qq_52595134/article/details/127925404