0


大数据之Java基础(二):Java基础语法 [上]

1、关键字

** 关键字 **:被Java语言赋予特定含义的单词

** 特点** :组成关键字的字母全部小写

** 注意事项** :goto和const作为保留字存在,目前并不使用 ,类似IDEA这样的集成工具,针对关键字有特殊的颜色标记,非常直观。加上下列50个共有52个关键字:

2、常见命名规则

2.1、标识符

** 标识符:给类,接口,方法,变量等起名字时使用的字符序列
** 组成
:1、英文大小写字母
2、数字
3、$和_

** 注意事项**:
1、不能以数字开头
2、不能有除$和_以外的特殊字符出现
3、不能是java关键字

2.2、其他

2.2.1、包(理解为一个文件夹/目录)

  1. 单级文件夹(所有字母全部小写)
  2. 举例:bigdata
  3. 多级文件夹(所有字母全部小写,文件夹之间用** . **分开)
  4. 举例:com.bigdata.rz

** 2.2.2、类或者接口**

  1. 一个单词组成(首字母大写其余字母小写)
  2. 举例:Hello
  3. 多个单词组成(所有单词的首字母大写,其余字母小写)
  4. 举例:HelloWorld

2.2.3、方法和变量

  1. 一个单词组成(所有字母小写)
  2. 举例:eat
  3. 多个单词组成(第一个单词全部小写,从第二个单词开始,首字母大写,其余字母小写)
  4. 举例:playGame

** 2.2.4、常量**

  1. 一个单词组成(所有字母全部大写)
  2. 举例:NAME
  3. 多个单词组成(所有字母全部大写,单词与单词之间用下划线连接)
  4. 举例:FIRST_NAME

3、注释

** 注释** :用于解释说明程序的文字 Java中注释分类格式

  1. 单行注释格式: // 注释文字
  2. 多行注释格式: /* 注释文字 */
  3. 文档注释格式:/** 注释文字 */
  4. 注释是一个程序员必须要具有的良好编程习惯。 初学者编写程序可以养成习惯:先写注释再写代码。 将自己的思想通过注释先整理出来,在用代码去体现。 因为代码仅仅是思想的一种体现形式而已。
  1. // 声明一个类,类名为HelloWoeld
  2. class HelloWorld {
  3. // 定义main函数,使程序能被jvm调用
  4. public static void main(String[] args){
  5. // 调用输出函数,输出:HelloWorld!
  6. System.out.println("HelloWorld!");
  7. }
  8. }

4、常量

** 常量:在程序执行的过程中其值不可以发生改变 。Java中常量分为字面值常量自定义常量**

4.1、常量的分类

(1)字面值常量

字符串常量 用双引号括起来的内容 "abc"

整数常量 所有整数 12,23

小数常量 所有小数 12.34,56.78

字符常量 用单引号括起来的内容 ‘a’,’A’,’0’

布尔常量 较为特有,只有true和false

空常量 null(数组部分讲解)

(2)自定义常量(面向对象部分讲解)

4.2、进制

4.2.1、不同进制的数据组成

二进制:由0,1组成,以0b开头

八进制:由0,1,...,7组成,以0开头

十进制:由0,...,9组成,整数默认是十进制的

十六进制:有0,1,...,9,a,b,c,d,e,f组成,以0x开头

**4.2.2、进制转换 **

其他进制转十进制:系数*基数^权的和

十进制转其他进制:除基取余,直到商为0,余数反转

二进制与十进制的快速转换:8421码

