欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > > 文章正文

JavaSE 02 Java基础语法(一),javasejava

来源: javaer 分享于  点击 12207 次 点评:98

JavaSE 02 Java基础语法(一),javasejava


1、变量:一块内存中的数据存储空间

电脑使用内存来记忆计算时所使用的数据。(具有易失型)

2、变量的三要素(变量和酒店房间的对比)

变量 ############# 酒店的一个房间
数据类型 —————— 房间类型
变量名 ——————— 房间名
变量值 ——————— 入住的客人

3、语法:

// 1. 声明 数据类型 变量名;
int age; // 相当于计算机内存开了一块 int 类型的房间,房间名为 age
// 2. 赋值
age = 17; // 相当于将数据17存到名字为age的房间中去
// 3. 使用
// System.out.println(“age”); // age (原样输出)
System.out.println(age); // 17 (将变量 [age房间] 里面存的值打印)

4、变量的特点

⑴ 变量必须先声明,赋值后才能使用。
⑵ 变量的值可以任意修改,但数据类型要一致。
⑶ 变量的作用范围由包含变量声明的最近的大括号决定。
⑷ 在同一个作用范围内,不允许出现多个相同名字的变量。

5、“+”的作用

⑴ 算术运算符
当 + 左右两方都为数值型的时候,做加法运算。
⑵ 连接符
当 + 左右有一方为字符串类型的时候,作为拼接字符串。

6、数据类型的分类

⑴ 基本数据类型(原始数据类型)


①整数 byte short int long
②浮点数 float double
③字符 char
④布尔型 boolean

⑵ 引用数据类型(复杂数据类型)


①用class关键字定义的类
String
②用interface关键字定义的接口
③数组

7、整数

        所占的空间大小     保存的数值范围
byte      1个字节         -2^7 — 2^7-1
short     2个字节        -2^15 — 2^15-1
int       4个字节        -2^31 — 2^31-1
long      8个字节        -2^63 — 2^63-1

备注:
1个字节 = 8位
0000 0000 — 0111 1111 0 — 127
1000 0000 — 1111 1111 -1— -128
注意:
⑴ 编译器默认的整数类型为int
⑵ long类型的数值一般要在后边标志一个l或L
long l = 100l;

8、浮点型

                          所占的空间大小
  float     单精度浮点型      4个字节
  double    双精度浮点型      8个字节

注意:
⑴ 浮点型和整数型的存储原理不同,可能会丢失精度。
浮点型存储:符号位 + 阶位 + 尾数
⑵ 可以使用其他的方法解决精度丢失的问题:
从效果上:格式字符串的方法。
从底层上:使用更高精度的类BigDecimal。

9、字符型

char 所占空间大小为2个字节

⑴ 常见的字符集:
ASCII码:美国一个学会:指定了一套标准ASCII码,统一了编码。只有128个字符,而且属于单字节的编码系统,里面保存的字符太少。

字符  ASCII码
 A      65
 B      66
 a      97
 b      98
 0      48

ISO8859-1:没有中文。
GB2312:里面包含了很多中文汉字,但没有繁体字。
GBK:在GB2312基础上进行扩展,有了繁体字。
unicode:基本包含了所有的字符。确定:采用固定长度编码,每个字符都采用2个字节。
utf-8:可变长度的字符,一个字母占一个字节,一个汉字占3个字节。

⑵ char类型采用的是unicode字符集。
⑶ char类型的值可以支持以下几种形式:
char ch = ‘a’;
char ch = 97;
char ch = ‘\u0016’;
char ch = ‘\t’;

10、标识符

对各种变量、方法和类等要素命名时使用的字符序列成为标识符(凡是自己可以起名字的地方都叫标识符)。

命名规则:
⑴ 由26个英文字母大小写,0-9,下划线(_)或美元符号($)组成。
⑵ 不能以数字开头。
⑶ 不可以使用关键字(class,int,double)和保留字(goto)。
⑷ Java中严格区分大小写,长度无限制。

命名规范:
⑴ 最好见名知义。
⑵ 变量名或方法名最好遵循驼峰命名法
驼峰命名法:多个单词组成,第一个单词全部小写;其他单词的首字母大写,其他字母小写。
示例:javaScore
⑶ 类名最好遵循Pascal命名法
Pascal命名法:多个单词组成,所有单词的首字母大写,其他字母小写。
示例:MyCalcUtils

11、基本数据类型的转换

⒈ 自动类型转换


