主要内容
- jdk、jre、jvm的区别
- Java环境的配置
- 第一个Java程序:Hello woeld
- 进制间的相互转换
- Java的数据类型
- J2EE,J2SE,J2ME三者的区别
- Java标识符规则
- 字符集简介
- float和double的区别
- char类型的注意点(可以直接当做整数来使用,注意两者之间的转换关系)
- 自动转型、强制转型、类型提升
笔记详解
1. jdk、jre、jvm的区别和联系
jdk :Java development kit,Java开发工具包,是整个JAVA的核心。包括了Java运行环境 jre ,一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。jdk是java开发工具包,基本上每个学java的人都会先在机器 上装一个jdk。
jre : Java run environment,Java运行环境,包含JVM标准实现及Java核心类库。JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器)。
jvm :Java virtual machine,Java虚拟机,它只认识 xxx.class 这种类型的文件,它能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。jvm 是 Java 能够跨平台的核心。
三者的关系是:jdk 包含 jre , jre 包含 jvm 。
2. Java环境配置
首先到 www.oracle.com 官网下载jdk,进行安装,下载链接: java SE jdk
安装好之后,配置系统环境变量。首先创建 JAVA_HOME 环境变量,变量值为jdk安装路径,如: C:\Program Files\Java\jdk-11.0.1 。给 Path 变量添加一个新值,可以直接使用新建的 JAVA_HOME 变量,如: %JAVA_HOME%\bin 。
3. 第一个Java程序:Hello world
Java是面向对象的一门语言,所以在 .java 文件中必须要定义一个个的class,在一个 .java 文件中可以定义多个class,这样经过编译之后,会生成多个 .class 文件。但是一个 .java 文件中,有且仅有一个一个使用public class
定义的class,而且这个class名必须和 .java 文件名一模一样。
Java是区分大小写的一门语言,所以字母的大小写一定不能混淆,不能随意更改。
4. 进制之间的相互转换
Java中经常使用的是二进制、八进制、十进制、十六进制。定义不同进制的方法如下
int a1 = 0b10; // 定义二进制
int a2 = 010; // 定义八进制
int a3 = 10; // 定义十进制
int a4 = 0x10; // 定义十六进制
上面定义的不同进制的数字,通过屏幕打印出来的最终结果是以十进制显示的,如果想要以二进制、八进制或者是十六进制来显示的话,可以使用进制转换方法来进行:
System.out.println(Integer.toBinaryString(a1)); // 十进制转二进制
System.out.println(Integer.toOctalString(a2)); // 十进制转八进制
System.out.println(Integer.toHexString(a4)); // 十进制转十六进制
5. Java的数据类型
6. J2EE,J2SE,J2ME三者的区别
J2EE,J2SE,J2ME是Sun 公司的Java多个版本,就像Windows XP还有专业版和家庭版是一样的。
J2EE:Java 2 Platform Enterprise Edition 企业版,用于企业应用,支持分布式部署。
J2SE:Java 2 Platform Standard Edition 标准版,用于桌面应用,也是J2EE的基础。
J2ME:Java 2 Platform Micro Edition 移动版用于小型设备,是J2SE的一个子集。
7. Java标识符规则
Java中标识符是用来给变量、类、方法等命名的,遵守如下的规则:
- 标识符必须以字母、下划线、美元符$来开头
- 标识符的其他部分可以使字母、数字、下划线、美元符$的任意组合,不能包含其他的字符
- Java标识符是区分大小写的,长度没有限制
- 标识符不能使Java关键字(class、static、public等)
- Java标识符可以使用中文,但是非常不建议这样做
8. 字符集简介
9. float和double的区别
浮点型的默认数据类型是double类型,而且double类型占8个字节,float占4个字节,所以在定义float类型变量的时候,不能直接进行赋值,声明方式如下:
float float_num = 3.14F; // 需要在字面量后面加上F进行标识
double double_num = 3.14; // 可直接进行赋值
float和double是浮点数类型,标识的值不是精确地,特别是在比较两个数值变量是否相等的时候,一定要避免使用浮点数进行比较,应该是用整型变量。比如下面的情况:
float float_num = 0.1F;
double double_num = 1.0/10;
System.out.println(float_num); // 0.1
System.out.println(double_num); // 0.1
System.out.println(float_num == double_num); // 但是这里的结果是false
10. char类型的注意点(可以直接当做整数来使用,注意两者之间的转换关系)
char类型可以直接赋值给int类型,最终的数值是该字符对应的 ASCII数值 。
char temp_a = 'a';
int num_a = temp_a;
System.out.println(num_a); // 输出的是97,即a对应的ASCII码
int类型也可以转为char类型,转换的结果是根据 ASCII对应关系 来定的。如果int类型的数值有对应的字符(一般为0-127),那么可以成功转换,否则会转换为乱码。
int num_b = 98;
char temp_b = (char)num_b; // 注意这里要进行强制转型
System.out.println(temp_b); // 输出的结果是b
综合练习:使用for循环,打印出26个字母:
char temp_a = 'a';
for(int i = 0; i < 26; i++) {
char temp = (char)(temp_a + i);
System.out.print(temp);
}
11. 自动转型、强制转型、类型提升
Java程序中,变量会根据需要进行自动转型,这主要体现在给变量赋值的时候,比如以下情况:
byte byte_num = 100; // int类型转byte类型,前提是不能超过byte类型表示的数值范围
short short_num = 200; // int类型转short类型,前提是不能超过short类型表示的数值范围
int int_num = 'a'; // char类型转int类型
long long_num = 6666; // int类型转long类型
float flaot_num = int_num; // int类型转float 类型,可能会存在精度丢失问题
double double_num = flaot_num; // float类型转double类型
Java程序中,我们还可以根据需要,对数据进行强制转型,防治数据溢出的问题。
long times = 70*60*24*365*200000000;
System.out.println(times); // 70*60*24*365*200000000得出的结果太大,最终的times数值是不对的,甚至是负数
为了解决上面的问题,我们就要进行强制转型,写法如下:
long times = 70*60*24*365*(long)200000000;
System.out.println(times);
其实上面的写法也涉及到类型提升的知识点,经过强制转型后的200000000,变为long类型,这个时候再去和int类型做加减乘除取余等操作,最终的结果也是long类型。这就是类型提升的问题。也是为了避免溢出情况的发生。