基本语法
- 程序结束用分号;结尾。(必须英文分号)
- 两个单词或符号插入空格,制表符。
- 排版一行只写一条语句,{只占一行。
- 连续字符不能分两行,必须一行。
- 大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的。
- 类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。
- 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
- 源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为 .java。(如果文件名和类名不相同则会导致编译错误)。
- 主方法入口:所有的 Java 程序由 public static void main(String[] args) 方法开始执行。
Java 标识符
- 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始
- 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
- 关键字不能用作标识符
- 标识符是大小写敏感的
- 合法标识符举例:age、$salary、_value、__1_value
- 非法标识符举例:123abc、-salary
- 包名一律小写
- 类名与接口名首字母都要大写
- 常量名所有字母大写
- 变量名和方法名 第一个首字母小写,第二个大写
Java修饰符
像其他语言一样,Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:
- 访问控制修饰符 : default, public , protected, private
- 非访问控制修饰符 : final, abstract, static, synchronized
Java 变量
- 局部变量
- 类变量(静态变量)
- 成员变量(非静态变量)
Java 数组
数组是储存在堆上的对象,可以保存多个同类型变量。在后面的章节中,我们将会学到如何声明、构造以及初始化一个数组。
Java 枚举
Java 5.0引入了枚举,枚举限制变量只能是预先设定好的值。使用枚举可以减少代码中的 bug。
例如,我们为果汁店设计一个程序,它将限制果汁为小杯、中杯、大杯。这就意味着它不允许顾客点除了这三种尺寸外的果汁。
Java基本格式
修饰符 class 类名{
代码
}
Java注释
1单行注释 // 快捷键 :ctrl +/
2 多行注释 /* */ 快捷键:ctrl +shift+/
3 文档注释/** */
数据类型
(基本数据类型) | (基本数据类型) |
整型 1 .byte 2 . short 3. int 4 .long | 1. 类(class) |
浮点型 分: 单精度(float)单精度Ff结尾 2e3f 双精度(double)双精度Dd结尾 3.14d | 2 .接口(interface) |
字符型: 表示一个字符 单引号 'a' '1' | 3.数组 |
字符串常量 " hello" | 4.枚举(enum) |
布尔常量 ture false 区分事物真 | 5.注解 (annotation) |
null常量 表引为空 | |
变量数据类型
数据类型 | 关键字 | 取值范围 | 内存占用 |
整形 | byte | -128~127 | 1 |
short | -32768~32767 | 2 | |
int | -21474833648~2147483647 | 4 | |
long | -9223372036854775808~9223372036854775807 | 8 | |
浮点 | flaot | 1.401298e~3.402823e+308 | 4 |
double | 4.9000000e~3.402823e+38 | ||
字符 | char | 0~65535 | |
布尔 | boolean | trun,false | |
自动类型转换
两种数据类型不要显示声明,由编译器自动转换。
满足条件:1.两种数据类型彼此兼容 2目标取值类型取值范围大于源类型取值范围
强制类型转换
两种数据类型要显示声明,当目标取值类型取值范围小于源类型取值范围
格式:目标类型 变量 =(目标类型)值 ,double a=3.14; int b=(int) a;
变量作用域:{花括号里面范围就是作用域}
运算符 | 运算 | 列子 | 结果 |
+ | |||
- | |||
* | |||
/ | 除 商数 | 5/5 | 1 |
% | 取余 余数 | 7%5 | 2 |
++ a | 前先赋值 | a=2,b=++a | b=3 a=2 |
- - a | |||
a++ | 后先加1后赋值 | a=2,b=a++ | b=2 a=3 |
a- - | |||
运算符 | |
+= | a=2,b=3 (a+=b= a=a+b) |
! | 非 如果是真就是假,如果假就是真 | !t | f |
& | 与 两个真就两个真(左右两边都为真则结果为真,左边结果为假,右边仍然判断。不会中断。 ) 两个假就两个假 1个假 必为假 | t&t t&f f&f f&t | t f f f |
| | 或 两个真必为真 ( 左右两边有一边为真则结果为真。两边都需要判断。
) 两个假必为假 1个真 必为真 | t|t t|f f|f f|t | T T f t |
^ | 异或 两个真必为假 两个假必为假 1个真 必为真 | t^t t^f f^f f^t | F T F t |
&& | 短路与两个真才为真,(左右两边都为真则结果为真,左边结果为假,则直接中断) 否则为假 | t | |
|| | 短路或 两个真必为真 (左右两边一个为真则为真,左边为真,则结果直接为真。右边不判断。) 两个假必为假 1个真 必为真 |
if条件分支
If分支有三种格式:单分支、双分支、多分支
格式1: if (条件表达式) { 语句体; }
格式2: if (条件表达式) { 语句体1; } else { 语句体2; }
格式3: if (条件表达式1) { 语句体1; } else if (条件表达式2) { 语句体2; } else if (条件表达式3) { 语句体3; } . . . else { 语句体n+1; }
三元运算符
格式:判断条件?表达式1:表达式2;
为ture 执行表达式1,否则表达式2。
switch条件语句
switch(表达式){
case 值1:
执行代码...;
break;
case 值2:
执行代码...;
break; …
case 值n-1:
执行代码...;
break;
default:
执行代码n;
}
执行流程: 先执行表达式的值,拿着这个值去与case后的值进行匹配。 匹配哪个case的值为true就执行哪个case,遇到break就跳出switch分支。 如果case后的值都不匹配则执行default代码。
Switch分支注意事项
表达式类型只能是byte、short、int、char,JDK5开始支持enum枚举,JDK7开始支持String、不支持double、float、long。 case给出的值不允许重复,且只能是常量,不能是变量。 表达式的数据类型,应和case后的常量类型一致,或者是可以自动转成可以相互比较的类型,比如输入的是字符,而case后的常量int。 default子句是可选的,当没有匹配的case时,执行default。 break语句用来在执行完一个case分支后,使程序跳出switch语句块,不要忘记写break,否则会出现穿透现象。程序会执行到switch结尾,除非遇到break。
Switch的穿透性
switch(表达式){
case 值1:
执行代码1;
case 值2:
执行代码2;
…
case 值n-1:
执行代码n-1;
break;
default:
执行代码n;
// break;
}
如果代码执行到没有写break的case块,执行完后将直接进入下一个case块执行代码(而且不会进行任何匹配),直到遇到break才跳出分支,这就是switch的穿透性。
while循环
while(循环条件){
执行语句
...
}
while循环语句不选择结构语句类似,
都是根据判断条件决定是否执行大括
号内的执行语句。区别在于,while
语句会反复地进行条件判断,只要条
件成立,{}内的执行语句就会执行,
直到条件丌成立,while循环结束。
do while循环
do {
执行语句
...
} while(循环条件);
关键字do后面{}
中的执行语句是循环体。do…while循
环语句将循环条件放在了循环体的后
面。这也就意味着,循环体会无条件
执行一次,然后再根据循环条件决定
是否继续执行。
for循环
for(初始化表达式; 循环条件; 操作表达式)
{
执行语句
...
}
for(①; ②; ③){
④
}
第一步,执行①
第二步,执行②,如果判断结果为true,执行第三步,如果判断结果为
false,执行第五步
第三步,执行④
第四步,执行③,然后重复执行第二步
第五步,退出循环
循环嵌套
for(初始化表达式; 循环条件; 操作表达式) {
...
for(初始化表达式; 循环条件; 操作表达式) {
执行语句
...
}
...
}
循环嵌套是指在一个循环语句的循环体中再定义一个循环语句的语法结
构。while、do…while、for循环语句都可以进行嵌套,并且它们之间
也可以互相嵌套。
break语句
在switch条件语句和循环语句中都可以使
用break语句。当它出现在switch条件语
句中时,作用是终止某个case并跳出
switch结构。当它出现在循环语句中,作
用是跳出循环语句,执行循环后面的代码。
continue语句
continue语句用在循环语
句中,它的作用是终止本
次循环,执行下一次循环。
方法的定义
什么是方法?
方法就是一段可以重复调用的代码。
修饰符 返回值类型 方法名(参数类型参数名1,参数类型参数名
2,...){
执行语句
...
return 返回值;
}
- 返回值类型:用于限定方法返回值的数据类型。
- 参数类型:用于限定调用方法时传入参数的数据类型。
- 参数名:是一个变量,用于接收调用方法时传入的数据。
- return关键字:用于返回方法指定类型的值并结束方法。
- 返回值:被return语句返回的值,该值会返回给调用者。
方法中的“参数类型参数名1,参数类型参
数名2”被称作参数列表,参数列表用于描
述方法在被调用时需要接收的参数,如果方
法丌需要接收任何参数,则参数列表为空,
即()内丌写任何内容。方法的返回值类型必
须是方法声明的返回值类型,如果方法没有
返回值,返回值类型要声明为void,此时,
方法中return语句可以省略。
方法的调用格式
方法名(形参列表);
注意事项 如果方法不需要返回结果,返回值类型必须申明成void(无返回值), 此时方法内部不可以使用return返回数据。 方法如果没有参数,或者返回值类型申明为void可以称为无参数、无返回值的方法,依次类推。
方法的重载
就是在同一个作用域
内方法名相同但参数个数或者参数类
型不同的方法。
数组的定义
数组是指一组类型相同的数据的
集合,数组中的每个数据被称作
元素。数组可以存放任意类型的
元素,但同一个数组里存放的元
素类型必须一致。
声明数组的方式有两种。
第一种方式:
数据类型[] 数组名= null;
第二种方式:
数据类型[]数组名;
数组名= new数据类型[长度];
静态初始化数组
静态初始化:开始就存入元素值,适合一开始就能确定元素值的业务场景。
完整格式
数据类型[] 数组名 = new 数据类型[]{元素1,元素2 ,元素3… }; double[] scores = new double[]{89.9, 99.5, 59.5, 88.0};
int[] ages = new int[]{12, 24, 36}
/简化格式
数据类型[] 数组名 = { 元素1,元素2 ,元素3,… };
int[] ages = {12, 24, 36};
数组的动态初始化
动态初始化:只指定数组长度,后期赋值,适合开始知道数据的数量,但是不确定具体元素值的业务场景。
数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[3];
数组的访问
数组名称[索引]
数组的最大索引 : 数组名. length – 1
数组遍历
在操作数组时,经常需要依次访问数组中的每个元素,这种操作称作数组的遍历
数组排序
冒泡排序
冒泡排序的过程如下所示: (1)从第一个元素开始,将相邻的两个元素依次比较,直到最后两个元素完成比较,如果第一个元素比后一个大,则交换位置。整个过程完成后,数组中最后一个元素就是最大值。 (2)除最后一个元素,将剩余的元素继续进行两两比较,过程与第一步类似,这样数组中第二大的元素放在了倒数第二个位置。 (3)以此类推,持续对越来越少的元素重复上面的步骤,直到没有任何一个元素需要比较为止。
二维数组
二维数组的概念
二维数组可以简单地理解为在数组中嵌套数组。
二维数组的每个元素是一维数组
示例: int[][] arr = { {0, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0,2, 0, 3, 0, 0}, {0, 0, 0, 0, 0, 0} }
第一种定义方法
数据类型[][]数组名=new 数据类型[行个数 ][列个数];
int [][] xx = new int[3][4];
第二种定义方法
数据类型[][] 数组名 = new int[行的个数][];
int[][] xx= new int[3][];
第三种定义方法
数据类型[][] 数组名= {{第0行初始值},{第1行初始值},...,{第n行初始值};
int[][] xx={(1,2),(3,4,5,6),(7,8,9)};
二维数组的引用
二维数组中元素的访问也是通过下标的方式。 例如: 访问二维数组arr中第一个元素数组的第二个元素,具体代码如下: arr[0][1];