byte -> short -> int -> long -> float -> double
char -> int
规则:⑴ 从小到大。
示例:
⑴ 正确的:
byte b = 26;
short s = b;(结果为26)
⑵ 错误的:
double d = 34.6;
int i = d;(错误:可能损失精度)
⑵ 自动提升的原则。
表达式的最终类型为操作数的最大数据类型。
示例:
⑴ 正确的:
int i = 10;
double d = 23.4;
d = d * i;(结果为234.0)
⑵ 错误的:
int j = 20;
double f = 23.5f;
double d = f * j;(错误: 不兼容的类型: 从double转换到float可能会有损失)
⑶ byte、short、char的实际存储类型都为int。
示例:
⑴ 正确的:
char c1 = ‘A’;
System.out.println((int)c1); (结果为65)
char c2 = 97;
System.out.println(c2);(结果为a)
⑵ 错误的:
int i = 100;
char c = i;(错误:可能损失精度)

⒉ 强制类型转换


规则:
⑴ 从大到小。需要添加强转符号
语法:float f = (float)3.14;
⑵ 强转符号只针对最近的变量有效
示例:int i = (int)(31.4 * 10 + 1.25 * 8);

12、引用数据类型的转换

String类型和基本数据类型的转换

⑴ 将String类型转换为基本数据类型(不包含char)


语法:包装类.parseXXX(字符串变量);
示例:int age = Integer.parseInt(“17”);
double balance = Double.parseDouble(“23.65”);
boolean flag = Boolean.parseBoolean(“true”);

⑵ 将基本数据类型转换为String类型

语法:变量 + “”;(拼接一个空的字符串)
示例:double piDouble = 3.1415926;
String piStr = piDouble + “”;

13、数据类型转换的注意事项

⑴ 将String类型转换为基本数据类型时,需注意将String类型的值转后的数据类型和将要赋值的数据类型要一致。
⑵ 将String类型转换为基本数据类型时,没有char类型。

14、算数运算符

分类:

+ - * / % 【二元运算符】
++(自增) –(自减) 【一元运算符】


注意:
⑴ / :当 / 两端的数(操作数)都为整数时,得出的结果会自动将小数点后的数字舍掉。注意并非是四舍五入,而是全部舍掉(即2.9也是2)。
⑵ %:示例:
① 10 % 3 = 1;
② -10 % 3 = -1;
③ 10 % -3 = 1;
计算方法:
① 10 - (10 / 3 3) = 10 - (3 3) = 10 - 9 = 1;
② -10 - (-10 / 3 * 3) = -10 - (-3 * 3) = -10 - (-9) = -10 + 9 = -1;
③ 10 - (10 / -3 * -3) = 10 - (-3 * -3) = 10 - 9 = 1;
⑶ 一元运算符语法:
i++ i– ++i –i
① 情况一:当作独立的语句使用:
int i = 10;
i++;
–i;
特点:i++; 等价于 –i ;等价于i = i + 1;
② 情况二:作为表达式放到赋值语句中使用。

      int j = 11;
      int k = j++; (先将j的旧值[11]赋值给k,然后再让j = j + 1;)
      System.out.println(“j = ” + j + “, k = ” + k); // j = 12, k = 11;

      int a = 11;
      int b = --a; (先将a = a - 1;,然后再把新值[10]赋值给b)
      System.out.println(“a = ” + a + “, b = ” + b); // a = 10, b = 10;

      int c = 100;
      System.out.println(c++); //100 先打印c的旧值[100],然后c = c + 1;[101]
      System.out.println(c--); //101 先打印c的旧值[101],然后c = c - 1;[100]
      System.out.println(--c); //99 先c = c - 1;[100 - 1],然后再打印新值[99]
      System.out.println(++c); //100 先c = c + 1;[99 + 1],然后再打印新值[100]
      System.out.println(c);//100 此时c = 100;

15、赋值运算符

分类:

⑴ 基本赋值运算符: =


特点:⑴ 运算顺序:从右到左。
⑵ 赋值号右边可以是变量、常量和表达式,
而赋值号左边只能是变量名。
⑶ 赋值号左右两端的类型必须要兼容(不是一致,即:要符合数据类型的转换规则)。
⑷ 赋值相当于复制:
int a = 10;
int b = a; // b = 10; (此时a = 10)
⑸ 新赋值后,会覆盖原来的旧值:
Int i = 10;
i = 20; // (此时20会覆盖原来的10)

⑵ 复合赋值运算符: += -= *= /= %= >>= <<=


特点【和基本赋值运算符不同之处】:
⑴ i += 10; 相当于 i = i + 10;
⑵ 使用复合赋值运算符会比普通的赋值运算符效率要高一点点。
⑶ 使用复合赋值运算符时,系统底层会自动进行一些类型转换,而不需要我们自己添加强转符号:
int i = 10;
i += 34.6; // i = 44; (相当于:i = (int)(10 + 34.6);)
对比:
int i = 10;
i= i + 34.6; // (可能损失精度)

16、逻辑运算符

分类:

&&   ||   !
  &    |

        名称                      特点
