0.JVM
任何软件的运行,都必须要运行在操作系统之上,而我们用java编写的软件可以运行在任何的操作系统上,这个特性称为java语言的跨平台特性。该特性是有jvm实现的,我们编写的程序运行在jvm上,而jvm运行在操作系统上。
java虚拟机本身不具备跨平台功能,每个操作系统下都有不同版本的虚拟机。
环境变量的配置
[我的电脑]右键[属性],左侧[高级系统设置],[高级],[环境变量],[系统变量]中[新建],[变量名]:JAVA_HOME [变量值]:[D:\Java\jdk-9.0.4],[Path]选中,然后点[编辑],在变量值前面加上[%JAVA_HOME%\bin;]
1.Java程序中一句连续的字符串不能分开在两行中书写,如下编译时会出错
System.out.println("这是第一个
Java程序!");
可以先将这个字符串分成两个字符串,然后用加号(+)将这两个字符串连起来,在加号(+)处断行。
System.out.println("这是第一个"+
"Java程序!");
2.初学者在定义标识符时应遵循以下规则:
(1)包名所有字母一律小写,例如 cn.itcast.test
(2)类名和接口名每个单词的首字母都要大写,
(3)常量名所有字母都大写,单词之间用下划线连接
(4)变量名和方法名的第一个单词首字母小写,从第二个单词开始每个单词首字母大写
3.标识符可以由任意顺序的大小写字母、数字、下划线和美元符号($)组成,但标识符不能以数字开头。
4.在Java中,一个小数会被默认为double类型的值,因此在为一个float类型的变量赋值时需要注意一点,所赋值的后面一定要加上字母F(或f)
float f = 123.4f;
5.在Java中可以通过一条赋值语句对多个变量进行赋值,
int x, y, z;
x = y = z = 5;
但下述写法错误:
int x = y = z = 5; //错误
6.运算符&和&&都表示与操作,在使用&进行运算时,不论左边为true或者false,右边的表达式都会进行运算。如果使用&&进行运算,当左边为false时,右边的表达式不会进行运算,因此&&被称为短路与。(|和||类似)
7.>>>无符号右移
8.当break语句出现在嵌套循环中的内层循环时,它只能跳出内层循环,如果想使用break语句跳出外层循环则需要对外层循环添加标记。(continue同)
mark:for(……;……;……){
for(……;……;……){
if(……) break mark;
}
}
9.方法的重载与返回值类型无关,只需满足(1)方法名相同(2)参数个数或参数类型不相同。
10.一维数组的
静态初始化有两种方式:
(1)类型[] 数组名 = new 类型[]{元素,元素,……};
(2)类型[] 数组名 = {元素,元素,……};
动态初始化:
(1)类型[] 数组名称 = new 类型[元素个数];
11.二维数组的常见定义方式
(1)int[][] arr = new int[3][4];
(2)int[][] arr = new int[3][];
(3)int[][] arr = {{1,2},{3,4,5,6},{7,8,9}};
12.Java中的内存划分——java的内存需要划分为5个部分
(1)栈(Stack):存放的都是方法中的局部变量。方法的运行一定要在栈当中运行。
局部变量:方法的参数,或者是方法[]内部的变量
作用域:一旦超出作用域,立刻从栈内存当中消失。
(2)堆(heap):凡是new出来的东西,都在堆当中。
堆内存里面的东西都有一个地址值:16进制
堆内存里面的数据,都有默认值。
(3)方法区(Method Area):存储.class相关信息,包含方法的信息
(4)本地方法栈(Native Method Stack):与操作系统相关。
(5)寄存器(pc Register):与CPU相关。
13.四则运算中加号的常见三种用法
(1)对于数值来说,那就是加法。
(2)对于字符char类型来说,在计算之前,char会被提升成为int,然后再计算。char类型字符,和int类型数字之间的对照关系表:ASCII,Unicode
(3)对于字符串String(首字母大写,并不是关键字)来说,加号代表字符串连接操作。任何数据类型和字符串进行连接的时候,结果都会变成字符串。
14.强转注意事项
(1)对于byte/short/char 三种类型来说,如果右侧赋值的数值没有超过范围,那么javac编译器将会自动隐含地为我们补上一个(byte)(short)(char)
如果没有超过左侧的范围,编译器补上强转。
如果右侧超过了左侧的范围,那么直接编译器报错。
(2)在给变量进行赋值的时候,如果右侧的表达式当中全部是常量,没有任何变量,那么编译器javac将会直接将若干个常量表达式计算得到结果。
short result = 5 + 8; //等号右边全都是常量,没有任何变量参与运算
编译之后,得到的.class字节码文件当中相当于[直接就是]:
short result = 13;
右侧的常量结果数值,没有超过左侧范围,所以正确。
这称为“编译器的常量优化”。
但是注意:一旦表达式当中有变量参与,那么就不能进行这种优化了。
short a = 5;
short b = 3;
//short + short --> int + int --> int 自动提升
//short + result = a + b; //错误写法!左侧需要时int类型
15.数组变量是管理者,当
int[] b = a; //a也是数组
则意味着b和a管理的是同一个数组,b[0] 和 a[0]是同一个东西。当b中元素修改也就意味着a中元素被修改。
数组变量之间的比较是判断是否是管理的同一个数组,而不是元素的值是否相同。
复制数组只能通过遍历的方法
16.for-each 循环
boolean found = false;
for(int k: data){ //遍历数组
if(k == x){
found = true;
}
}