Java基本语法
关键字与保留字
关键字
定义:被Java 语言赋予了特殊含义,用做专门用途的字符串(单词)
特点:关键字中所有字母都为小写
保留字
Java保留字:现有Java版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字
goto 、const
标识符
标识符
Java 对各种 变量、 方法和类等要素命名时使用的字符序列称为标识符
技巧:凡是自己可以起名字的地方都叫标识符
定义合法标识符规则:
- 由26 个英文字母大小写,0-9 ,_或 $ 组成
- 数字不可以开头。
- 不可以使用关键字和保留字,但能包含关键字和保留字。
- Java 中严格区分大小写,长度无限制。
- 标识符不能包含空格
Java中的名称命名规范
- 包名:多单词组成时所有字母都小写:xxxyyyzzz
- 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
- 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
- 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
变量
变量
- 内存中的一个存储区域
- 该区域的数据可以在同一类型范围内不断变化
- 变量是程序中最基本的存储单元。包含变量类型、变量名和存储的值
作用:用于在内存中保存数据
注意
- Java中每个变量必须先声明,后使用
- 使用变量名来访问这块区域的数据
- 变量的作用域:其定义所在的一对{ }内
- 变量只有在其作用域内才有效
- 同一个作用域内,不能定义重名的变量
声明 赋值
声明变量
语法:<数据类型> <变量名称>
例如:int var;
变量的赋值
语法:<变量名称> = <值>
例如:var = 10;
声明和赋值变量
语法: <数据类型> <变量名> = <初始化值>
例如:int var = 10;
变量的分类
按数据类型
按声明的位置的不同
在方法体外,类体内声明的变量称为成员变量 。
在方法体内部声明的变量称为局部变量 。
● 注意:二者在初始化值方面的异同:
同:都有生命周期 异:局部变量除形参外,需显式初始化
整数类型
java的整型常量默认为 int 型,声明long型常量须后加‘l’或‘L’
浮点类型
浮点型常量有两种表示形式:
①十进制数形式:如:5.12 512.0f .512 (必须有小数点)
②科学计数法形式:如:5.12e2 512E2 100E-2
float:单精度,尾数可以精确到7位有效数字。很多情况下,精度很难满足需求。
double:双精度,精度是float的两倍。通常采用此类型。
Java的浮点型常量默认为double型,声明float 型常量,须后加‘f’ 或‘F’ 。
float表示数值的范围比long还大
字符类型
- char 型数据用来表示通常意义上“字符”(2字节)
- Java中的所有字符都使用Unicode编码,故一个字符可以存储一个字母,一个汉字,或其他书面语的一个字符。
- char类型是可以进行运算的。因为它都对应有Unicode码。
字符型变量的三种表现形式
- 字符常量是用单引号(‘ ’)括起来的单个字符。例如:char c1 = ‘a’; char c2= ‘中’; char c3 = ‘9’;
- Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。例如:char c3 = ‘\n’; // '\n’表示换行符
- 直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,XXXX代表一个十六进制整数。如:\u000a 表示 \n。
char c = 97;//开发中非常少见,输出的话是'a'
布尔类型
Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达所操作的boolean值,在编译之后都使用java虚拟机中的int数据类型来代替:true用1表示,false用0表示。
基本数据类型转换
自动类型转换
容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:
- byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
- boolean类型不能与其它数据类型运算。
- 当把任何基本数据类型的值和字符串(String)进行连接运算时(+),基本数据类型的值将自动转化为字符串(String)类型。
强制类型转换
强制转换符:()
通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。
boolean类型不可以转换为其它的数据类型。
字符串类型
使用方式与基本数据类型一致。例如:String str = “abcd”;
一个字符串可以串接另一个字符串,也可以直接串接其他类型的数据。
进制
二进制(binary) :0,1 ,满2进1.以0b或0B开头。
八进制(octal) :0-7 ,满8进1. 以数字0开头表示。
十六进制(hex) :0-9及A-F,满16进1. 以0x或0X开头表示
运算符
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
- 算术运算符
- 赋值运算符
- 比较运算符(关系运算符)
- 逻辑运算符
- 位运算符
- 三元运算符
算术运算符
%取余运算,结果的符号与被模数的符号相同
自增1不会改变本身变量的数据类型
赋值运算符
符号:= 支持连续赋值。
+=不会改变变量本身的数据类型
比较运算符
比较运算符的结果都是boolean型,也就是要么是true,要么是false。
instanceof 检查是否是类的对象 “Hello” instanceof String //true
int i = 10;
int j = 20;
System.out.println(i = j);//20
逻辑运算符
&—逻辑与 | —逻辑或 !—逻辑非 && —短路与 || —短路或 ^ —逻辑异或
逻辑运算符用于连接布尔型表达式
“&”和“&&”的区别:
①:单&时,左边无论真假,右边都进行运算;
②:双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
开发中,推荐使用&&
位运算符
位运算是直接对整数的二进制进行的运算
三元运算符
( 条件表达式)? 表达式1 :表达式2
表达式1和表达式2要求是一致的
运算符的优先级
只有单目运算符、三元运算符、赋值运算符是从右向左运算的。
程序流程控制
- 顺序结构
- 分支结构
- 循环结构
Scanner
1>导包
import java.util.Scanner;
2>Scanner的实例化
Scanner scan = new Scanner(System.in);
3>调用Scanner类的相关方法,来获取指定类型的变量
int num = scan.nextInt();
对于char型的获取,Scanner没有提供相应的方法
switch-case
switch(表达式){
case 常量1:
语句1;
// break;
case 常量2:
语句2;
// break;
… …
case 常量N:
语句N;
// break;
default:
语句;
// break;
}
1>break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到switch结尾
2>switch(表达式)中表达式的值 必须是下述几种类型之一:byte ,short,char ,int, 枚举 (jdk 5.0) ,String (jdk 7.0);
3> default子句是可任选的。同时,位置也是灵活的。当没有匹配的case时,执行default
4>如果switch-case结构中的多个case执行语句相同,则可以考虑进行合并
5>在switch-case的括号里定义的变量,出了括号不能调用,在括号内只能定义一次(不同的case不能定义同名变量)。
循环结构
- for 循环
- while 循环
- do-while 循环
循环语句的四个组成部分
①初始化部分(init_statement)
②循环条件部分(test_exp)
③循环体部分(body_statement)
④迭代部分(alter_statement)
for循环
for (①初始化部分; ②循环条件部分; ④迭代部分){
③循环体部分;
}
①初始化部分可以声明多个变量,但必须是同一个类型,用逗号分隔
④可以有多个变量更新,用逗号分隔
class ForTest{
public static void main(String[] args){
int sum;
for(int i=1;i<=100;i++){
if(1%2!=0){
System.out.println(i);
sum=i;
}else{
sum=1;
}
}
System.out.println(sum);
}
}
错误:可能尚未初始化变量sum
while循环
①初始化部分
while(②循环条件部分){
③循环体部分;
④迭代部分;
}
for和while区别:初始化条件部分的作用范围不同
do-while
①初始化部分;
do{
③循环体部分
④迭代部分
}while(②循环条件部分);
do-while 循环至少执行一次循环体
最简单“无限”循环
最简单“ 无限” ” 循环: 格式:
while(true)
for(;;)
无限循环存在的原因是并不知道循环多少次, 需要根据循环体内部某些条件,来控制循环的结束
currentTimeMillis()
long start=System.currentTimeMillis();
break continue
break语句用于终止某个语句块的执行,结束当前循环
{ ……
break;
……
}
continue语句用于跳过其所在循环语句块的一次执行,继续下一次循环,结束当次循环
两个关键字后面都不能声明执行语句,会报错
1>break只能用于switch 语句和循环语句中。
2>continue 只能用于循环语句中。
label
class LabelTest{
public static void main(String[] args){
label:for(int i=1;i<=4;i++){
for(int j=1;j<=10;j++){
if(j%4==0){
continue label;
}
System.out.print(j);
}
System.out.println();
}
}
}
return
return:并非专门用于结束循环的,它的功能是结束一个方法。当一个方法执行到一个return语句时,这个方法将被结束。
与break和continue不同的是,return直接结束整个方法,不管这个return处于多少层循环之内