&&     短路与    条件1 && 条件2。两个条件同时为true,结果为true。
||     短路或    条件1 || 条件2。 两个条件中有一个为true,结果为true。
!        非       !条件。 条件为false,结果为true。
&      逻辑与     条件1 & 条件2。两个条件同时为true,结果为true。
|      逻辑或      条件1 | 条件2。两个条件中有一个为true,结果为true。

备注:⑴ 逻辑运算符主要用于连接条件。
⑵ 逻辑表达式的最终结果为true或false。
⑶ 应用于条件或循环判断。

注意:⑴ 短路与(&&) 和逻辑与(&) 的区别:
判断的特点都一样,都是两个条件同时成立,则结果为true。
但 && : 如果条件1(前一个条件)不成立,则条件2(后一个条件)不会被判断(执行)。
& : 不管条件1是否成立,条件2都会被执行。
⑵ 短路或(||) 和逻辑或(|) 的区别:
判断的特点都一样,都是两个条件中只要有一个条件成立,则结果为true。
但 || : 如果条件1成立,则条件2不会被判断(执行)。
| : 不管条件1是否成立,条件2都会被执行。
⑶ 效率上,&& 高于 &,|| 高于 |。

17、三元运算符

语法: 条件表达式 ? 变量或表达式1 : 变量或表达式2
原理: 首先判断条件表达式是否成立,如果成立,结果为第一个表达式的值;如果不成立,结果为第二个表达式的值。
注意: ⑴ 表达式1和表达式2只能是表达式,不能是一条语句。
⑵ 表达式1和表达式2的数据类型和最终要赋值的变量的数据类型要兼容。
示例【求三个数值中的最大值】 :
int a = 34;
int b = 26;
int c = 98;
int max = (a > b) ? a : b;
max = (max > c) ? max : c;
System.out.println(“三个数中的最大值 = ” + max);

18、运算符的优先级

小括号 > 自增、自减、!(非) > 算数运算符 > 关系运算符 > 逻辑运算符 > 三元运算符 > 赋值运算符

注意:⑴ 一般来讲,可以用小括号改变优先级,提高代码的阅读性。
⑵ 只有单目运算符、三元运算符和赋值运算符是从右向左运算的。

19、如何控制小数点输出位数

System.out.printf(“%.小数位数f, float型或double型”); // 注意此语句不会换行。

20、进制

二进制 0-1 以0b或0B开头
八进制 0-7 以0开头
十六进制 0-9 A-F 以0X开头
十进制 0-9

21、进制的转换

⑴ 二进制、八进制、十六进制转十进制


① 二进制转十进制:从最低位(最右边)开始,乘以2的几次幂,幂从0开始,最后累加得到十进制数。
示例:0b1011010 = 0*2^0 + 1*2^1 + 0*2^2 + 1*2^3 + 1*2^4 + 0*2^5 + 1*2^6 = 0 + 2 + 0 + 8 + 16 + 0 + 64 = 90;
② 八进制转十进制:从最低位(最右边)开始,乘以8的几次幂,幂从0开始,最后累加得到十进制数。
示例:01721 = 1*8^0 + 2*8^1 + 7*8^2 + 1*8^3 = 1 + 16 + 448 + 512 = 977;
③ 十六进制转十进制:从最低位(最右边)开始,乘以16的几次幂,幂从0开始,最后累加得到十进制数。
示例:0x59A1B = 11*16^0 + 1*16^1 + 10*16^2 + 9*16^3 + 5*16^4 = 11 + 16 + 2560 + 36864 + 327680 = 367131;

⑵ 十进制转二进制、八进制、十六进制


① 十进制转二进制:不断地除以2,直到商为0。得到所有的余数,再倒过来即为二进制。
示例:1512 = 0b10111101000
1512 / 2 = 756 …… 0
756 / 2 = 378 …… 0
378 / 2 = 189 …… 0
189 / 2 = 94 …… 1
94 / 2 = 47 …… 0
47 / 2 = 23 …… 1
23 / 2 = 11 …… 1
11 / 2 = 5 …… 1
5 / 2 = 2 …… 1
2 / 2 = 1 …… 0
1 / 2 = 0 …… 1
② 十进制转八进制:不断地除以8,直到商为0。得到所有的余数,再倒过来即为八进制。
示例:9527 = 022467
9527 / 8 = 1190 …… 7
1190 / 8 = 148 ……6
148 / 8 = 18 …… 4
18 / 8 = 2 …… 2
2 / 8 = 0 …… 2
③ 十进制转十六进制:不断地除以16,直到商为0。得到所有的余数,再倒过来即为十六进制。
示例:24938 = 0x616A
24938 / 16 = 1558 …… 10(A)
1558 / 16 = 97 …… 6
97 / 16 = 6 …… 1
6 / 16 = 0 …… 6

