目录
Java的程序基本结构:
Java的基本语法格式:
Java中的注释:
Java中的标识符:
Java中的关键字:
数据类型:
变量与常量:
运算符:
变量的类型转换:
Java的程序基本结构:
Java程序的基本结构:大体可以分为包、类、main()主方法、标识符、关键字、语句和注释。
在Java语言中,标识符和关键字是区分大小写的,并且,每条语句必须以分号结尾。
Java的基本语法格式:
[修饰符] class 类名 {
程序代码
}
修饰符:用于限定类的访问权限(可以省略)
类名:定义的类名称,通常使用首字母大写的形式(声明类,必须使用class关键字)
程序代码:类中定义的功能代码
注意编写Java程序代码时,需要特别几个关键点:
1.Java中的程序可分为结构定义语句和功能执行语句。(结构定义语句用于声明一个类或方法,功能执行语句用于实现具体的功能。)
功能执行语句代码示例:
System.out.println("这是第一个Java程序!");
2.每条功能执行语句的结尾都必须用英文分号(;)结束
3.Java语言是严格区分大小写的。
4.在编写 Java 代码时,为了便于阅读,通常会使用一种良好的格式进行排版 。(如下代码) public class HelloWorld {
public static void main(String[] args)
System.out.println("这是第一个Java程序!");
}
}
注意:缩进时用”Tab”键实现缩进
5.Java程序中一个连续的字符串不能直接分开在两行中书写。
如果为了便于阅读,想将一个太长的字符串分开在两行中书写,可以先将这个字符串分成两个字符串,然后用加号(+)将这两个字符串拼接起来,在加号(+)处断行。
System.out.println("这是第一个" +
"Java程序!");
Java中的注释:
作用:在编写程序时,为了使代码易于阅读,通常会在实现功能的同时为代码添加一些注释。注释是对程序的某个功能或者某行代码的解释说明,它能够让开发者在后期阅读和使用代码时能更容易理解代码的作用。
说明:注释只在Java源文件中有效,在编译程序时编译器会忽略这些注释信息,不会将其编译到class字节码文件中。
1.单行注释
单行注释通常用于对程序中的某一行代码进行解释,用符号“//”表示,“//”后面为被注释的内容。
int c = 10; // 定义一个整型变量c
2.多行注释
多行注释顾名思义就是可以同时为多行内容进行统一注释,它以符号“”结尾。
int x;
x = 5;
3.文档注释
文档注释通常是对程序中某个类或类中的方法进行的系统性的解释说明,开发人员可以使用JDK提供的javadoc工具将文档注释提取出来生成一份API帮助文档。文档注释以符号“”结尾。
public class HelloWorld {
public static void main(String[] args){
System.out.println("这是第一个Java程序!");
}
}
Java中的标识符:
定义:在编程过程中,经常需要在程序中定义一些符号来标记一些名称,如包名、类名、方法名、参数名、变量名等,这些符号被称为标识符。
组成:标识符可以由任意顺序的大小写字母、数字、下划线(_)和美元符号($)组成,但标识符不能以数字开头,也不能是Java中的关键字。
合法标识符示例:
username
username123
user_name
_userName
$username
不合法标识符示例:
123username // 不能以数字开头
class // 不能是关键字
Hello World // 不能包含空格特殊字符
Java中的标识符——通用规范:
1.包名所有字母一律小写。例如:com.itheima.example01。
2.类名和接口名每个单词的首字母都要大写。例如:ArrayList、Iterator。
3.常量名所有字母都大写,单词之间用下划线连接。例如:DAY_OF_MONTH。
4.在程序中,应该尽量使用有意义的英文单词来定义标识符,使得程序便于阅读。例如:使用userName表示用户名,password表示密码。
Java语言使用国际字符集(Unicode字符集),可以识别65535个字符。
Java中的关键字:
关键字(Keyword)是编程语言里事先定义好并赋予了特殊含义的单词,也称作保留字。JDK 8中有50个关键字,这些关键字都是小写的。
| abstract | assert | boolean | break | byte |
| case | catch | char | class | const |
| continue | default | do | double | else |
| enum | extends | final | finally | float |
| for | goto | If | implements | import |
| instanceof | int | interface | long | native |
| new | package | private | protected | public |
| return | strictfp | short | static | super |
| switch | synchronized | this | throw | throws |
| transient | try | void | volatile | while |
goto 和const是保留字,用来限制程序员将其作为标识符来使用。
数据类型:
在Java中变量的数据类型分为两种:基本数据类型和引用数据类型。
基本数据类型有8种,其中,有6种是数值类型,另外两种分别是字符类型和布尔类型。
一、整数类型变量
整数类型变量用来存储整数数值,即没有小数部分的值,可以是正、负数,也可以是零。
根据所占用内存的大小不同,可以分为四种类型。
| 类型名 | 占用空间 | 取值范围 |
| byte | 8位(1个字节) | -27 ~ 27-1 |
| short | 16位(2个字节) | -215 ~ 215-1 |
| int | 32位(4个字节) | -231 ~ 231-1 |
| long | 64位(8个字节) | -263 ~ 263-1 |
byte型变量:
byte型变量:8位带符号的二进制数,取值范围是:-128~127。
正数的最高位是0 ,正数的值就是二进制表示的值;
负数的最高位是 1 ,负数的值是:取反后加一,然后加个负号得到得值。
我们用8位的二进制来说明一下此规则:
比如:0000 0001。最高位是0 为正数 ,那么表示的就是十进制的 1。
再比如:1000 0001,最高位是1 为负数,值是多少?取反得到 01111110, 将其加1,得到 0111 1111 ,那么值为 -127。
定义byte型变量:
byte x = 48; byte y = -108; byte m = 3, n =-10, l; // 定义byte变量m,n,l,并赋值给变量m,n
在使用时一定要注意,以免数据溢出。
short型变量,即:短整型
取值范围是:-32768~32767
int型变量,即:整型
取值范围是:-2147483648~2147483647
一般情况下,int型变量足够使用,所以在整形变量中应用最广泛。
int x = 48; int y = -108; int m = 300000, n =-199796780, l; // 定义int变量m,n,l,并赋值给变量m,n
long型变量,即:长整型
取值范围是:-9223372036854775808~9223372036854775807
在为一个long类型的变量赋值时,所赋值的后面要加上一个字母“L”(或小写“l”)。如果赋的值未超出int型的取值范围,则可以省略字母“L”(或小写“l”)
整形类型的4中表现形式:十进制、八进制、十六进制、二进制:
十进制表示法:每位数上的数字最大为9,逢十进一。
eg:120、0、-127、190
二进制表示法:每位数上的数字最大为1,逢二进一。以0b为前缀。
eg:0b11(十进制为3)、0b1011 (十进制为11)
八进制表示法:每位数上的数字最大为7,逢八进一。以0为前缀。
eg:0123(十进制为83)、0543 (十进制为355)
十六进制表示法:每位数上的数字最大为f(15),逢十六进一。以0X或者0x为前缀。
eg:0x37(十进制为55)、0xef (十进制为239 )
二、浮点数类型
浮点数类型用来存储小数数值。
| 类型名 | 占用空间 | 取值范围 |
| float | 32位(4个字节) | 1.4E-45 ~ 3.4E+38,-1.4E-45 ~ -3.4E+38 |
| double | 64位(8个字节) | 4.9E-324 ~ 1.7E+308,-4.9E-324 ~ -1.7E+308 |
注意:一个小数会被默认为double类型的值,因此在为一个float类型的变量赋值时,所赋值的后面一定要加上字母“F”(或者小写“f”),
float f = 123.4f; // 为一个float类型的变量赋值,后面必须加上字母f或F
double d1 = 199.3d; // 为一个double类型的变量赋值,后面可以加上字母d或D
double d2 = 100.1; // 为一个double类型的变量赋值,后面可以省略字母d或D
float型的有效位是8位,因此float型的小数位最多可以保留7位;
double型的小数位最多可以保留16位。
float型+double型事,会自动补一些数。
三、字符类型char
1.字符类型用于存储一个单一字符,在Java中用char表示。
2.Java中每个char类型的字符变量都会占用2个字节。
3.在给char类型的变量赋值时,需要用一对英文半角格式的单引号(' ')把字符括起来,如'a',也可以将char类型的变量赋值为0~65535范围内的整数,计算机会自动将这些整数转化为所对应的字符,如数值97对应的字符为'a'。
char c = 'a'; // 为一个char类型的变量赋值字符'a'
char ch = 97; // 为一个char类型的变量赋值整数97,相当于赋值字符'a'
为什么可以赋值为0~65535范围内的整数?因为java的标识符是根据Unicode字符集来定义的,Unicode字符集包含65535个字符,所以每一个字符都对应一个整数。就如同ASCII码表中,每一个字符都对应一个整数一样。
转义符——反斜杠()
以反斜杠()开拓,被称为转义符,它的作用是用来转义紧随其后的一个字符。
说明:转义后的字符通常用于表示一个不可见的字符或具有特殊含义的字符,例如“n”表示换行。
r :表示回车,将光标定位到当前行的开头,不会跳到下一行。
n :表示换行,换到下一行的开头。
t :表示制表符,将光标移到下一个制表符的位置,就像在文档中用Tab键一样。
b :表示退格符号,就像键盘上的Backspace。
四、布尔类型
布尔类型变量用来存储布尔值,在Java中用boolean ['buːliən] 表示,该类型的变量只有两个值,即true和false。(真和假)
boolean flag = false; // 声明一个boolean类型的变量,初始值为false
flag = true; // 改变flag变量的值为true
变量与常量:
Java中的变量
变量:值能改变的量
他们的声明(定义)都必须使用合法的标识符
变量的定义示例:
int x = 0,y;
y = x+3;
说明:上述代码中,第一行代码的作用是定义了两个int类型的变量x和y,也就相当于分配了两块内存单元,在定义变量的同时为变量x分配了一个初始值0,而变量y没有分配初始值。
内存分为三个区域:
系统区、程序区、数据区
变量x和y在内存中的状态变化图:
局部变量
定义:在类的方法体中定义的变量。
范围:局部变量只在当前代码块有效。
成员变量
定义:在类体中定义的变量。
范围:成员变量在整个类中都有效。
分类:成员变量又可以分为静态变量和实例变量。
实例变量:每个类独有的变量,在自己的类中有效,其他类不能调用其值
静态变量:值的调用可以跨类,区别:在成员变量的类型前面加关键字static
成员变量与局部变量
补充:Java中的类
类是组成Java程序的基本元素,他是一类对象的原型,将成员变量(字段)和方法封装到一个类中。类是由成员变量和方法(函数)组成。
注意:方法是类的功能和操作,是用函数来表示的
Java中的常量
定义:Java中的常量,其实就是特殊的变量,也是固定不变的量,有且只能进行一次赋值。
语法:Java中定义常量的语法也非常简单,只需要在定义变量的语法基础上加上一个final关键字修饰即可。
Java中的常量的语法格式:
final 常量类型 常量名 [= 初始值];
Java中的常量的使用示例:
final int a=0, b; // 定义一个int类型的常量a和b,并为常量a初始化赋值0
b= 1; // 后续为常量b赋值
运算符:
算术运算符:
Java中的算术运算符就是用来处理四则运算的符号。也是最简单和最常用的运算符号。
| 运算符 | 运算 | 范例 | 结果 |
| + | 正号 | +3 | 3 |
| - | 负号 | b=4;-b; | -4 |
| + | 加 | 5+5 | 10 |
| - | 减 | 6-4 | 2 |
| * | 乘 | 3*4 | 12 |
| / | 除(即算数中整除的结果) | 7/5 | 1 |
| % | 取模(即算术中的求余数) | 7%5 | 2 |
| ++ | 自增(前) | a=2;b=++a; | a=3;b=3; |
| ++ | 自增(后) | a=2;b=a++; | a=3;b=2; |
| -- | 自减(前) | a=2;b=--a; | a=1;b=1; |
| -- | 自减(后) | a=2;b=a--; | a=1;b=2; |
注意事项:
1.在进行自增(++)和自减(--)的运算时,如果运算符(++或--)放在操作数的前面则是先进行自增或自减运算,再进行其他运算。反之,如果运算符放在操作数的后面则是先进行其他运算再进行自增或自减运算。
例如:
A=2; B=++A;
先加减再赋值:A=A+1; B=A;
A=2; B=A++;
先赋值再加减:B=A; A=A+1;
2.在进行除法运算时,当除数和被除数都为整数时,得到的结果也是一个整数;如果除法运算有小数参与,得到的结果会是一个小数。
3.在进行取模(%)运算时,运算结果的正负取决于被模数(%左边的数)的符号,与模数(%右边的数)的符号无关。
赋值运算符:
赋值运算符的作用就是将常量、变量或表达式的值赋给某一个变量。
它将运算符右边的值赋给左边的变量。
| 运算符 | 运算 | 范例 | 结果 |
| = | 赋值 | a=3;b=2; | a=3;b=2; |
| += | 加等于 | a=3;b=2;a+=b; | a=5;b=2; |
| -= | 减等于 | a=3;b=2;a-=b; | a=1;b=2; |
| *= | 乘等于 | a=3;b=2;a*=b; | a=6;b=2; |
| /= | 除等于 | a=3;b=2;a/=b; | a=1;b=2; |
| %= | 模等于 | a=3;b=2;a%=b; | a=1;b=2; |
注意事项:
1.在Java中可以通过一条赋值语句对多个变量进行赋值。
2.在赋值运算符中,除了“=”,其他的都是特殊的赋值运算符,以“+=”为例,x += 3就相当于x = x + 3,首先会进行加法运算x+3,再将运算结果赋值给变量x。其余的-=、*=、/=、%=赋值运算符都可依此类推。
比较运算符:
用来对两个数值或变量进行比较。
其结果是布尔类型的true或false。
| 运算符 | 运算 | 范例 | 结果 |
| == | 相等于 | 4 == 3 | false |
| != | 不等于 | 4 != 3 | true |
| < | 小于 | 4 < 3 | false |
| > | 大于 | 4 > 3 | true |
| <= | 小于等于 | 4 <= 3 | false |
| >= | 大于等于 | 4 >= 3 | true |
逻辑运算符:
是用于对布尔类型的值或表达式进行操逻辑判断的符号。
其返回值类型是布尔类型。
| 运算符 | 运算 | 范例 | 结果 |
| & | 与 | a & b | a和b都为true,结果为true,否则为false |
| | | 或 | a | b | a和b中只要有一个为true,则结果为true,否则为false |
| ^ | 异或 | A ^ b | a与b不同,结果为true,否则为false |
| ! | 非 | ! A | 若a为false,结果为true,否则相反 |
| && | 短路与 | a && b | a和b都为true,结果为true,否则为false |
| || | 短路或 | a || b | a和b中只要有一个为true,则结果为true,否则为false |
注意事项:
1.逻辑运算符可以针对结果为布尔值的表达式进行逻辑运算。如:5 > 3 && 1 != 0的结果为true。
2.运算符“&”和“&&”都表示与操作,当且仅当运算符两边的操作数都为true时,其结果才为true,否则结果为false。
3.“&”和“&&”的区别:在使用“&”进行运算时,不论左边为true或者false,右边的表达式都会进行运算。如果使用“&&”进行运算,当左边为false时,右边的表达式不会进行运算,因此“&&”被称作短路与。
4.运算符“|”和“||”都表示或操作,当运算符任何一边的操作数或表达式为true时,其结果为true,当两边的值都为false时,其结果才为false。同与操作类似,“||”表示短路或,当运算符“||”的左边为true时,右边的表达式不会进行运算。
5.运算符“^”表示异或操作,当运算符两边的布尔值相同时(都为true或都为false),其结果为false。当两边布尔值不相同时,其结果为true。
位运算符:
是针对二进制数的每一位进行运算的符号。
它专门针对数字0和1进行操作。
| 运算符 | 运算 | 范例 | 结果 |
| & | 按位与 | a & b | a和b每一位进行“与”操作后的结果 |
| | | 按位或 | a | b | a和b每一位进行“或”操作后的结果 |
| ~ | 取反 | ~ a | a的每一位进行“非”操作后的结果 |
| ^ | 按位异或 | a ^ b | a和b每一位进行“异或”操作后的结果 |
| << | 左移 | a << b | 将a左移b位,右边空位用0填充 |
| >> | 右移 | a >> b | 将a右移b位,丢弃被移出位,左边最高位用0或1填充 |
| >>> | 无符号右移 | a >>>b | 将a右移b位,丢弃被移出位,左边最高位用0填充 |
说明:位运算符本质都是针对二进制数0和1进行运算的,在使用位运算符时,都会先将操作数转换成二进制数的形式进行位运算,然后将得到的结果再转换成想要的进制数。其中,1表示true,0表示false。
按位与:全1为1,有0为0
按位或:有1为1,全0为0
非运算:取反
按位异或:相同为0,不同为1
左移:将二进制数左移x位,右边空位用0填充
右移:将二进制数右移x位,丢弃被移出位,左边最高位用0或1填充
无符号右移:将二进制数右移x位,丢弃被移出位,左边最高位用0填充
位运算符——演示说明
针对byte类型的数,也就是一个字节大小的数进行演示:
条件运算符:
也称作三元运算符(或三目运算符),由符号“? :”组合构成。
对布尔类型的表达式判断,如果为true,就执行冒号“:”前面的表达式,否者执行后面的表达式。
条件运算符的语法格式:
(boolean_expr) ? true_statement : false_statement;
规则:先判断boolean_expr的值,如果为true,就执行表达式true_statement,否者执行表达式false_statement。
条件运算符的使用示例:
int store = 5;
System.out.println(store <=0 ? "没有库存啦!" : "库存量为:"+store);
// 输出结果为 “库存量为:5”
运算符的优先级:
指的是在表达式中各个运算符参与运算的先后顺序
例如:先乘除,后加减
| 优先级 | 运算符 |
| 1 | . [] () |
| 2 | ++ -- ~ ! |
| 3 | * / % |
| 4 | + - |
| 5 | << >> >>> |
| 6 | < > <= >= |
| 7 | == != |
| 8 | & |
| 9 | ^ |
| 10 | | |
| 11 | && |
| 12 | || |
| 13 | ?: |
| 14 | = *= /= %= += -= <<= >>= >>>= &= ^= |= |
变量的类型转换:
说明:在程序中,当把一种数据类型的值赋给另一种数据类型的变量时,需要进行数据类型转换。
分类:根据转换方式的不同,数据类型转换可分为两种:自动类型转换和强制类型转换。
1.自动类型转换
自动类型转换也叫隐式类型转换,指的是两种数据类型在转换的过程中不需要显式地进行声明。当把一个类型取值范围小的数值直接赋给另一个取值范围大的数据类型变量时,系统就会进行自动类型转换。
自动类型转换就好比将小瓶水倒入到大瓶的换装过程。我们将小瓶水倒入到大瓶中时,由于小瓶的容量比大瓶的容量小,所以倒入的水永远不可能溢出大瓶。
Java中支持的不同数据类型之间的自动转换,如下图所示。
byte b = 3;
int x = b; // 程序把byte类型的变量b转换成了int类型,无需特殊声明
double y = x; // 将int类型的变量x转换成double类型,无需特殊声明
2.强制类型转换
强制类型转换也叫显式类型转换,指的是两种数据类型之间的转换需要进行显式地声明。当两种类型彼此不兼容,或者目标类型取值范围小于源类型时,自动类型转换无法进行,这时就需要进行强制类型转换。
强制类型转换就好比将大瓶水倒入到小瓶中一样,如果大瓶中的水的容量小于小瓶的大小,那么水是可以完全倒入的;否则多出来的水就会溢出。所以系统默认不支持这种行为,只能由开发者自己决定是否进行强制类型转换。
强制类型转换语法格式:
目标类型 变量名 = (目标类型)值;
例如: int x = 150; byte =y; y = (byte) x;
注意:在对变量进行强制类型转换时,会发生取值范围较大的数据类型向取值范围较小的数据类型的转换情况,如将一个int类型的数转为byte类型,如果超出byte型的取值范围,就容易造成数据精度的丢失。
原因分析:出现丢失精度的原因是,变量b为int类型,在内存中占用4个字节,而byte类型的数据在内存中占用1个字节,当将变量b的类型强转为byte类型后,前面3个高位字节的数据已经丢失,这样数值就发生了改变。
3.表达式类型自动提升
所谓表达式是指由变量和运算符组成的一个算式。变量在表达式中进行运算时,也有可能发生自动类型转换,这就是表达式数据类型的自动提升,如byte、short和char类型的变量在运算期间类型会自动提升为int,然后再进行运算。float和double类型进行相加减时,float型会补齐小数位以保持与double型一致。



