乐趣区

JAVA基础知识你真的会了吗

JAVA 基础知识

  • Math.round(var); 用于四舍五入
  • if(1)在 java 中不容许,C/C++ 能够。
  • void 也是根底数据类型之一。
  • 所有根底数据类型都有初值 0 或者 0.0,援用类型初值为 null。
  • this 只能用于办法外部,用于示意“调用这个办法的那个对象”的援用。
  • this 还能够调用其余结构器,如:this(a,b); 但只能用一次,且放在办法的第一行。
  • static 能够简略了解,全局的,只有一份,类加载时进行惟一一次初始化,不存在 this,不能够间接调用非 static 变量或办法(能够非 static 援用入参,再在外面 new 对象)。
  • 可变参数 … 原理: 编译器帮忙封装成数组。
  • finalize()办法,一个类容许有一个该办法(Object 的办法),用于 JVM 进行回收,但不能够间接调用!
  • System.gc(); 用于回收 runtime。
  • 初始化程序:

父类动态变量 — 父类动态代码块 — 子类动态变量 — 子类动态代码块 — 父类非动态变量(以及父类非动态代码块)– 父类构造函数 — 子类非动态变量(以及子类非动态代码块)— 子类构造函数

口诀:
先动态,再非动态,再结构器。
先变量,再代码块。

  • 枚举 enum:
public enum name{A,B,C,D}

类的 static 办法:values(),返回数组
非 static 办法:ordinal(), 返回申明程序


GC 自适应算法

  • 援用记数 :对象有援用连贯,则计数器 +1,断开连接时则减 1。当计数器为 0 时,启动回收。
  • 进行 - 复制 (copy-and-stop): 先暂停程序,把堆中“活”的对象挪动另一个堆。
  • 标记 - 扫描 (mark-and-swap): 同样暂停程序,是找到所有“活”的对象,打上标记,标记打完后,把没被标记的对象清理进来。


↑ 自适应的,分代的,进行 - 复制,标记 - 扫描 垃圾回收期。。。。


JIT(just in time)编译器: 将程序编译成机器码,晋升程序运行速度。

类加载时的两种策略:

  1. 让 JIT 编译所有代码。毛病:开展机器码比字节码大很多,导致程序速度慢。
  2. 惰性评估(lazy evaluation):必要时才让 JIT 工作,从不执行的代码就不让它编译。

HotSpot 就采纳了相似于法 2 的技术进行优化。将 class 字节码与机器码放入缓存,执行次数越多,越快。

退出移动版