任意进制之间的转换:1、以十进制为桥梁
2、拆分组合法
a: 八进制3位为一组
b: 十六进制4位为一组

  1. /*
  2. Java针对整数常量提供了4种表现形式:
  3. 二进制
  4. 由0,1组成。以0b开头
  5. 八进制
  6. 由0,1,2,3,4,5,6,7组成。以0开头
  7. 十进制
  8. 由0,1,2,3,4,5,6,7,8,9组成。整数默认就是十进制的
  9. 十六进制
  10. 由0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f组成。以0x开头
  11. 1、求32的二进制,八进制,十六进制。
  12. 32的二进制:
  13. 32/2 = 16 ..... 0
  14. 16/2 = 8 ..... 0
  15. 8/2 = 4 ..... 0
  16. 4/2 = 2 ..... 0
  17. 2/2 = 1 ..... 0
  18. 1/2 = 0 ..... 1
  19. 32的二进制为:0b100000
  20. 32的八进制:
  21. 32/8 = 4 ..... 0
  22. 4/8 = 0 ..... 4
  23. 32的八进制为:040
  24. 32的十六进制:
  25. 32/16 = 2 ..... 0
  26. 2/16 = 0 ..... 2
  27. 32的十六进制为:0x20
  28. 2、0b10010的十进制
  29. 二进制: 十进制:18
  30. 0b10010 = 1*2^4 + 0*2^3 + 0*2^2 + 1*2^1 + 0*2^0
  31. = 16 + 0 + 0 + 2 + 0
  32. = 18
  33. 3、求下面各进制对应的十进制
  34. 0b10101 = 1*2^4 + 0*2^3 + 1*2^2 + 0*2^1 + 1*2^0
  35. = 16 + 0 + 4 + 0 + 1
  36. = 21
  37. 0123 = 1*8^2 + 2*8^1 + 3*8^0
  38. = 64 + 16 + 3
  39. = 83
  40. 0x3c = 3*16^1 + 12*16^0
  41. = 48 + 12
  42. = 60
  43. 4、0b100110的八进制 046
  44. 100 110
  45. 4 6
  46. 5、0b100110的十六进制 0x26
  47. 10 0110
  48. 2 6
  49. */

4.3、有符号数据表示法

  1. 在计算机内,有符号数有3种表示法:原码、反码和补码。所有数据的运算都是采用补码进行的。

** 原码**:就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

** 反码**:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

** 补码**:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

5、数据类型

5.1、基本数据类型(从小到大)

  1. 整数类型:
  2. byte 1个字节 -2^7~2^7-1
  3. short 2个字节 -2^15~2^15-1
  4. int 4个字节 -2^31~2^15-1
  5. long 8个字节 -2^63~2^63-1
  6. 浮点类型:
  7. float 4个字节 -3.403*10^38 ~ 3.403*10^38
  8. double 8个字节 -1.798*10^308 ~ 1.798*10^308
  9. 字符型:
  10. char 2个字节
  11. 布尔型:
  12. boolean 1个字节

  1. 5.2、引用数据类型(面向对象部分讲解)

5.3、数据类型转换

  1. 自动类型转换:
  2. byte,short,char在参与运算的时候会自动提升到int类型
  3. 由大的数据类型接收小的数据类型,会自动转换,不会报错。
  4. 强制类型转换
  5. 由小的数据类型接收大的数据类型,会报错,接收不了,这时候需要强制类型转换
  6. 格式:目标数据类型 目标变量名 = (目标数据类型)要转换的数值/变量
  1. /*
  2. byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?
  3. 有问题,因为byte数据类型的范围是在-128~127之间,而130超出了范围。
  4. */
  5. public class DataTypeDemo{
  6. public static void main(String[] args) {
  7. // byte b = 130;
  8. byte b = (byte)130;
  9. System.out.println(b); // -126
  10. b = (byte)131;
  11. System.out.println(b);
  12. byte b1 = (byte)300;
  13. System.out.println(b1); // 44
  14. }
  15. }
  16. /*
  17. 我们知道数据在计算机中运算的时候是采用补码的形式参数运算的,所以要知道130的补码
  18. 而想要知道补码,就得知道反码,原码,所以得求出130的二进制的表示:
  19. 130的二进制:10000010
  20. 由于整数默认是int类型,所以扩大字节
  21. 130的原码为:00000000 00000000 00000000 10000010
  22. 又由于最高位是0,所以它的原码,反码,补码都一样
  23. 130的补码:00000000 00000000 00000000 10000010
  24. 做截取操作:10000010 这是补码
  25. 已知补码,求原码:
  26. 符号位 数值位
  27. 补码: 1 0000010
  28. 反码: 1 0000001
  29. 原码: 1 1111110
  30. 最终结果为:11111110
  31. 将它换算成十进制就是我们看到的结果:-126
  32. */

6、运算符

6.1、算数运算符