⑶ 二进制转八进制、十六进制


① 二进制转八进制:从最低位开始,每3位(不够前头添0)转换成一个十进制数,所有的数拼在一起所得就是八进制数。
示例:0b1011010 = 0132
001 011 010
1 3 2
② 二进制转十六进制:从最低位开始,每4位(不够前头添0)转换成一个十进制数,所有的数拼在一起所得就是十六进制数。
示例:0b1101010110 = 0x356
0011 0101 0110
3 5 6

⑷ 八进制、十六进制转二进制


① 八进制转二进制:从最低位开始,每个位上的数拆成3位的二进制数,最后拼在一起就是二进制数。
示例:05120 = 0b101001010000
5 1 2 0
101 001 010 000
② 十六进制转二进制:从最低位开始,每个位上的数拆成4位的二进制数,最后拼在一起就是二进制数。
示例:0xA1F5D = 0b10100001111101011101
A(10) 1 F(15) 5 D(13)
1010 0001 1111 0101 1101

22、原码、反码、补码

⑴ 原码:进制转换用的是原码,注意最高位是符号位。
⑵ 反码:
① 正数:和原码一样。
② 负数:除了最高位(符号位),其他位上的数按位取反。
⑶ 补码:
① 正数:和原码一样。
② 负数:在反码的基础上加1。

Tip: ① 原码、反码、补码的产生是为了解决负数的问题。
② 进行进制转换用的是原码。
③ 计算机存储和运算用的是补码。

23、位运算符

注意:⑴所有位运算符都是针对二进制的补码形式。⑵最高位参与运算。

所以:⑴正数的三码都一样,而负数则要注意,应当先将原码转换为补码后,再进行计算。⑵正数的最高位是0,而负数的最高位是1。所以在进行负数的计算时,应当注意符号位。⑶补码的符号位参与运算。

⑴ << (左移)

解题方法:①先将数转换为二进制数,然后根据左移符号右边的数字,将位数向左移动几位,移动后的空位添0。注意符号位不变,正数是0,负数是1。②结果 = 左移符号左边的数 * 2^左移符号右边的数
示例:【正数】5 << 2 = 20
①(方法一) 5 = 0b101
00000101
0000010100(舍掉最前面的两个0,再在后面添两个0)
1*2^4 + 1*2^2 = 16 + 4 = 20;
②(方法二) 5 * 2^2 = 5 * 4 = 20

【负数】-9 << 3 = -72
-9 = 0b11110111
11110111(-9的原码)
10001000(-9的反码)
10001001(-9的补码)
左移三位:
11001000
-(1*2^6 + 1*2^3) = -(64 + 8) = -72

⑵ >> (右移)

解题方法:先将数转换为二进制数,然后根据右移符号右边的数字,将位数向右移动几位,移动后的空位添0。注意符号位不变,正数是0,负数是1。
示例:6 >> 3 = 0
6 = 0b110
00000110
00000000110(舍掉后三位,再在前头添加三个0)

⑶ >>> (无符号右移)

解题方法:先将数准换为二进制数,然后根据右移符号右边的数字,将位数向右移动几位,移动后的空位添0。符号位也是0。所以结果一定是正数。
示例:4 >>> 2 = 1
4 = 0b100
00000100
0000000100(舍掉后两位,再在前头添加两个0)

⑷ & (与运算)

解题方法:先将符号两端的数字都转换为二进制数,再比较各个位上的数字,如果都为1,则此位为1,否则为0。
示例:7 & 4 = 4
7 = 0b111 4 = 0b100
00000111(7)
00000100(4)
————
00000100(4)

⑸ | (或运算)

解题方法:先将符号两端的数字都转换为二进制数,再比较各个位上的数字,如果存在1,则此位为1,否则为0。
示例:6 | 1 = 7
6 = 0b110 1 = 0b1
00000110
00000001
————
00000111(7)

⑹ ^ (异或运算)

解题方法:先将两个数字转换为二进制数,再看各个位上的数字,如果相同就是0,不同就是1。
示例:5 ^ 2 = 7
5 = 0b101 2 = 0b10
00000101(5)
00000010(2)
————
00000111(7)

⑺ ~ (反码)

解题方法:先将数字转换为二进制数,再看各个位上的数字,如果是1则是0,反之如果是0则是1。
示例:~3 = -4
3 = 0b11
00000011
————
11111100(-4)

⑻ 负数的表示

解题方法:正数取反(符号位也要取反),再加1。
示例:9的负数(-9) = 0b11110111
9 = 0b1001
00001001(9的原码)
11110110(9的反码【符号位也要取反】)
11110111(9的反码 + 1)

相关文章

    暂无相关文章

用户点评