Java语法手册 一
开篇
Java 程序注释
- Java 注释的内容,代码编译时候就不会考虑… 但会影响文件大小!
**使用编辑工具时候,可以根据颜色来观察, 是否注释生效!**
Java 程序的结构
1.编写程序框架:
pulic class 类名 {
}
2.mian() 方法程序入口
public static void main(String [] args){
}
3.打印语句:
System.out.println("打印内容");
总结:
pulic class 类名 {
public static void main(String [] args){
System.out.println("hello world");
}
}
变量与运算符
关键字和保留字
关键字
- 定义: 被Java语言赋予了特殊含义,用做专门用途的字符串(单词)
程序开发说实话单词并不多,但该背还是得背的! - 特点:
被Java语言赋予了特殊含义,用做专门用途的字符串(单词)
用于定义数据类型的关键字
class interface enum byte short int long float double char boolean void
用于定义流程控制的关键字
if else switch case default while do for break continue return
用于定义访问权限修饰符的关键字
private protected public default
用于定义类,函数,变量修饰符的关键字
abstract final static synchronized
用于定义类与类之间关系的关键字
extends implements
用于定义建立实例及引用实例,判断实例的关键字
new this super instanceof
用于异常处理的关键字
try catch finally throw throws
用于包的关键字
package import
其他修饰符关键字
native strictfp transient volatile assert
用于定义数据类型值的字面值
true false null
保留字(reserved word)
- 现有Java版本尚未使用,但以后版本可能会作为关键字使用。
自己命名标识符时要避免使用这些保留字
goto const
变量
变量:
- 源于数学,是计算机语言中存储计算结果 或 值的抽象概念
变量是存储数据的基本单元,不同变量相互独立
**变量的声明:**
1.变量类型: 不同变量类型存储不同的资源,eg int double String ...
2.变量名: 变量是一个存储数据的基本单元, 程序为了方便访问,给每个变量起名 称为 变量名,(so 变量名不可以相同)
3.变量值: 变量存储的实际资源信息
**赋值运算符 =**
1. 声明变量的类型
2. 并给它命名
3. 将相应的数据放进变量中去 " = " 等号 赋值;
赋值:
使用 等号"=" ,给这个变量赋值这个变量代表这个值...
扩:可以连续赋值
int i = 1,q = 2;
注意:
1.方法中使用了未赋值的变量运行过程中会报错(程序逐行执行,变量为声明内存中并没有存在,无法找到,编译都不通过!)
2.变量名不能重复
3.等号赋值
变量名命名规则 (可以中文^^,但别用!可以装逼~,后面你会知道中午乱码是有多头疼):
规则必须遵守,救像法律一样!(不然语法爆错) 而规则不一定要遵守但是优秀程序员的标配!
1.变量名只能字母,下划线" _ " $ 符号开头
2.可以包括数字但不能开头
3.除了下划线"_" $ 不可以包含其他字符
4.不能使用Java语言的关键字/保留字
eg: int String ...
建议: 尽量使用有意义的变量名, 不然 a,b,c ... 没有意义 长时间会不容易辨别 使用!!(见名知议!)
注意:
Java 采用unicode字符集,因此标识符可以使用汉字声明,但不建议使用!(在公司规矩得被骂死!)
Java命名规范
- 在起名字时,为了提高阅读性,要尽量有意义,“见名知意”。
- Java采用unicode字符集,因此标识符也可以使用汉字声明,但是不建议使用
项目名:
首字母大写,多个单词组成其他单词首字母大写;
包名:
多单词组成时所有字母都小写:xxxyyyzzz
类名、接口名:
多单词组成时,所有单词的首字母大写:XxxYyyZzz 大驼峰命名法)
类名、接口名:
多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz 小驼峰命名法)
常量名:
所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
Java八大基础的数据类型:
数据类型: 基本数据类型之间可以进行 程序算术运算~~
Boolean
(1字节)boolean类型: 布尔类型,只有两种结果,用于表示程序(真true 假false)
整数类型
(1字节)byte 取值: 范围 -128~127; //byte b = 126;
(2字节)short //short s = 123;
(4字节)int 整型: 表示整数 1.2.3... //int i = 1;
(8字节)Long 长整型和int 一样存储 长度比 int 更大! //long long = 12313241L; 为防止整数过大加L (可以不加自动类型转换,但数值过大不加L 会报错!)
浮点数类型
(4字节)float 单精度浮点数: 尾数可以精确到7位有小数 //float f = 12.3f; 必须要有小数点,值范围比 long都大!(必须要加f double类型比它大!!)
(8字节)double 双精度浮点数: 带小数的数字 1.22... //double d = 1.0; 要有小数数,且是 float的两倍;
字符型:
(2字节)char
字符型:单子符 '男','A' 一个值(必须: 有且必须有一个字符,不能不放!) //char c = '单'; 单子符(占用内存 2字节 = 1字符)
//单子符 A,B 是两个字符, char 表示单字符,char 的单字符都可以使用 (int) 强转成一个整型的 数值~(ASCll码👇);
char a = 'a'; System.out.print((int)a); // 输出 97; a字符的 ASCll码, so 也可以这样写 int i = 'a'; i= 97; 但不建议哦!
char a = 97; Sysyem.out.print(a); // 输出 a; 因为97没有被 '' 单引号包起来,是以一种ASCll码进行赋值; 表示a;
//转义字符除外, char c = '\n'; 表示一个换行符,赋值给 c;
//使用 Unicode 表示字符型 变量; char c6 = '\u...'; // \u后面+ 特定的 Unicode编码表示字符,没匹配编码则回返回一个问号?!;
注意:
char运算使用时会进行Ascll码转换!
char a = 'a';
Sysyem.out.print(a+1); 得:98
String 引用类型:
Java 引用数据类型 String
String 字符串型: 表示一串字符 如: 员工名 ... String s = "wsm 最帅";
String 与其它8种基本数据类型拼接返回都是String类型;
注意:
对象是程序中,的一种存储单位, 所以不同的类型对象,在程序内存中也占用,不同的空间;
程序运算符:
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。 算术运算符 赋值运算符 比较运算符(关系运算符) 逻辑运算符 位运算符 三元运算符
算术运算符
Java 中算术运算符:Java中用于计算的 预算符;
+ 加 求操作数的和
- 减 求操作数的差
* 乘 求操作数的乘积
/ 整除 除法操作 求操作数的 尚 5/2 和 5÷2 一样结果 是 2 商
% 除于 除于 两个数相除 于的数 5%2 结果 1;
++ 加加 指变量 在原有基础上 自行 +1
-- 减减 指变量 在原有基础上 自行 -1 //注意 ++ -- 在前在后 ++i 和 i++ 有时用法还不一样: !! 代码运行时,++在前先加1在执行程序,++在后先执行程序在+1(-- 同理)
扩:
+= -= *= /= %= :就是一种简介方法~ (推荐)
算术运算符的注意问题:
如果对负数取模,可以把模数负号忽略不记如:
5%-2=1 但被模数是 负数则不可忽略.此外,取模运算的结果不一定总是整数
对于除号“/”,它的整数除和小数除是有区别的
整数之间做除法时,只 保留整数部分而舍弃小数部分
例如:int x = 3510; x = x/1000*1000; x的结果是: 3000
“+”除字符串相加功能外,还能把非字符串转换成字符串
例如: System.out.println(“5+5=”+5+5); //打印结果是?5+5=55 ?
程序:
从上往下,左往右执行, "5+5=" 字符串 + 5 数值,默认转换成: "5+5=5" 字符串在与数值5相加!
赋值运算符
符号:=
当 = 两侧数据类型不一致时,可以使用自动类型转换或使用强制 类型转换原则进行处理。`支持连续赋值`
扩展赋值运算符:
+=, -=, *=, /=, %=
比较运算符(关系运算符)
比较运算符的结果都是boolean型,也就是要么是true,要么是false 比较运算符“==”不能误写成“=”
关系运算符:
//JAVA 用于比较大小,长短,多少...运算符 关系运算符 (结果boolean类型)
> :大于 用于比较大小 结果 false/true
< :小于 用于比较大小 结果 false/true
>= :大于等于 ....
<= :小于等于 ....
== :等于 .... //: == 与 = 一个赋值 一个用于判断 ==: 左边的值与右边的值比较 是否一致; =: 右边的值赋给左边;
!= :不等于 ..
instanceof 检查是否是类的对象 "Hello" instanceof String true
逻辑运算符
短路用法:
&& 与: 程序判断, (true && true) 两边都为true则返回true,一个不成立则返回false
|| 或: 程序判断, (true || true) 两边只要有一个true则返回true,都不成立则返回false
非短路用法:
& 与:同上
| 或:同上
但,&& & 和 || |有区别:
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算
“|”和“||”的区别同理
||表示:当左边为真,右边不参与运算
! 对结果值取反~
^ 比较两边结果一样则false,不一样则true
位运算符
了解知道即可,不常用,看底层时候也许会看见!
Java 位运算符:适用于数值类型运算
<< 左移 3<<2 : 3左移两位 结果就是 3*2*2=12; 左移几位就是 *几次2; 注意数值移动太多数值会出问题;(二级制~ 最后会出现负数) 左移在一定范围内 相当于*2
>> 右移 3>>1 : 3右移一位 结果就是 3/2=1; 右移几位就是 /几次2; 注意数值移动太多数值会出问题; 右移在一定范围内 相对于/2
//左右移,程序的底层都是 二级制,0101010... 左移就是数值的 二进制码向左移动两位缺的用0补齐 ,右移就是 二进制的数象右移两位。缺的就以最高位补全表示;
>>> 无符号右移 3>>>1: 3无符号右移一位等于 3/2=1;(后面讲解) 二进制码 最高位无论是 0 或1 都一0表示,成为一个正数;
& 与运算符 二进制码 0: true 1:false 将两个二级制码逐个位 码进行比较,返回成一个新的二级制码; 就是它的结果;
| 或运算符 二进制码 0: true 1:false 将两个二级制码逐个位 码进行比较,返回成一个新的二级制码; 就是它的结果;
^ 异预算符 二进制码 0: true 1:false 将两个二级制码逐个位 码进行比较,返回成一个新的二级制码; 就是它的结果;
~ 取反运算 取其 数值 二进制码的 反过来的 二级制码,表示的数; (图:取反位运算)
注意:(图:与或异位运算符)
& | ^ 是逻辑运算符还是位预算符,取决于,它操作数据的类型,返回 boolean就是逻辑,数值类型就是位运算符;
😎
小知识
计算机存储单元:
字符编码 ASCLL码
在计算机内部,所有数据都使用二进制表示。
- 每一个二进制位(bit位)有 0 和 1 两种状态,因此
1字节等于8bit 8 个二进制位就可以组合出 256 种状态; 2∧8 - 一个字节一共可以用来表示 256 种不同的状态,每一个状态对应一个符号,就是 256 个符号
从0000000 到 11111111
为了方便程序员与计算机更有效的沟通:
- 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,
做了统一规定。这被称为ASCII码 - ASCII码一共规定了128个字符的编码,比如:
空格“SPACE”是32(二进制00100000) 大写的字母A是65(二进制01000001) - 这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位
最前面的1位统一规定为0
缺点:
- ASCLL码 大大提高了,程序与计算机的交互,但,不同国家有不同的语言…
- 相同的编码表示的字符不一样:比如 130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel
- 因此出现了乱码的概念~
Unicode 编码
乱码:
- 乱码:世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。
- 因 此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读, 就会出现乱码。
Unicode:一种编码,将世界上所有的符号都纳入其中。
- 每一个符号都给予一个独一 无二的编码,使用 Unicode 没有乱码的问题。
Unicode 的缺点:
- Unicode 只规定了符号的二进制代码,却没有规定这个二进制代码 应该如何存储;
三个字节表示一个字符... - 计算机无法区别 Unicode 和 ASCII:计算机无法区分三个字节表示一个符号 还是分别表示三个符号。
- 另外,我们知道,英文字母只用一个字节表示就够了,
如果 unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有 二到三个字节是0,这对于存储空间来说是极大的浪费。
UTF-8
UTF-8 是在互联网上使用最广的一种 Unicode 的实现方式。 UTF-8 是一种变长的编码方式。它可以使用 1-6 个字节表示一个符号,根据不同的符号而变化字节长度 UTF-8的编码规则:
- 对于单字节的UTF-8编码,该字节的最高位
第一位 为0,其余7位用来对字符进行编码(等同于 ASCII码) - 对于多字节的UTF-8编码,如果编码包含 n 个字节
那么第一个字节的前 n 位为1 第一个字节的第 n+1 位为0 该字节的剩余各位用来对字符进行编码。 在第一个字节之后的 所有的字节,都是最高两位为"10",其余6位用来对字符进行编码。 - 假设一个三字节编码:
1字节是8位:00000000 00000000 00000000 第一个字节的前 n 位为1:00100000 00000000 00000000 第一个字节的第 n+1 位为0:00100000 00000000 00000000 在第一个字节之后的 所有的字节,都是最高两位为"10":00100000 10000000 10000000 其余6位用来对字符进行编码 - 这样当面对一连串的字节,计算机可以区分这个字符是
几个字节组成! 动态的增减字节 节省空间 当遇到 第一位是0,就当一个字节处理,但下一个字节第一位是 1 这根据这个字节第一个 10,判断出该字节的个数!!👍 节省空间!
总结:
属于字符集的一种,最初为了方便与计算机通信,定义的一个规范字符语言! 是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言… ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符 信息在计算机上是用二进制表示的,这种表示法让人理解就很困难。 为保证人类和设备,设备和计算机之间能进行正确的信息交换,人们编制的统一的信息交换代码,这就是ASCII码表 它最初是美国国家标准,供不同计算机在相互通信时用作共同遵守的西文字符编码标准,后被ISO及CCITT等国际组织采用。 每个数值: 表示一个字母 或 特殊符号! 发展:
- ASCLL是针对与美国英语的一种计算机字符集,不同国家为了方便与计算机通信出现了很多种字符集!..
但,虽然与计算机之间完成通信了,但是不同国家之间不同字符集有产生了不同的影响!为了统一出现了 Unicode —后来又衍生出了— UTF-8! (中文字节的字符集 GBK)
|