6.1.1、+,-,*,/,%

  1. /*
  2. System.out.println(“hello”+’a’+1);
  3. System.out.println(‘a’+1+”hello”);
  4. System.out.println(“5+5=”+5+5);
  5. System.out.println(5+5+”=5+5”);
  6. +号的用法:
  7. 1、当加号两边都是数字或者是数字和字符的时候,这时候的+号做的是加法运算
  8. 2、当加号两边其中是字符串的时候,做的是字符串拼接,拼接后是一个新的字符串
  9. 3、字符串与任何数值做加法,做的是字符串拼接,拼接后是一个新的字符串
  10. */
  11. public class DataTypeDemo{
  12. public static void main(String[] args) {
  13. System.out.println("hello"+'a'+1); // helloa1
  14. System.out.println('a'+1+"hello"); // 98hello
  15. System.out.println("5+5="+5+5); // 5+5=55
  16. System.out.println(5+5+"=5+5"); // 10=5+5
  17. //System.out.println("5+5="+5+5); // 5+5=55 我想先计算后面的5+5怎么办?
  18. //小括号可以改变运算的顺序优先级
  19. System.out.println("5+5="+(5+5));
  20. }
  21. }
  1. /*
  2. 运算:
  3. 对常量和变量进行操作的过程称为运算。
  4. 运算符:
  5. 对常量和变量进行操作的符号称为运算符
  6. 操作数:
  7. 参与运算的数据
  8. 表达式:
  9. 用运算符把常量或者变量连接起来符号并且符合java语法的式子就可以称为表达式。
  10. 不同运算符连接的式子体现的是不同类型的表达式。
  11. 算术运算符:
  12. +,-,*,/,%,++,--
  13. */
  14. public class OptArithmeticDemo{
  15. public static void main(String[] args) {
  16. //+ 加法运算
  17. System.out.println(1+1); //2
  18. //-减法运算
  19. System.out.println(5-2); //3
  20. //* 乘法运算
  21. System.out.println(2*2); //4
  22. // / 整除运算,只获取整数部分
  23. System.out.println(5/2); //2
  24. // 我就想获取小数怎么办?将其中的某一个数的数据类型变成double
  25. System.out.println((5*1.0)/2); // 2.5
  26. // % 取余运算
  27. // 5/2=2 .... 1
  28. System.out.println(5%2); //1
  29. }
  30. }

6.1.2、++,--

  1. /*
  2. 1:基本小题目
  3. int a = 10;
  4. int b = 10;
  5. int c = 10;
  6. a = b++;
  7. c = --a;
  8. b = ++a;
  9. a = c--;
  10. 请分别计算出a,b,c的值
  11. */
  12. public class OptArithmeticDemo{
  13. public static void main(String[] args) {
  14. int a = 10;
  15. int b = 10;
  16. int c = 10;
  17. a = b++; // a=10 ,b=11 ,c=10
  18. c = --a; // a=9 ,b=11 ,c=9
  19. b = ++a; // a=10 ,b=10 ,c=9
  20. a = c--; // a=9 ,b=10 ,c=8
  21. System.out.println(a); // 9
  22. System.out.println(b); // 10
  23. System.out.println(c); // 8
  24. }
  25. }
  1. /*
  2. int a = 4;
  3. int b = (a++)+(++a)+(a*10);
  4. */
  5. public class OptArithmeticDemo{
  6. public static void main(String[] args) {
  7. int a = 4;
  8. int b = (a++)+(++a)+(a*10);
  9. // 4 6 60
  10. // a=5 a=6 a=6
  11. System.out.println(a);//6
  12. System.out.println(b);//70
  13. }
  14. }

6.2、赋值运算符

  1. short s=1, s = s+1;
  2. short s=1, s += 1;
  3. 上面两个代码有没有问题,如果有,那里有问题?
  4. 第一个有问题,因为变量参与运算,首先会提升数据类型,然后做运算。所以 s = s+1;s会提升到int类型然后再做加法运算,最终的结果是int类型,所以拿short类型接收会报错,所以要想成功赋值,就得强制类型转换。
  5. 第二个代码没有问题,是因为内部自动包含了强制类型转换,s+=1 ===> s = (s的数据类型)(s+1)
  1. /*
  2. 赋值运算符: = , +=, -=, *=, /=, %=
  3. 其中我们一直在使用的也是最常用的:=
  4. */
  5. public class OptFuZhiDemo{
  6. public static void main(String[] args) {
  7. // int a = 10;
  8. // int b = a;
  9. // System.out.println(a);
  10. // System.out.println(b);
  11. // +=
  12. // int a += 10;
  13. int a = 10;
  14. a += 20; //这里实际上可以看作为a的值加上了一个20再赋值给a
  15. //但是不能完全等于 a = a + 20
  16. //因为a += 20等价于a = (int)(a + 20)
  17. System.out.println(a);
  18. //-=
  19. a-=10;
  20. System.out.println(a); //20
  21. //*=
  22. a*=2;
  23. System.out.println(a); //40
  24. // /=
  25. a/=2;
  26. System.out.println(a); //20
  27. // %=
  28. a%=3;
  29. System.out.println(a); //2
  30. }
  31. }

