文章目录
- 1. Java 跨平台性
- 2. JVM与垃圾收集机制
- 3. jdk , jre , jvm关系
- 4. 编译过程
- 5. 注释
- 5.1 注释分类
- 5.2 文档注释
- 6. Java API 文档
- 7. Java 注意事项一
- 8. 关键字和保留字
- 8.1 关键字
- 8.2 保留字(reserved word)
- 9. 标识符 和 命名规则
- 9.1 标识符(identifier)
- 9.2 命名规则
- 10. 变量
- 11. Java的 数据类型
- 12. 整型类型byte,short,int,long
- 13. 浮点类型 float,double
- 14. 字符型 char
- 15. 字符集乱码详情
- 15.1 ASCII码
- 15.2 Unicode编码
- 15.3 UTF - 8编码
- 16. 布尔型 boolean
- 17. 自动类型提升
- 18. 强制类型转换
- 18.1 强制类型转换
- 18.2 强制类型转换的两个问题
- 18.2.1 不加f 或者 不加l 问题一
- 18.2.2 常量和类型 问题二
- 19. String 字符串类型
- 19.1 String 字符串介绍
- 19.2 char,数字,String(字符床) 之间的运算
- 20. 进制
- 21. 二进制 八进制 十六进制 的转换
- 22. Java中的volatile关键字
1. Java 跨平台性
跨平台性,为什么java能跨平台?
因为我们提供了不同操作系统的JVM版本。
2. JVM与垃圾收集机制
3. jdk , jre , jvm关系
4. 编译过程
一定注意我们平时通过javac命令编译后得到的.class文件就是字节码文件,字节码文件再运行便是结果。
5. 注释
5.1 注释分类
单行注释://
多行注释:/* xxx */
文档注释:它是Java特有的。
5.2 文档注释
文档注释:
javadoc命令:
javadoc -d 生成文件的名称 -author -version demo1.java
我们就可以在生成的name文件中,打开index.html就可以看到相关内容了
注意:javadoc只能解析文档注释,多行单行注释都不可以。
6. Java API 文档
https://www.oracle.com/cn/java/technologies/java-se-api-doc.html
7. Java 注意事项一
在一个java源文件中可以声明多个class。但是,只能最多有一个类声明为public的。而且要求声明为public的类的类名必须与源文件名相同。
程序的入口是main()方法,这是固定的。
常见的几个文本编译工具:(了解就可)
常用的Java集成开发环境(IDE):
8. 关键字和保留字
8.1 关键字
需要注意的是:关键字中所有字母都为小写。
8.2 保留字(reserved word)
9. 标识符 和 命名规则
9.1 标识符(identifier)
标识符的命名规则需要注意!!命名规则非常严格,不能马虎。
9.2 命名规则
学了这么多语言,Java的命名方式最复杂。。。不过习惯了自然而然,就会不自觉用到。
这里因为java采用unicode字符集,因此标识符也可以使用汉字声明,但不建议使用!!
10. 变量
格式定义:数据类型 变量名 = 变量值;
11. Java的 数据类型
在java中,字符串是属于类(class)类型!!
12. 整型类型byte,short,int,long
对面上面需要记住的:
byte的范围: -128 ~ 127
定义long型变量,必须以 l 或 L结尾。
1 个 byte(字节) = 8 bit;
1 个 short = 2 byte;
1 个 int = 4byte;
1 个 long = 8byte;
13. 浮点类型 float,double
float:单精度,尾数可以精确到7位有效数字。很多情况下,精度很难满足需求。1个float = 4 byte; float型常量,须在后面加上 f 或 F 。
double:双精度,精度是float的两倍。通产采用此类型。1 个 double = 8byte;
注意:单精度float表示数值的范围比long还要大。double比float的数值大。
14. 字符型 char
1个字符 = 2 byte;
定义char型变量,要使用一对 ’ ’ (单引号),切记不要使用" “双引号来定义,” "双引号默认是字符串格式。
字符型char定义时,内部只能写一个字符。
除了能定义一个字符,一个汉字,一个数字等等,还可以定义转义字符(例如: \n) 。
char定义也可以用Unicode编码表示,来定义一个字符,汉字等等。
15. 字符集乱码详情
15.1 ASCII码
ASCII码很重要,一定了解。
15.2 Unicode编码
15.3 UTF - 8编码
UTF-8,推荐使用。
注意事项如下:
16. 布尔型 boolean
17. 自动类型提升
自动类型提升
这里是按照范围容量来说的:(范围小的类型转为范围大的类型)
byte,short,char --> int --> long --> float --> double
注意事项:当byte,char,short三种类型的变量做运算时,结果为int类型。
最需要注意的是:1个float = 4个byte,1个long = 8个byte,但float的范围容量是比long要大的,很多人容易混淆这个事情。
结论:当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型。
源码:
/**
@author holmes
@version v1.0
这是我写的一个文档注释。
*/
class HelloChina{
/**
必须给类定义一个文档注释。
*/
public static void main(String[] args){
byte b1 = 2;
int i1 = 129;
//编译不通过,因为int转byte,byte范围很小,非常容易溢出。
//byte b2 = b1 + i1;
int i2 = i1 + b1; //byte转int
System.out.println(i2);
long l1 = b1 + i1; //byte,int转long
System.out.println(l1);
float f1 = b1 + i1 + l1; //byte,int,long 转float
System.out.println(f1);
double d1 = b1 + i1 + l1 + f1; //byte,int,long,float 转double
System.out.println(d1);
char c1 = 'a';
short s2 = 10;
//char c3 = c1 + s2; 编译不通过,返回结果int
//short s3 = c1 + s2; 编译不通过,返回结果int
}
}
再次提醒一下:当byte,char,short三种类型的变量做运算时,结果为int类型。
18. 强制类型转换
18.1 强制类型转换
强制类型转换相当于自动类型提升的逆运算。
需要使用强转符 :
(强转类型)变量
但是强制类型转换,可能导致精度损失。
例如:
因为double转为了int类型,数值上肯定丢失,这个过程叫损失精度。
double d1 = 12.91;
int i1 = (int)d1; //截断操作
System.out.println(i1); //因为double转为了int类型,数值上肯定丢失,这个过程叫损失精度。
注意:String字符串不能这么操作,(String)xxx这是错误的!
18.2 强制类型转换的两个问题
18.2.1 不加f 或者 不加l 问题一
float 和 long 一定要加 f 和 l ,不加会默认为int类型。
class demo{
public static void main(String[] args)
{
long l = 123123;
System.out.println(l);
//编译失败:过大整数
//long l1 = 21323234534234234; //因为这里没有加l,默认给他定义为了int,超过了int范围容量。
long l1 = 21323234534234234l; //这样就没问题了
System.out.println(l1);
//同样float也是一样的,一定要加f,不然就是范围大的往范围小的转了
float f1 = 12.3f;
}
}
18.2.2 常量和类型 问题二
整型常量,默认类型为int型。
浮点型常量,默认类型为double型。
意思就是我们再定义常量和不同类型加减的话,也是要遵循上面这两条的规则,见下面注释。
class demo{
public static void main(String[] args)
{
byte b = 12;
//byte b1 = b + 1; //这里1为整型常量,默认为int,所以不能转为byte,只能转int类型,报错。
//byte b2 = b + 12.3; //这里12.3为浮点型常量,默认类型为double类型,只能转double类型,因此报错。
}
}
19. String 字符串类型
19.1 String 字符串介绍
- String不是基本数据类型,属于引用数据类型。
- 只不过字符串的使用方式与基本数据类型一直。
- 一个字符串可以串接到另一个字符串,也可以直接串接其他类型的数据。
- 声明字符串要用一对" "双引号来表示。例如:String s = 123; //这里就是严重错误!
- char和string没关系,但是char定义是一对’ '单引号,而且定义单引号里面必须有一个数值,少了多了都不可以。例如:
char c = ''; //错误,什么都没传入的char就会报错。
//什么都没错编译错误,传入个空格都可以
char c = ' '; //哪怕传入个空格,也不会报错。
- String 可以和8种基本数据类型变量做运算,且运算只能是连接运算: + ,而且 + 运算后,整体上就变成了字符床类型。
19.2 char,数字,String(字符床) 之间的运算
这里一定记住一下a:97 , A:65 对应的ASCll码。
char , 数字 ,String(字符床) 之间的运算。
案例1:
class demo1{
public static void main(String[] args)
{
char c = 'a'; //这里一定记住一下a:97 , A:65 对应的ASCll码。
int num = 10;
String str = "hello";
System.out.println(c + num + str); //107hello
System.out.println(c + str + num); //ahello10
System.out.println(str + num + c); //hello10a
}
}
有上面运算可得知,它是从左到右的一个运算,判断好是那种类型的运算,字符串和字符,字符和数值,数值和字符串等等。
案例2: (其中 * 的AscII码为42,’\t’的AscII码为9)
如果我们将int或者其他类型数据转换为字符串怎么转换呢?
其实,通过上面就已经得到了启发。具体方法如下:
此外,我们用"" + num这种形式来转为字符串的话,最好""这个空字符串放到开头,因为放到开头他后面所有就不会进行一些运算操作,都会转为字符串!
20. 进制
对于进制,记好4个进制和它们的规则即可。
21. 二进制 八进制 十六进制 的转换
二进制结构如下:
原码,反码,补码。整数和负数变换不同。如下:
下图的负14,就是在正14的符号位修改为了1,得到的。
总结:
注意:计算机以二进制补码的形式保存所有的整数。因此,在涉及一些进制运算时,要先判断它的正负,然后推出原码来计算。
-128,这个数字的补码,很诡异,记住就行。
十进制转二进制:
一句话:除2取余,取逆数。
二进制和八进制,16进制转换
二进制转换八进制,16进制。
八进制,16进制转换二进制。
22. Java中的volatile关键字
Java中的volatile关键字的作用很简单,就是一个线程在对主内存的某一份数据进行更改时,改完之后会立刻刷新到主内存。并且会强制让缓存了该变量的线程中的数据清空,必须从主内存重新读取最新数据。这样一来就保证了可见性