2.1关键字
定义数据类型的关键字:class interface enum byte short int long float double char boolean void
定义数据类型值得关键字:class interface enum byte short int long float double char boolean void
定义流程控制的关键字:f else switch case default while do for break continue return
2.2标识符
合法的标识符:
由26个英文字符大小写,0-9,_或者$组成;
数字不可以开头;
不可以使用关键字和保留字,但是可以包含关键 字和保留字;
java严格区分大小写,不限制长度;
标识符不能含有空格
2.3变量
变量是内存中的一个存储区域;
该区域有自己的名称和类型;
变量必须先声明再使用;
该区域的数据可以在该类型范围内不断变 化
变量的作用域:一对{}内。
变量的声明定义:数据类型 变量名 = 变量的值 数据类型:基本数据类型和引用数据类型 基本数据类型: ·整型:byte(1字节)、short(2字节)、int(4字节)、long(8字节,long数后边要加L) ·浮点型:float(4字节,float数后边要加f)、double(8字节) ·字符型:char(2字节) \b退格\n换行\f回车\t制表\"双引号\‘单引号\\反斜杠 ·布尔型:boolean(只允许是true或false不能用0或非0数代替) 引用数据类型: ·类class ·接口interface ·数组[ ] ·String类型,可以用NULL赋值
基本数据类型
public class Test{
public static void main(String[] args) {
System.out.print("SSS\n");
System.out.println("SSS");
byte b=1;
short s=2;
int i=3;
long l=4L;
float f=5.1F;
double d=5.2;
char c='a';
boolean b1=false;
System.out.println(b+","+s+","+i+","+l+","+f+","+d+","+c+","+b1);
}
}
String类型
public class Test{
public static void main(String[] args) {
String string="Hello World\n";
String string1="Hello World";
System.out.println(string1);
System.out.print(string);
}
}
基本数据类型和引用类型的比较
nt a=1;int b=1;内存内会有两个空间值为1 String a="hello";String b="hello";内存中只会有一个空间值为hello Sting c=“he”+“llo”;内存中仍然只有一个空间值为hello,a、b、c都引用了hello的位置,假设hello位置为xxx,声明变量 a赋值hello实际上是让a变量引用hello的内存地址xxx,再声明变量b赋值为hello时也是把已经存在的hello的内存地址给b引用。
2.4基本数据类型转换(隐式转换)
自动数据类型转换:容量小的数据类型可以自动转换为容量大的数据类型。
有多种类型的数据混合运算时,系统自动的转换为容量大的数据类型再进行计算。
byte、short、char之间不会相互转换,他们三者之间计算时,先转换为int类型再进行计算。
当把任何基本类型的值和字符串进行连接运算时,基本类型的值将自动转换为字符串类型。
public class Test{
public static void main(String[] args) {
int b=9;
String string="Hello World";
System.out.println(b);
System.out.println(string);
System.out.println(b+string);
}
}
char转换为相应的ASCII码
boolean类型不能转换为其他类型
2.5运算符
算数运算符
+ | 加法 - 相加运算符两侧的值 | A + B 等于 30 |
- | 减法 - 左操作数减去右操作数 | A – B 等于 -10 |
* | 乘法 - 相乘操作符两侧的值 | A * B等于200 |
/ | 除法 - 左操作数除以右操作数 | B / A等于2 |
% | 取余 - 左操作数除以右操作数的余数 | B%A等于0 |
++ | 自增: 操作数的值增加1 | B++ 或 ++B 等于 21 B++是先进行表达式运算再自增 ++B是先自增在进行表达式运算 |
-- | 自减: 操作数的值减少1 | B-- 或 --B 等于 19与自增运算规则相同 |
关系运算符
运算符 | 描述 | 例子 |
== | 检查如果两个操作数的值是否相等,如果相等则条件为真。 | (A == B)为假。 |
!= | 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 | (A != B) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 | (A> B)为假。 |
< | 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 | (A <B)为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 | (A> = B)为假。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 | (A <= B)为真。 |
位运算符
操作符 | 描述 | 例子 |
& | 如果相对应位都是1,则结果为1,否则为0 | (A&B),得到12,即0000 1100 |
| | 如果相对应位都是 0,则结果为 0,否则为 1 | (A | B)得到61,即 0011 1101 |
^ | 如果相对应位值相同,则结果为0,否则为1 | (A ^ B)得到49,即 0011 0001 |
〜 | 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 | (〜A)得到-61,即1100 0011 |
<< | 按位左移运算符。左操作数按位左移右操作数指定的位数。 | A << 2得到240,即 1111 0000 |
>> | 按位右移运算符。左操作数按位右移右操作数指定的位数。 | A >> 2得到15即 1111 |
>>> | 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 | A>>>2得到15即0000 1111 |
逻辑运算符
操作符 | 描述 | 例子 |
&& | 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。 | (A && B)为假。 |
| | | 称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。 | (A | | B)为真。 |
! | 称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。 | !(A && B)为真。 |
赋值运算符
操作符 | 描述 | 例子 |
= | 简单的赋值运算符,将右操作数的值赋给左侧操作数 | 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 |
三目运算符
variable x = (expression) ? value if true : value if false
2.6程序流程控制
if-else
判断小明的期末成绩:当成绩为100分时,奖励一辆BMW;当成绩为(80,99]时,奖励一台iPhone手机;当成绩为(60,80] 时,奖励一本书,其他没有奖励。
public class Test{
public static void main(String[] args) {
int score = 89;
if (score == 100){
System.out.println("BMW");
}else if (score > 80 && score <= 99){
System.out.println("iPhone");
}else if (score > 60 && score <= 80){
System.out.println("一本书");
} else{
System.out.println("没有奖励");}
}
}
switch-case-break
数字1-7对应星期一到星期七
public class Test{
public static void main(String[] args) {
int i=6;
switch (i){
case 1:System.out.println("星期一");break;
case 2:System.out.println("星期二");break;
case 3:System.out.println("星期三");break;
case 4:System.out.println("星期四");break;
case 5:System.out.println("星期五");break;
case 6:System.out.println("星期六");break;
case 7:System.out.println("星期七");break;
default:System.out.println("ERROR!!!");break;
}
}
}
for循环
循环五次输出Hello World
public class Test{
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
System.out.println("Hello World");
}
}
}
while循环
循环五次输出Hello World
public class Test{
public static void main(String[] args) {
int i=0;
while(i<5){
System.out.println("Hello World");
i++;
}
}
}
do-while循环
循环五次输出Hello World
public class Test{
public static void main(String[] args) {
int i=0;
do{
System.out.println("Hello World");
i++;
}while(i<5);
}
}
特殊流程控制语句
break语句:终止当前所在的循环
continue语句:跳出当前这层的循环继续往下执行
return语句:结束整个方法
2.7数组
一维数组
声明方式:type var[]或type[]var
//动态初始化
int arr[]=new int[3];
arr[0]=1;
arr[1]=2;
arr[2]=3;
//数组下标是从0开始的
//动态初始化
int arr[]=new int[]{1,2,3};
//或者
int arr[]={1,2,3};
定义并用运算符new为之分配空间之后,才可以引用数组中的每个元素。 每个数组都有一个属性length指明他的长度,数组一旦初始化长度是不可以变的。 数组是引用类型,他的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式 初始化。
多维数组
//动态初始化
int arr[][]=new int [2][3];
//静态初始化
int arr[][]=new int[][]{1,1}{2,3};
数组常见问题
数组下标越界异常
空指针异常