Java基础
一、Java运行机制,关键字,命名规则
Java运行机制
语言运行机制
Java程序要经过先编译后解释,既具有编译型语言的特征,也具有解释型语言的特征。
高级语言按照执行方式可以分为编译型语言和解释型语言。
编译型语言:通过专门的编译器将高级语言一次性编译为可执行的机器码。如C、C++等
解释型语言:通过专门的解释器将高级语言逐行解释成可执行的机器码。如Ruby、python等。
JVM
java语言需要先进行编译,编译不会生成机器码,而是生成一种与平台无关的字节码(.class文件),再通过Java解释器来解释执行。下图为Java程序运行的两个步骤。
Java语言负责解释执行字节码文件的是Java虚拟机(即JVM)。
所有平台上的Java虚拟机向编译器提供相同的编程接口,编译器只需要面向JVM编译。
二、Java语言基础
2.1注释
注释
单行注释 //
多行注释 /* xxx */
文档注释 /** xxx */
2.2关键字和标识符
关键字和标识符
关键字:Java语言赋予特殊含义的单词,关键字全部小写。goto和const为保留字存在。
标识符:给类,接口,方法,变量起名使用的字符序列。
标识符规则:英文大小写字母;数字字符;¥和_。
注:标识符不能以数字开头;不能是Java关键字;区分大小写。
命名规则
包:全部小写。
类或接口:首字母大写(驼峰命名)。
方法和变量:一个单词全部小写,多个单词从第二个开始首字母大写。
常量:单个单词全部大写,多个单词全部大写,单词之间用_连接。
2.3数据类型分类
Java语言是强类型语言,每个变量和表达式都有一个编译时就确定的数据类,所以必须要显式声明类型。
Java语言支持的实际类型分为基本类型(Primitive Type)和引用类型(Reference Type)。基本类型包括Boolean 类型和数值类型,引用类型包括类,接口和数组类型。
2.4基本数据类型
2.5基本数据类型的转换
自动转换
如果系统支持把某种基本数据类型的值直接赋给另一种基本数据类型的变量。
当把一个表数范围小的数值或者变量直接赋给另一种表数范围大的变量时,系统可以进行自动类型转换。
注:任何基本数据类型的值和字符串进行连接运算时,基本数据类型自动转换为字符串类型。(字符串类型为引用类型)
强转
当把表数值大的值或者变量转换为表数值小的变量时必须进行强制类型转换。(即自动转换类型图中的类型倒着转换)。
强制转换类型语法格式:(targetType)value
强制类型转换可能会引溢出,造成数据丢失。
示例
public class NarrowConcersion {
public static void main(String[] args){
// 将int转换为byte
int value1 = 123;
byte values2 = (byte)value1;
// 将double类型转换为int
double value3 = 3.14;
int value4 = (int)value3;
}
}
表达式类型的自动提升
算数表达式中包含多个基本类型的值时,整个算数表达式的数据类型会发生自动提升。
①所有的byte、short、char都会被提升为int类型
②表达式的类型将保持和表达式中最高等级操作数相同的类型。
示例
public class Test {
public static void main(String[] args){
byte a = 1;
char b = 'b';
int c = 2;
double d = 3.14;
int e = a+b;
double result = a + b +c +d;
// 输出结果为99,b自动提升为int型,为对应的ASCⅡ值
System.out.println(e);
// 输出结果为104.14
System.out.println(result);
}
}
表达式中带有字符串时,全部提升为字符串
示例
public class Test {
public static void main(String[] args) {
// 输出 helloWorldc1,全部转换为String类型
System.out.println("helloWorld" + 'c' + 1);
// 输出为 100helloWorld,先将'c'提升为int和1相加,再转换为字符串和字符串helloWorld连接
System.out.println('c' + 1 + "helloWorld");
}
}
2.6运算符
运算符是一种特殊的符号,用来表示数据的运算、赋值和比较等。
算数运算符
加 +
减 -
乘 *
除 / 、:如果两个操作数都是整数,结果也是整数,即截断取整,除数不可以为零;如果两个操作数至少有一个为浮点数,则结果也为浮点数,除数可以为0或0.0,结果无穷大。
取余 %:由于要进行除法运算,所以两个操作数为整数时,第二个不能为0;如果至少一个为浮点数,则第二个操作数可以为0或0.0,结果为非数NaN。0或0.0对0以外的数取余结果为0或0.0;
自加 ++:++a +b 先自加再运算;a++ +6先运算再自加
自减 –
注:++、–只能用于变量,不能用于操作数直接量或者常量。
赋值运算符
=
扩展赋值运算符
= | 简单的赋值运算符,将右操作数的值赋给左侧操作数 | C = A + B将把A + B得到的值赋给C |
+ = | 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 | C + = A等价于C = C + A |
- = | 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 | C - = A等价于C = C - A |
* = | 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 | C * = A等价于C = C * A |
/ = | 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 | C / = A,C 与 A 同类型时等价于 C = C / A |
(%)= | 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 | C%= A等价于C = C%A |
<< = | 左移位赋值运算符 | C << = 2等价于C = C << 2 |
>> = | 右移位赋值运算符 | C >> = 2等价于C = C >> 2 |
&= | 按位与赋值运算符 | C&= 2等价于C = C&2 |
^ = | 按位异或赋值操作符 | C ^ = 2等价于C = C ^ 2 |
| = | 按位或赋值操作符 | C | = 2等价于C = C | 2 |
示例
public class Test {
public static void main(String[] args) {
int a = 4;
int b = 5;
a += b;//相当于a=a+b;
System.out.println("a=" + a + "\nb=" + b);
a = 4;
a *= b + 3;//相当于a=a*(b+3)
System.out.println("a=" + a + "\nb=" + b);
}
}
运行结果
a=9
b=5
a=32
b=5
位运算符
按位与:&
按位或:|
按位非:~
按位异或:^
左移运算符:<<
右移运算符: >>
无符号右移运算符:>>>
比较运算符
<、<=、>、>=、==、!=
> 、 < 、 >= 、 <= 只支持左右两边操作数是数值类型
== 、 != 两边的操作数既可以是数值类型,也可以是引用类型
逻辑运算符
操作符 | 例子 | 结果 | 描述 |
& | true&true | true | (5>3) & (5>4):5大于3并且5大于4,有道理 |
| | true|false | true | (5>3) | (5>10):5大于3或者5大于10,没毛病 |
! | !false | true | false取反是true,true取反就是false |
^ | true^false | true | 异或运算符,只要两边的操作数不同,结果就是true |
&& | true&&true | true | 短路与(&&)和逻辑与(&)实际上最终的运行结果是完全相同的,只不过短路与(&&)会存在短路现象。 |
|| | true||false | true | 短路或(||)和逻辑或(|)实际上最终的运行结果是完全相同的,只不过短路或(||)会存在短路现象。 |
& 与 &&(|与||) 的区别:& 和 | 左右两边的式子一定会执行,&& 和 || 只要左边的式子能得出结果,右边的式子就不会执行,即发生短路,比较智能些,效率高些。
三目运算符
也叫三元运算符
语法:
boolean表达式 ? 表达式1 : 表达式2
解释:
boolean表达式的结果是true,则整个表达式的结果就是表达式1,相反则是表达式2。
示例
(x>y) ? (x-=y): (x+=y);
注:注意运算符优先级
运算符优先级
优先级 | 运算符 | 简介 | 结合性 |
1 |
| 方法调用,属性获取 | 从左向右 |
2 | !、~、 ++、 – | 一元运算符 | 从右向左 |
3 | * 、/ 、% | 乘、除、取模(余数) | 从左向右 |
4 | + 、 - | 加减法 | 从左向右 |
5 | <<、 >>、 >>> | 左位移、右位移、无符号右移 | 从左向右 |
6 | < 、<= 、>、 >=、 instanceof | 小于、小于等于、大于、大于等于, 对象类型判断是否属于同类型 | 从左向右 |
7 | == 、!= | 2个值是否相等,2个值是否不等于。 下面有详细的解释 | 从左向右 |
8 | & | 按位与 | 从左向右 |
9 | ^ | 按位异或 | 从左向右 |
10 | | | 按位或 | 从左向右 |
11 | && | 短路与 | 从左向右 |
12 | || | 短路或 | 从左向右 |
13 | ?: | 条件运算符 | 从右向左 |
14 | =、 += 、-= 、*= 、/=、 %=、 &=、 |=、 ^=、 <、<= 、>、>= 、>>= | 混合赋值运算符 | 从右向左 |