Java学习

Java程序的底层实现

第一步

通过javac命令将java源码编译成字节码(.class文件),字节码不是机器语言,需要JVM来解释

第二步

通过java命令运行字节码,此时有两种处理方式

  1. 字节码由JVM逐条解释执行(Java虚拟机的基本执行模式)
  2. 部分字节码由JIT(Just in Time)编译成机器指令直接执行(直接在硬件上运行)

注释

文档注释

  1. 在.Java文件中可以在三个地方进行文档注释(类,字段,方法).
    语法:“/**”加回车
  2. 在终端中通过javadoc Main.java可以生成代码注释文档
  3. 在bash中使用start index.html打开注释文档网页

数据类型

包装器类型(Wrapper Types)

  1. 概念:将基本数据类型转化为对应的对象类型
  2. 作用:允许我们使用基本数据类型提供的各种使用方法,比如

基本数据类型和引用数据类型

基本数据类型

  1. 变量名指向具体的数值
  2. 基本数据类型存储在栈上

引用数据类型

  1. 变量名指向的是存储对象的内存地址,在栈上
  2. 内存地址指向的对象在堆上

堆(heap)和栈(stack)

简单介绍

  • 栈区是由编译器自动分配释放,存放函数的参数值,局部变量的值等。
  • 堆区是由程序员分配释放,未释放区可能会被操作系统回收

区别与联系

  1. 申请方式不同
  2. 存储方式不同
    • 栈是运行程序时自动拥有的一块内存,大小在编译其时由编译器参数决定
    • 堆是内存中的不连续的空闲区间(在操作系统中由链表串联在一起)
  3. 申请速率不同
    栈快于堆

基础类型转换

自动类型转换

  1. 场景:在表达式求值期间时,不同类型的数据之间需要相互兼容时。
  2. 数据类型排序
1
2
byte -> short -> int -> long -> float ->double
char -> int -> long -> float -> double

强制类型转换

  1. 场景
    • 将较大的数据类型转换为较小的数据类型
    • 将浮点数转换为整数
    • 将字符类型转换为数值类型
  2. 考虑下面几个算式的结果
1
2
3
4
5
int a = 1500000000, b = 1500000000;
int sum = a + b;
long sum1 = a + b;
long sum2 = (long)a + b;
long sum3 = (long)(a + b);
  • 结果为
1
2
3
4
-1294967296
-1294967296
3000000000
-1294967296
  • 除第三个外,其他都因为int大小的限制而溢出了