文章目录
大纲
1.Java语言及JVM
知识点:
1)什么是Java语言:
- Java是跨平台的纯面向对象的语言
2)JVM概念:
- JVM是运行在操作系统之上,是一个可以运行java代码的虚拟计算机;
- 对于不同的平台,有不同的虚拟机,其屏蔽了底层运行平台的差别,实现了“一次编译,导出运行”。
什么是JDK、JRE、JVM,及其之间的关系:
- JDK(Java Development Kit,Java开发工具包):
- 包含JRE以及一些开发工具
- 面向开发人员使用(开发用的)
- JDK:javac.exe:编译工具, java.exe:运行工具
- JRE(Java Runtime Environment,Java运行时环境):
- 包含JVM以及一些核心的运行类库,面向运行人员使用(运行用的)
- 核心类库,简单理解就是已经写好的java代码(eg.写代码时System等代码的使用)
- JVM(Java Virtual Machine, Java 虚拟机):
- 包含字节码等核心内容(核心所在,跨平台的关键)
- 运行程序的载体【平台】
java编译运行原理
- Java 引入了字节码的概念,JVM只能认识字节码,并将它们解释到系统的 API 调用,JVM把字节码解释成具体平台上的机器指令。
- 对于不同的平台,有不同的虚拟机,其屏蔽了底层运行平台的差别,实现了“一次编译,导出运行”。
编译运行流程:
2.数据类型
基础数据类型,四类八种:
1)整数类型:(使用最多的是int)
- byte 1个字节;范围 : -128~127 2^7=128 + 一位符号位
- short 2个字节
- int 4个字节
- long 8个字节
-
2)小数类型:
- float(单精度) 4个字节
- double(双精度) 8个字节
3)布尔类型:
-
boolean 1个字节 true false
-
回答:理论上来说,八分之一个字节就能表示他的大小,但是计算机当中最小的存储单元是字节,所以它应该占1个字节。
boolean类型数据注意事项:
- 只允许取值true和false,无null
- 不可以 0 或非 0 的整数替代false和true,这点和C语言不同
- boolean类型不可以转换为其它的数据类型
- Java虚拟机中没有任何供boolean值专用的字节码指令,java语言表达所操作的boolean值,在编译之后都使用java虚拟机中的int数据类型来代替:true用1表示,false用0表示《java虚拟机规范 8版》
4)字符类型:
- char 2个字节 0~65535 = 2^(2*8)-1
// a = 97
// A = 65
// 0 = 48
char c1 = ‘a’;
char c2 = 65;
char c3 = 48;
占用空间/取值范围:
- 计算机中最小的存储[单元] - 字节-byte
- 计算机中最小的存储[单位] - 位-Bit-比特
- 1个字节 = 8个位 (Bit) 比特位
问题:byte存储空间为8,最小值为 1111 1111 不应该代表 -127么?
Java程序默认的运算是十进制, 但是在底层运算的过程中, 都是以二进制(补码)的形式在运算.
byte b = (byte) 130; //问 b的值是?
/*
130存储形式:0000 0000 0000 0000 0000 0000 1000 0010
对应byte8位补码的存储为:1000 0010 其反码为 1000 0001 其源码为 1111 1110
对应十进制为 -126
*/
默认值:
- 整数(四种类型): 0
- 小数(两种类型): 0.0
- 布尔: false
- 字符: 0 或写为:’\u0000’(表现为空)
- 引用数据类型: null
注意事项:
1)所有整数默认都是int类型 、所有小数默认都是double
2)定义float类型变量应该加F的标识
float num = 12.3;
//一开始就会报错,需要加F标识:
float num2 = 12.3F;
//因为12.3常量默认是8个字节的double类型,直接赋值会报错(因为涉及强制转换,应转换为float类型);
3)定义Long类型变量应该加L的标识,建议使用大写.
long num = 12345678;
//常量值默认是用int类型存储的,当数值过大时会产生溢出,正确做法如下:
long num = 123456789999L;
4)为什么float占4个字节,long占8个字节,float却比long要大呢?
- 因为整数和小数,底层的二进制存储结构不同.
5)byte, short, char, int 在一起运算的时候, 都会先提升为int (因为所有整数默认都是int类型),
- 其余类型的运算, 都是小的提升为大的.
3.运算符
知识点:
-
运算符的分类?
-
算数运算符有哪些?
算数运算符(自增自减运算符) 赋值运算符 扩展赋值运算符:+= 、-=、*=、/= 、%= 关系运算符[比较运算符] 逻辑运算符 三元运算符[三目运算符]
注意事项:
- 1)整数相除结果只能是整数
- 2)如果想计算出小数, 必须要有浮点类型数据参数运算
- 3)字符与字符串参与加法运算
- 4)自增与自减操作【案例】
int x = 4;
// 4 + 6 + 60
int y = (x++)+(++x)+(x*10);
System.out.println("x="