6.3、关系运算符

关系运算符: ==,!=,>,<,>=,<=

  1. 注意事项:
  2. 1、关系运算符的表达式的结果是一个boolean类型,要么是true,要么是false
  3. 2、==不能少写,一个=是赋值运算符,==才是关系运算符
  4. 3、赋值的时候要注意类型问题,关系运算符表达式的结果是boolean类型,所以接收的时候只能是boolean类型的变量接收。
  1. public class OptGuanXiDemo{
  2. public static void main(String[] args) {
  3. int a = 3;
  4. int b = 4;
  5. boolean flag = (a == b);
  6. System.out.println(flag); //false
  7. //!=
  8. System.out.println(a != b); //true
  9. //>
  10. System.out.println(a>b); //false
  11. //<
  12. System.out.println(a<b); //true
  13. //>=
  14. a = 4;
  15. System.out.println(a>=b); //true
  16. //<=
  17. System.out.println(a<=b); //true
  18. System.out.println(a==b); //true
  19. System.out.println(a=b); //4
  20. }
  21. }

6.4、逻辑运算符

逻辑运算符: &,|,^,!,&&,||

  1. 逻辑运算符的两边放的是boolean类型的值,计算的结果也是一个boolean类型的值
  2. &: 参与运算的时候,有false,则false,两边都做运算
  3. |: 参与运算的时候,有true,则true,两边都做运算
  4. ^: 参与运算的时候,相同为false,不同为true,两边都做运算
  5. !: true变成false,false变成true
  6. &&: 短路与,结果和单个与结果一样,有falsefalse,但是执行的东西不一样,
  7. 当&&左边的表达式结果为false的时候,结果是false,右边不执行
  8. ||: 短路或,结果和单个或结果一样,有truetrue,但是执行的东西不一样,
  9. 当||左边是true的时候,右边不执行,结果是true.
  10. 逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6

6.5、三目运算符

