:::info

字串常量池和堆区字符串对象实例

::: MUBDT{B9JXPOM8II5T(18PE.png

  • String底层是 byte[] <—— 已经不是char[]了


  • 简单总结一下:直接赋值而不是使用new关键字给字符串初始化,在编译时就将String对象放进字符串常量池中;使用new关键字初始化字符串时,是在堆栈区存放变量名和内容;字符串的拼接操作在程序运行时,才在堆中创建对象。一般,可以认为使用”==”比较的是引用,equals比较的是内容。

:::info

  1. 形参传递的是堆中地址值 ::: ![QQ$}][8WE1OYPARQ[AP617.png
  • 题目中的形参str只是原引用ex.str的一个引用副本,传的是一个副本地址值,这个值与ex.str地址值是不一样的,但是它们同时指向了堆中的对象new String(“good”),当你在函数中改变形参也就是地址的副本值也就是这句str=”test ok”只是将副本地址指向常量”test ok”,并没有改变原ex.str的指向方向,它还是指向对象new String(“good”)的 :::info
  1. Java类加载机制 :::

  2. 虚拟机首次加载Java类时,会对静态初始化块、静态成员变量、静态方法进行一次初始化。我们不要去纠结这里的顺序,一般来说我们只需要知道,静态方法一般在最后。

  3. 类实例创建过程: 父类静态代码块 ->子类静态代码块 ->父类非静态代码块 -> 父类构造函数 -> 子类非静态代码块 -> 子类构造函数。
  4. 类实例销毁时候,首先销毁子类部分,再销毁父类部分 :::info

  5. 单例模式 ::: 使用场景:应用于全局使用的类,避免频繁创建和销毁带来的开销
    单例模式的设计要素

  • 私有构造函数(确保只有单例类自己能创建实例)
  • 私有静态变量(单例类实例)
  • 公有静态函数(公共接口)

构建单例设计方案:

  1. 懒汉式 2. 饿汉式 3.同步懒汉式 4.双检查锁实现 5.静态内部类 6.枚举 :::info try catch finnaly :::
  • 如果finally块中有return语句的话,它将覆盖掉函数中其他return语句。 :::info Servlet Hierarchy ::: 牛客Java基础 - 图2 :::info 里氏替换原则 见javase :::

:::info Float 和 Double :::

  • Double精度高于float
  • 声明float时需要强制转型 float f = (float) 2.0; 因为默认情况下小数为double类型 :::info .java —> .class字节码文件 ::: ====================点击查看图解================= :::info static方法 :::

  • 子类不能override父类的static方法,只能重载

  • 子类重载static(注意不是重写)后,Father f = new son(); f.staticMethod()调用的不是子类的静态方法而是父类的静态方法

static重载&&重载静态分派


多态

static重载&&重载静态分派
Java多态的两种情况


Collection

JavaSE

  • List``Queue``Set都继承了Collection接口,但它们元素的组织方式各不相同,为了解决这个问题,**Collection**接口实现了**Iterable**接口,所以 Collection 体系下的集合都可以通过 **Iterable** 的方法获取 **Iterator** 迭代器对象,并且每次获取到的都是新的,做到线程隔离。