——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
Java语言基础由关键字、标识符、注释、常量和变量、运算符、语句、函数和数组等组成。
关键字:
关键字的定义和特点:
定义:被Java语言赋予了特殊含义的单词。
特点:关键字中所有字母都为小写。
命名规范:
在程序中自定义的一些名称,例如类名等都是由
26个英文字母大小写,数字:0-9,符号:_、$组成。
1. 数字不可以开头,例如:2Demo就不可以。
2. 不可以使用关键字,例如:public就不可以,因为public是关键字。
3. 不可以包含“_、$”以外的特殊符号,例如:“Demo Test”就不可以,其中的空格就是特殊符号。
P.S.
1. Java中严格区分大小写。
2. 在起名字时,为了提高阅读性,要尽量有意义。
3. 公司中经常会通过“_”代表某一类名称,例如:_temp。
通过“$”分隔主名称与子名称,例如:TrafficLamp$Red。
- 包名(多单词均小写):xxxyyyzzz
- 类名、接口名(单词首字母大写):XxxYyyZzz
- 变量名、函数名(第二个单词开始首字母大写):xxxYyyZzz
- 常量名(所有字母大写,单词间用下划线连接):XXX_YYY_ZZZ
常量:
常量表示不能改变的数值。
Java中常量的分类
- 整数常量:所有整数。
- 小数常量:所有小数。
- 布尔(boolean)型常量:只有两个数值,true、false。
- 字符常量:将一个数字字母或者符号用单引号( ’ ’ )标识,如:’a’。
- 字符串常量:将一个或者多个字符用双引号(“”)标识,如:”hello world”、”a”、”“(空字符串)。
- null常量:只有一个数值就是:null。
进制:
- 二进制:11010
- 八进制:032(0开头)
- 十进制:26
- 十六进制:0x1A(0x开头)
负数二进制:将二进制的26取反(0变1,1变0)加1
0000-0000 0000-0000 0000-0000 0001-1010 1111-1111 1111-1111 1111-1111 1110-0101+1 -26 = 1111-1111 1111-1111 1111-1111 1110-0110
负数最高位都为1,正数最高位都为0
负数转成正数也是取反加1.
变量:
内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型),该区域的数据可以在同一类型范围内不断变化。
定义变量格式:
数据类型 变量名 = 初始值 int a = 5
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间:
- byte 1个字节,即8个二进制位
- short 2个字节
- int 4个字节
- long 8个字节
- float 4个字节
- double 8个字节
- char 2个字节
整数默认类型是int,小数默认类型是double
在定义long跟float类型的变量时,要在后面加上l、f来标识,区别于默认类型。
类型转换:
自动类型转换:
int x = 3;
byte b = 5;
x = x + b;
byte类型为1个字节的,int类型是4个字节的,这时候系统会自动把byte类型提升,再相加。
强制类型转换:
byte b = 3;
b = b + 200;
这时会出错,因为b跟200相加会自动提升为int类型,超出了byte类型的范围,把4个字节的int类型整数赋给1个字节的byte类型b时会损失精度。我们只能手动进行转换。
b = (byte)(b + 200);
PS:如果相加的两个数为常量,且结果在byte类型范围内,则会自动转换)
表达式的数据类型自动提升:
- 所有的byte型、short型和char的值将被提升到int型。
- 如果一个操作数是long型,计算结果就是long型;
- 如果一个操作数是float型,计算结果就是float型;
- 如果一个操作数是double型,计算结果就是double型。
运算符:
+ 加
- 减
* 乘
/ 除
% 取摸(取余数,若有负数则结果为左边的值):7%5=2
++ 自增(前):先自增,再运算 自增(后):先运算,再自增
-- 自减(前):先自减,再运算 自减(后):先运算,再自减
+ 字符串相加:”He”+”llo” = “Hello” “He”+55+5 = He555
字符串和任何数据使用+都是起连接作用
赋值运算符:
+=(这是一个符号)把左右两边的和赋给左边
-= 把左右两边的差赋给左边
*= 把左右两边的乘积赋给左边
/= 把左右两边的商赋给左边
%= 把左右两边的余数赋给左边
short s = 5;
s = s + 5;与s += 5;有什么区别?
前面不能运行,因为数据类型不同。后面可以运行,因为+=会做自动的类型转换动作
比较运算符:
== 等于
!= 不等于
< 小于
> 大于
<= 小于等于
>= 大于等于
Instanceof 是否为类的对象
“Hello” instanceof String 结果为true
比较运算符结果只能为true或flase
逻辑运算符:
& 与(and) (都是真吗)两边都进行运算
| 或(or) (有真吗)
^ 异或(xor) (两边不一样吗)
! 非(not) (不是真吗)
&& 短路(and) (都是真吗)若左边为flase,则右边不再进行运算
|| 短路(or) (有真吗)若左边为true,则右边不再进行运算
位运算符:
<< 二进制左移,高位丢弃,空缺位补0
>> 二进制右移,最高位为0时空缺位也补0,为1时补1
>>> 无符号右移:右移后空缺位统一用0补
& 与(用该数的二进制进行运算,真为1,假为0)110 & 010 = 010
| 或 110 | 010 = 110
^ 异或 110 ^ 010 = 100
~ 反码 对该数二进制取反(0换成1,1换成0):~26 = -27
转义字符:
通过\来转变后面字母或字符的含义
\n 换行
\b 退格,backspace
\r 回车(windows里面回车由\r\n两个字符组成)
\t 制表符
也可以通过\转换特殊字符使其成为普通字符
三元运算符:
(条件表达式) ? 表达式1 : 表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2。
判断结构:
if:
1. if(判断语句)
{
执行语句;
}
2. if(判断语句)
{
执行语句;
}
else
{
执行语句;
}
3. if(判断语句)
{
执行语句;
}
else if(判断语句)
{
执行语句;
}
...
else
{
执行语句;
}
如果if语句没写大括号,if就只能控制离它最近的单条语句。
局部代码块:
局部代码块可以定义局部变量的生命周期。
class IfDemo
{
public static void main(String[] args){
{
int m = 89;
System.out.println("Hello World..." + m);
}
//这里打印出错,因为m为局部变量,只在大括号内使用
System.out.println("over..." + m);
}
}
选择结构:
switch:(较少用,值少时可用)
Switch(表达式(要有值可取byte,short,int,char))
{
case 取值1:
执行语句;
break;
case 取值2:
执行语句;
break;
case 取值3:
case 取值4:
执行语句;(值为3、4均执行该语句)
Break;
...
default:(不管default在哪里,总是最后才判断它)
执行语句;
break;
}
循环结构:
(条件满足就执行,执行完继续判断条件,条件满足继续执行语句,直到条件不满足为止)
while(条件表达式) { 执行语句 }
(先执行再判断。即无论条件是否满足,都会执行一次语句)
do { 执行语句 }while(条件表达式);
for(初始化表达式;循环条件表达式;循环后的操作表达式) { 执行语句; }
初始化表达式只会执行一次。判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复找个过程,直到条件不满足为止。
初始化表达式跟循环后的操作表达式都可以写多条,用逗号分隔开
while与for可以互换,区别在于for为了循环而定义的变量在for循环结束就在内存中释放,而while循环使用的变量在循环结束后还可以继续使用。
for可以起名字:
a:for(){
b:for(){
System.out.println('Hello World');
break a;
}
}
break:跳出(结束循环,可以应用于选择结构跟循环结构)
continue:继续(结束本次循环,开始下次循环,只能作用于循环结构)
- 这两个语句离开应用范围,存在是没有意义的。
- 这个两个语句单独存在,下面都不可以有语句,因为执行不到。