Java基础知识篇

ゝ一世哀愁。 2024-03-31 08:39 181阅读 0赞

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

    1. {
    2. /** The value is used for character storage. */
    3. private final char value[];
    4. }
  • StringBufferStringBuilder 均继承抽象类AbstractStringBuilder,底层实现是char类型的数组,没有被final修饰是可以改变的,区别在于StringBuffer的方法都是被synchronized修饰的,是线程安全的,适合多线程环境,但是执行效率较低

  • 对于字符串的拼接,String每次都会生成一个新的String对象到堆中,极大的消耗了内存,当内存不足进行垃圾回收会影响系统性能,而StringBufferStringBuilder的append方法返回的是自身,节约了资源

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

  1. public final class String
  2. {
  3. private final byte[] value;
  4. }

发表评论

表情:
评论列表 (有 0 条评论,181人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java基础知识

    Java基础知识篇2 数据类型转换 1、自动转换(隐式) 1.特点:代码不需要进行特殊处理,自动完成。 2.规则:数据范围从小到大。 2、强制转换(显式) 1.

    相关 linux基础-网络基础知识

    一.网络基础知识概念  1.什么是网络?   网络即为实现通讯的技术。  2.网络的诞生六步曲   (1).早期的网络需要拥有两台通讯的主机,当主机之间有通讯需求是就构