关键字和保留字
- 关键字:被Java赋予特殊含义,用作专门用途的字符串(单词)
特点:关键字中所有字母均为小写
- 保留字(reserved word):现有Java版本尚未使用,但是后续版本可能作为关键字使用的。
- oracle官方地址
标识符(Identifier)
定义:对各种变量、方法、类、接口、包等命名时使用的字符序列。
注意:凡是自己可以起名字的地方都叫标识符。
合法标识符规则:
- 26个英文字母大小写、0-9、_或者$组成。
- 数字不能开头。
- 不能使用keyword和reserved word,但可以包含。
- 严格区分大小写,长度不限制
- 标识符不能包含空格
Java中的命名规范:
- 包名:xxyyzz
- 类名、接口名:XxxYyyZzz
- 变量名、方法名:xxxYyyZzz
- 常量名:XXX_YYY_ZZZ
注意:
- 见名知意
- 不要用汉字起名
变量
Java是强变量语言;定义不再赘述。
按照数据类型划分:
基本数据类型
- 整型:
byte(1B)、 short(2B)、int(4B)、long(8B)
其中关于long的声明,必须赋值时数字末尾加上 “L” / “l”。
整型常量默认为int
- 浮点型:
float(4B)、double(8B)
float定义,数字末尾以 “f” / “F” 结尾。
浮点型常量默认为double
-
char(1字符=2B):
1.用 ' ' 来声明;
2.熟悉一些转义字符:
\b 退格 \n 换行 \r 回车 \t 制表符 " 用\将”转义为普通的“ \‘ 同上,普通’ \ 普通\ 3.Unicode值来表示字符型常量,如char c1 = '\u0043',此为‘C’字符
-
boolean
只能取值为true/fasle
类型转换
自动类型提升
容量小的和容量大的数据类型做运算,结果自动提升为容量大的类型。
容量:表示数的大小范围。
byte、char、short < int < long < float < double
特别的:其中byte、char、short互相运算的结果是int
class LittleTypeTest{
static public void main(String[] args){
//char+byte
char char_1 = 'a';
byte byte_1 = 2;
//byte sum_1 = char_1 + byte_1;//错误: 不兼容的类型: 从int转换到byte可能会有损失
//char sum_2 = char_1 +byte_1;//错误: 不兼容的类型: 从int转换到char可能会有损失
//用int接收
int right_sum1 = char_1 + byte_1;
System.out.println(right_sum1);//99
//char + short
char char_2 = 'a';
short short_1 = 10;
//short sum_3 = char_2 + short_1; //错误: 不兼容的类型: 从int转换到short可能会有损失
//char sum_4 = char_2 + short_1; //错误: 不兼容的类型: 从int转换到char可能会有损失
int right_sum2 = char_2 + short_1;
System.out.println(right_sum2); //107
//byte + short
byte byte_2 = 'a';
short short_2 = 50;
//byte sum_5 = byte_2 + short_2; //错误: 不兼容的类型: 从int转换到byte可能会有损失
//short sum_6 = byte_2 + short_2; //错误: 不兼容的类型: 从int转换到short可能会有损失
int right_sum3 = byte_2 + short_2;
System.out.println(right_sum3);//147
//注意!!!
//以byte + byte为例, 也得用int接收
byte temp1 = byte_1 + byte_2;
System.out.println(temp1);//从int转换到byte可能会有损失
}
}
强制类型转换
class VariableTest3{
static public void main(String[] args){
//1.double 强转 int
double double1 = 12.9;
int result1 = (int)double1;
System.out.println(result1);//12,存在截断误差0.9
//2.int 强转 byte
int int1 = 128;
byte result2 = (byte)int1;
System.out.println(result2);//-128,补码问题
}
}
引用数据类型
类(class)
接口 (interface)
数组(array)
String类型及其运算:
/*
1.String属于引用数据类型
2.用双引号""声明
3.String可以和8种基本数据类型做运算,只能用+
4.运算的结果还是String
*/
class StringTest{
static public void main(String[] args){
//1.定义String,并输出
String s1 = "wkmyyy";
System.out.println(s1);//wkmyyy
//2.String与int用+进行连接
int num = 1011;
String s2 = "number:";
System.out.println(s2 + num);//number:1011
}
}
运算符
算数:
-
+、-、*、/、%
关于%结果的符号:
class ArithmeticTest{ static public void main(String[] args){ int dividend1 = 12; int divisor1 = 5; System.out.println(dividend1 % divisor1);//2 int dividend2 = -12; int divisor2 = 5; System.out.println(dividend2 % divisor2);//-2 int dividend3 = 12; int divisor3 = -5; System.out.println(dividend3 % divisor3);//2 int dividend4 = -12; int divisor4 = -5; System.out.println(dividend4 % divisor4);//-2 //因此,取模运算结果的符号与被除数符号一致 } } -
(前/后)++、(前/后)--;
-
+:用于字符串连接
赋值:
=、+=、-=、*=、/=
比较(结果为true/false):
==、!=、<、>、>=、<=、instanceof
逻辑:
逻辑与 &(短路与&&)、逻辑或 |(短路或 ||)、!、^(逻辑异或)
&和&&、|和||的区别:
class LogicTest{
static public void main(String[] args){
//逻辑与
boolean b1 = false;
int n1 = 10;
if(b1 & (n1++ > 0)){
System.out.println("b1 & n1++ is true");
}else{
System.out.println("b1 & n1++ is false");
}
System.out.println(n1);//11
//短路与
boolean b2 = false;
int n2 = 10;
if(b2 && (n2++ > 0)){
System.out.println("b2 & n2++ is true");
}else{
System.out.println("b2 & n2++ is false");
}
System.out.println(n2);//10
/*结论:逻辑与中即使b1为假,仍然判断n1++ > 0的语句
短语与的逻辑和c语言的&&一样,发现左侧为假直接不判断右侧条件
*/
//短路或
boolean b3 = true;
int n3 = 10;
if(b3 || (n3++ > 0)){
System.out.println("b3 & n3++ is true");
}else{
System.out.println("b3 & n3++ is false");
}
System.out.println(n3); // 10
//逻辑或
boolean b4 = true;
int n4 = 10;
if(b4 | (n4++ > 0)){
System.out.println("b4 & n4++ is true");
}else{
System.out.println("b4 & n4++ is false");
}
System.out.println(n4);// 11
// 类比&和&&的结论
}
}
位运算符:
| 运算符 | 运算 |
|---|---|
| << | 算数左移 |
| >> | 算数右移 |
| >>> | 逻辑右移 |
| & | 按位与 |
| | | 按位或 |
| ^ | 按位异或 |
| ~ | 按位取反 |
三元:
(条件表达式)? 表达式1:表达式2
int a = 10, b = -5, c = 24;
int max = (((a > b)? a : b) > c) ? ((a > b)? a : b) : c;
System.out.println(max); // 24
//简洁但可读性差
注意三元运算符的表达式1和表示式2的数据类型必须一致,如:
Object a = true ? new Integer(1):new Double(2.3);
System.out.println(a);//1.0
//因为要保证类型一致,所以只能对表达式1的Integer提升为Double