Java review part 1: basic

2020/10/10

学习java时还是大二的时候,当时很多现在新的特性都没有学习,现在重新复习一下Java基础部分。

Basic

  1. Javaa虚拟机本身不具备跨平台功能,每个操作系统下有不同版本的虚拟机。

image-20201006125133593

  1. java的方法就是类似C语言的函数
    public static void method_name() {
      方法体;
    }
    
  1. 编译器常量优化 在给变量赋值时,如果右侧表达式都是常量,没有任何变量,那么编译器javac将会直接将若干个常量表达式计算得到结果。

    例如:

    short res = 3 + 8;
    

    编译之后就是

    short res = 13;
    

    注意:一旦表达式中有变量参与,就不能进行这种优化了。

  2. overload(重载) = 多个方法的名称相同,但是参数列表不一样。

    package cn.mine.day01.demo01;
    
    public class Demo03OverLoad {
      public static void main(String[] args) {
          System.out.println(sum(10, 20));
          System.out.println(sum(10, 20, 30));
      }
      public static int sum(int a, int b) {
          return a + b;
      }
      public static int sum(int a, int b, int c) {
          return a + b  + c;
      }
      public static int sum(int a, int b, int c, int d) {
          return a + b + c + d;
      }
    }
    

数组

  1. 数组特点

    • 引用数据类型
    • 元素类型相同
    • 数组长度在程序运行期间不可改变
  2. 数组初始化

    • 动态初始化(指定长度) = 数据类型[] array_name = new 数据类型[数组长度]; 使用动态初始化数组时,其中元素将会自动拥有一个默认值。

      类型默认值
      int0
      float0.0
      char‘\u0000’
      booleanfalse
      引用null
    • 静态初始化(指定内容)

      • 标准格式 = 数据类型[] array_name = new 数据类型[] {...}
      • 虽然静态初始化没有直接指定长度,但是可以根据具体内容推算出来
      • 省略格式 = 数据类型[] array_name = {...}

获取数组长度 = arr.length

Java内存划分

划分为5个部分(前三个重要):

  1. 栈(Stack) = 存放的都是方法中的局部变量。方法的运行一定在栈中

    一旦超出作用域,立刻从栈内存中消失

  2. 堆(Heap) = 凡是new出来的东西,都在堆当中

    堆内存中的东西都有一个地址值,为16进制。

    堆内存中数据,都有默认值。规则:

    • int = 0
    • float = 0.0
    • char = ‘\u0000’
    • boolean = false
    • 引用类型 = null
  3. 方法区(Method Area) = 存放.class相关信息,包含方法的信息。

  4. 本地方法栈(Native Method Stack) = 与操作系统相关

  5. 寄存器(pc Register) = 与CPU相关

image-20201006155912578

注:上图出自黑马程序员 Java