jvm内存机制和java字符串面试要点

阅读目录

  • 1.标准Java bean写法
  • 2.String原理
  • 3.Java中三种常量池:
  • 4.细化Java内存模型
  • 5.字符串的比较
  • 6.抽象类
  • 7.接口
  • 8.内部类

1.标准Java bean写法

包括:private修饰的成员变量、getter和setter以及无参和有多个参数的有参构造方法

2.String原理

String底层是字节数组byte[]。

String不可变,但可以被共享。

3.Java中三种常量池:

(1)字符串常量池(全局字符串池):由于字符串本身具有不可变性,因此使用字符串常量池对于同样的字符串可以起到一个缓存的作用,防止多次内存分配,从而提供内存的利用率

(2)运行时常量池:当程序运行到某个类的时候,class文件中的信息就会被解析到内存的方法区的运行时常量池中,每个类都有一个运行时常量池。

(3)class文件常量池:class常量池是在编译后每个class文件都有的,class文件中除了包含类的版本 字段 方法 接口等描述信息,还有一项信息就是常量池,用于存放编译器生成的各种字面量和符号的引用。

4.细化Java内存模型

从大的方面来说,JVM内存分为几个方面:

jvm内存机制和java字符串面试要点

方法区又被称为永久代,也是被所有的线程所共享的,该区域主要保存类的信息,静态变量,常量和编译器编译后的代码等数据。

jdk7中,将永久代中的字符串常量池移动到堆中。jdk8 撤销了永久代 ,引入了元空间

jvm内存机制和java字符串面试要点

+连接字符串:

常量+常量:编译器直接优化生成结果,不需要生成StringBuilder。

常量+变量:需要生成StringBuilder,一行语句需要一个StringBuilder,append的数量基于变量和常量的个数,但当多个常量连在一起时,编译器会优化直接生成常量运算结果,算作一个append处理。

变量和变量:需要生成StringBuilder,一行语句需要一个StringBuilder,append的数量基于常量的个数

jvm内存机制和java字符串面试要点

6.抽象类

抽象类的语法格式:abstract class 类名{ }

抽象方法的语法格式:访问修饰符 abstract 返回值 方法名( );

抽象类的特点:

抽象类不能被直接实例化。
抽象类的子类必须实现抽象方法(除非这个子类也是抽象类)。
抽象类里可以有普通方法,也可以有抽象方法,但是有抽象方法的类必须是抽象类。
抽象类可以没有任何方法

7.接口

接口是一系列抽象方法的集合,与抽象类不同,不可以声明普通方法。

接口的语法格式:[修饰符] interface 接口名 [extends] [接口列表]{ 接口体 }

接口前面可以用public修饰,省略控制修饰符该接口也是公开的。

extends 关键词和类语法中的 extends 类似,用来定义直接的父接口。和类不同,一个接口可以继承多个父接口,当 extends 后面有多个父接口时,它们之间用逗号隔开。接口继承接口的语法格式为:[修饰符] class 类名 implements 接口列表{ 类体 }

类实现接口用 implements 关键字,Java 中的类只能是单继承的,但一个 Java 类可以实现多个接口,这也是 Java 解决多继承的方法。

接口下面不可以有实体方法。

接口中可以有成员变量,修饰符默认为 public static final(即便不写修饰符也默认是这样),因为是常量所以必须在声明时对这些成员变量赋初值。可以这样说,接口中的成员变量实际就是常量。

接口中的抽象方法默认且必须是 public 的。

接口 C 继承接口 A 和 B,不同的方法都被直接继承下来,相同的方法合并后被继承下来。

Java8之后,接口中可以有默认/静态方法,这个方法可以有实体。

接口不能继承抽象类,只能继承其他接口。

8.内部类

成员内部类 成员内部类 InnerClass 可以直接访问外部类 OuterClass 中的属性和方法,对于成员内部类的使用,需要先生成外部类对象,然后再以 外部类对象.new 内部类() 的形式生成内部类对象。
静态内部类 静态内部类 InnerClass 只能访问外部类 OuterClass 的静态属性和静态方法,可以通过类名直接调用,如 类名.方法()。与之类似,静态内部类中的方法也可以通过 静态内部类名.方法() 的形式调用。如果测试类和静态内部类不在同一个.java文件中,那么可以通过 外部类名.静态内部类.方法() 的形式调用。
局部内部类 JDK8.0 以后,局部内部类 在访问外部方法 定义的变量时,可以省略给变量加 final 修饰。局部内部类只能在定义它的方法内部使用,局部内部类的定义并不会影响外部类方法的使用。
匿名内部类

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91437 人正在系统学习中

来源:岛boki

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年6月18日
下一篇 2021年6月18日

相关推荐