1、class 类名必须与文件名一样
javac Hello.java - javac命令,编译代码,会生成一个 jvm 运行的 class 文件
java Hello - java命令,运行代码
2、java运行机制 - java既有编译型特点,也有解释型特点
高级语言分 2 种:编译型、和解释型
编译型和解释型的区别就在于执行时机不一样。
以一本书作比喻:比如中国人L创作了《三体》,美国人M想看,但是M不懂中文,那么M有 2 种方式去读这本书。
第一种,《三体》直接翻译印制为美文版出书,M要看就去买翻译的美文版这本书,直接看;
第二种,M请一个翻译官F,F边看边翻译给M。
经过这 2 种方式,M都可以看完《三体》这本书,但是这 2 种方式各有优缺点:
第一种方式的缺点,就是比如L修改了一部分《三体》,那么翻译的美文版,就得重新翻译印制成书,M想看就只能再次购买新出的书
第二种方式的缺点就是M看到后面想再从前面看,那么F也得翻到前面重新翻译给M,并且F如果不翻译了,那么M也看不了了。
3、java程序运行机制
(1)源程序java文件 - 经过java编译器 - 编译为字节码(class文件)
这个class文件才是真正被执行的文件,所以java程序都会经过一个预编译阶段生成class文件 - 机器语言与java源代码之间的字节码文件
(2)class执行的时候,就会经过一系列处理,走到 JVM虚拟机,jvm虚拟机会将这个class类加入到 JVM 的类装载器 - 之后经过字节码校验器校验是否出错 - 在交给解释器解释给操作系统,解释一步执行一步
所以Java就是既有编译型语言的特点,也有解释型语言的特点。
4、数据类型
强类型语言:要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。
弱类型语言:如javascript
java的数据类型分为两大类:基本类型、应用类型
什么是字节:
位(bit):是计算机 内部数据 储存的最小单位,11001100是一个八位二进制数
字节(byte):是计算机 数据处理 的基本单位,用B表示
1B(字节) = 8 bit(位)
字符:是指计算机中使用的字母、数字、字和符号
1bit表示1位,1Byte表示1个字节,1B=8b,1Kb =1024B
5、数据类型问题记录
(1)整数拓展:进制问题 - 二进制(0b开头) 十进制 八进制(0开头) 十六进制(0x开头)
int i = 10;
int i2 = 010; // 八进制, 为8
int i3 = 0x10; // 十六进制,为16
(2)浮点数拓展:银行业务,浮点数计算怎么表示
浮点数的加减乘除会存在问题,因为浮点数是有限的离散的,而有很多数据是无限的,浮点数都会存在舍入误差,它是接近但不等于
最好完全不使用浮点数进行比较。
需要使用java内置的类BigDecimal去进行浮点数的计算
(3)字符可以强制转换为数字。
原因:所有的字符本质还是数字
编码问题 - Unicode编码表(97 = a)- 2字节 - 65536
6、数据类型转换
强制转换:(类型)变量名 - 低 -> 高
自动转换:高 -> 低
注意:
(1)不能对布尔值进行转换
(2)不能把对象类型转为不相干的类型
(3)在把高容量转为低容量的时候,是强制转换;把低容量转为高容量的时候,是自动转换
(4)转换的时候可能存在内存溢出,或者精度丢失问题
注意:
(1)操作比较大的数的时候,注意溢出问题(JDK7新特性,数字之间可以用下划线_分割)
7、字符串连接符的一个小细节问题
比如:a=10,b=20
那么:'' + a + b = '1020',但是:a + b + '' = '30'
8、包的本质就是文件夹
为了更好的组织类,Java提供了包机制,用于区别类名的命名空间
一般利用公司域名倒置作为包名:com.modb.user
为了使用包里的成员,需要先使用import语句导入该包