三目运算符:又称之为三元运算符
格式:**(关系表达式)?表达式1:表达式2**;
如果关系表达式的结果为true,运算后的结果是表达式1;
如果关系表达式的结果为false,运算后的结果是表达式2;

  1. 注意事项:
  2. 1、三目运算符表达式的结果数据类型由三目运算符表达式1和表达式2中最大的数据类型决定的。
  3. 2、关系表达式一定只能是boolean类型
  1. public class OptSanMuDemo{
  2. public static void main(String[] args) {
  3. //求出a,b中的最大值
  4. int a = 10;
  5. int b = 30;
  6. //三目运算符解决
  7. int c = (a>b)?a:b;
  8. System.out.println(c); //30
  9. /*面试题:
  10. int a1 = 20;
  11. double b1 = 30.0;
  12. double c1 = (a1>b1)?a1:b1;
  13. System.out.println(c1); //30.0,数据类型取决于a1,b1最大的数据类型
  14. */
  15. }

6.6、位运算符

  1. /*
  2. 位运算符:
  3. <<,>>,>>>,&,|,^,~
  4. */
  5. public class OptWeiDemo{
  6. public static void main(String[] args) {
  7. byte a = 3;
  8. byte b = 4;
  9. System.out.println(a&b);
  10. System.out.println(a|b);
  11. System.out.println(a^b);
  12. System.out.println(~a); //-4
  13. }
  14. }
  15. /*
  16. 由于数据在计算机中参与运算的都是补码,而想要知道补码,就得知道反码,原码,就得求出二进制
  17. 3的二进制:00000011
  18. 4的二进制:00000100
  19. 又由于3和4都是正数
  20. 3的补码:00000011
  21. 4的补码:00000100
  22. & 运算:有0则0
  23. 00000011
  24. &
  25. 00000100
  26. ---------------
  27. 00000000
  28. 结果是 : 0
  29. ====================================
  30. | 运算:有1则1
  31. 00000011
  32. |
  33. 00000100
  34. --------------
  35. 00000111
  36. 结果是:7
  37. ====================================
  38. ^ 运算:相同则0,不同则1
  39. 00000011
  40. ^
  41. 00000100
  42. --------------
  43. 00000111
  44. 结果是:7
  45. ====================================
  46. ~ 运算:1变成0,0变成1
  47. 00000011
  48. ~
  49. -------------
  50. 补码: 11111100
  51. 已知补码求原码:
  52. 反码: 11111011
  53. 原码: 10000100
  54. 结果是:-4
  55. */
  1. /*
  2. 位运算符:
  3. <<: 左移,二进制左移,右边用0补齐,多出来的丢弃
  4. >>: 右移,最左边最高位是0用0补齐,最高位是1就用1补齐,多出来的丢弃。
  5. >>>: 无符号右移,无论左边最高是0还是1,都用0补齐,多出来的丢弃。
  6. */
  7. public class OptWeiDemo2 {
  8. public static void main(String[] args) {
  9. System.out.println(3<<2); //12 = 3*4 = 3*2^2
  10. System.out.println(24>>2); //6 = 24/(2*2)
  11. System.out.println(-24>>2);// -6
  12. System.out.println(-24>>>2);//1073741818
  13. System.out.println(3<<3); // 3*2^3
  14. }
  15. }
  16. /*
  17. <<: 左移,二进制左移,右边用0补齐
  18. 3的二进制:00000000 00000000 00000000 00000011
  19. 由于3是正数,所以原码,反码,补码都一样
  20. 3的补码:00000000 00000000 00000000 00000011
  21. 左移:
  22. 00000000 00000000 00000000 00000011
  23. (00)00000000 00000000 00000000 00001100 (补码)
  24. 由于最高位是0,既是补码也是原码,所以结果是: 12
  25. ================================================================
  26. >>: 右移,最左边最高位是0用0补齐,最高位是1就用1补齐,多出来的丢弃。
  27. 24的二进制:00000000 00000000 00000000 00011000
  28. 由于24是正数,所以原码,反码,补码都一样
  29. 24的补码:00000000 00000000 00000000 00011000
  30. 右移:
  31. 00000000 00000000 00000000 00011000
  32. 0000000000 00000000 00000000 000110(00) (补码)
  33. 由于最高位是0,既是补码也是原码,所以结果是:6
  34. ================================================================
  35. >>: 右移,最左边最高位是0用0补齐,最高位是1就用1补齐,多出来的丢弃。
  36. -24的二进制:10000000 00000000 00000000 00011000
  37. 已知原码求补码:
  38. 原码:10000000 00000000 00000000 00011000
  39. 反码:11111111 11111111 11111111 11100111
  40. 补码:11111111 11111111 11111111 11101000
  41. 右移:
  42. 11111111 11111111 11111111 11101000
  43. 1111111111 11111111 11111111 111010(00) (补码)
  44. 已知补码求原码:
  45. 补码:11111111 11111111 11111111 11111010
  46. 反码:11111111 11111111 11111111 11111001
  47. 原码:10000000 00000000 00000000 00000110
  48. 最终结果是:-6
  49. ==============================================================
  50. >>>: 无符号右移,无论左边最高是0还是1,都用0补齐,多出来的丢弃。
  51. -24的二进制:10000000 00000000 00000000 00011000
  52. 已知原码求补码:
  53. 原码:10000000 00000000 00000000 00011000
  54. 反码:11111111 11111111 11111111 11100111
  55. 补码:11111111 11111111 11111111 11101000
  56. 无符号右移2位:
  57. 11111111 11111111 11111111 11101000
  58. 0011111111 11111111 11111111 111010(00) (补码)
  59. 由于最高位是0,所以它的原码,反码,补码都是一样的。
  60. 最终结果位:0011111111 11111111 11111111 111010 = 1073741818
  61. */

**面试题: *请用最有效率的方式写出计算2乘以8的结果
a<<b == a
2^b

  1. a>>b == a/2^b
  1. /*错误答案:System.out.println(2*8);
  2. 正确答案:System.out.println(2<<3);
  3. */
  1. * --2022.1.4*

本文转载自: https://blog.csdn.net/m0_53997870/article/details/122288551
版权归原作者 BD white 所有, 如有侵权,请联系我们删除。

“大数据之Java基础(二):Java基础语法 [上]”的评论:

还没有评论