81-110标识符的命名规则和规范/关键字/键盘输入语句/进制/原码反码补码与位运算符/控制结构

一、标识符的命名规则和规范

规则就是必须要遵守的事情,规范就是这样做更好,规则是强制性的,规范不是强制性的。
1、标识符的概念
Java对各种变量、方法和类等命名的时候使用的字符序列称为标识符。
凡是自己可以起名字的地方都叫做标识符 int num1 = 90;
2、标识符的命名规则(必须遵守)
由26个英文字母大小写,0-9,_或$组成
数字不能开头。int 3ab = 1;
不可以使用关键字和保留字,但是能包含关键字和保留字。
Java中严格区分大小写,长度无限制。int totalNum = 10; int n = 90;
标识符不能包含空格。int a b = 90;
练习:判断下列变量名是否正确
hsp 1
hsp12 1
1hsp 0
h-s 0
x h 0
h$4 1
class 0
int 0
double 0
public 0
static 0
goto 0 保留字
stu_name 1
3、标识符的命名规范
包名:多单词组成时所有字母都要小写:aaa.bbb.ccc // 比如com.hsp.crm
类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyZzz,比如:TankShortGame,这种命名方式称为大驼峰。
变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz,比如:tankShortGame。这种命名方式被称为小驼峰。
常量名:所有字母都大写。多单词时每个单词使用下划线连接:XXX_YYY_ZZZ,比如:定义一个所得税率TAX_RATE
后面我们学习到类,包,接口等时,我们的命名规范要这样遵守,更加详细的查看文档。查看提供的Java代码规范。

二、关键字

1、关键字的定义和特点不用背诵。
定义:被Java语言赋予了特殊含义,用来专门用途的字符串(单词)
特点:关键字中所有字母都为小写
image
image
2、保留字
Java保留字:现有的Java版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符的时候要避免使用这些保留字。
比如:byValue cast future generic
inner operator outer rest var goto
const

三、键盘输入语句

介绍:在编程的过程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。Input.java
首先需要一个扫描器对象Scanner。
使用步骤:
1、导入该类所在的包,Java.util.*
2、创建该类对象(声明变量)
3、调用里面的功能
案例演示:从控制台接收用户信息,姓名,年龄,薪水。

// 1、导入方式
import java.util.Scanner;
// 2、创建一个Scanner类对象
Scanner myScanner = new Scanner(System.in);
// 3、接收用户输入的字符串
String name = myScanner.next();
// 4、接收用户输入的int
int age = myScanner.nextInt();
// 5、接收用户输入的double
double sal = myScanner.nextDouble();
// Input.java
import java.util.Scanner;
public class Input {
    public static void main(String[] args) {
        String name = "";
        byte age = 0;
        double salary = 0.0;
        // 1、导入Scanner类 import java.util.Scanner
        // 2、创建Scanner对象
        Scanner scanner = new Scanner(System.in);
        // 3、next接收字符串,nextInt接收int,nextDouble接收double
        System.out.print("请输入姓名:");
        name = scanner.next();
        System.out.print("请输入年龄:");
        age = scanner.nextByte();
        System.out.print("请输入薪资:");
        salary = scanner.nextDouble();
        // 4、打印信息
        System.out.println("您的个人信息如下:");
        System.out.println("姓名:" + name +
                "年龄:" + age +
                "薪资:" + salary);
    }
}

四、进制

进制的介绍
对于整数,有四种表示方式:
1、二进制:0和1,满二进一,以0b或者0B开头。
2、十进制:0-9,满十进一。
3、八进制:0-7,满八进一,以数字0开头表示。
4、十六进制:0-9以及a到f,可以大写,满十六进一,以0x或0X开头表示,此处不区分大小写A-F。
比如:

int n1 = 0b1010;  // 二进制
int n2 = 1010;  // 十进制
int n3 = 01010;  // 八进制
int n4 = 0x10101;  // 十六进制

image
image
进制之间的相互转换(基本功)这里分成四组进行讲解,
第一组是其他进制转十进制
从右向左012345..位
0b1010
=
02^0 + 12^1 + 02^2 + 12^3
数*进制数^位数
=
0 + 2 + 0 + 8
=
10

0234
=
4*8^0 + 3*8^1 + 2*8^2
=
4 + 24 + 128
=
156

0x23A
=
A*16^0 + 3*16^1 + 2*16^2
=
A + 48 + 512
=
10 + 48 + 512
=
570

第二组是十进制转其他进制
34
=
34 / 2 = 17 ... 0
17 / 2 = 8 ... 1
8 / 2 = 4 ... 0
4 / 2 = 2 ... 0
2 / 2 = 1 ... 0
1 / 2 = 0 ... 1
从下往上:0b 100010
因为以一个字节的方式进行存储:
0b00100010

131
=
131 / 8 = 16 ... 3
16 / 8 =  2  ... 0
2 / 8  =  0  ... 2
从下往上:0 203

237
=
237 / 16 = 14 ... 13
14 / 16  = 0  ... 14
从下往上:0x ED

第三组是二进制转八进制和十六进制
0b 11010101
=
11 010 101
=
3 2 5
=
0 325

0b 11010101
=
1101 0101
=
13 5
=
0x D5

第四组是八进制和十六进制转二进制
0237
=
010 011 111
=
0b 10011111

0x23B
=
0010 0011 1011
=
0b 001000111011

五、原码反码补码和位运算符

二进制在运算中的说明
1、二进制是逢2进位的进位制,0和1是基本算符
2、现代电子计算机技术全部采用的是二进制,因为它只是用0和1两个数字符号,非常简单方便,易于使用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。二进制Binary数使用0和1两个数字及其组合来表示任何数。进位规则是逢2进1,数字1在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增。

1、二进制的最高位是符号位,0表示正数,1表示负数;
2、正数的原码,反码,补码都是一样;
3、负数的反码=它的原码符号位不变,其他位取反;
4、负数的补码=它的反码+1,负数的反码=负数的补码-1;
5、0的反码,补码都是0;
6、Java没有无符号数,换言之,Java中的数都是有符号的;
7、在计算机运算的时候,都是以补码的方式来运算的;
8、当我们看运算结果的时候,要看的是原码;
	10010001
	11110010
----------------
&	10010000
----------------
|	11110011
----------------
^	01100011

	11110010
----------------
~	00001101

(1) 2 & 3 = ?
得到操作数的补码,因为运算都是以补码的形式来进行运算的,补码统一了正数和负数。正数的原码、反码、补码都是一样的。
2 = 0b 00000010
3 = 0b 00000011
	00000010
	00000011
-----------------
&	00000010
= 0b 00000010
= 2
(2) ~-2 = ?
-2 = 0b 10000010
	 0b 11111101
	 0b 11111110
	 11111110
------------------
~	 00000001
得到的是一个正数,所以原码也是这个
= 0b 00000001
= 1
(3)~2 = ?
2 = 0b 00000010
	00000010
------------------
~	11111101
结果是一个负数,原码和补码不一样
将补码转换成反码
	11111100
将反码转成源码
	10000011
= 0b 10000011
= -3
(4)2 | 3 = ?
2 = 0b 0000 0010
3 = 0b 0000 0011
	0000 0010
	0000 0011
------------------
|	0000 0011
= 0b 00000011
= 3
(5)2 ^ 3 = ?
2 = 0b 0000 0010
3 = 0b 0000 0011
	00000010
	00000011
------------------
^	00000001
= 0b 00000001
= 1
最后这两个验证一下:
// BitOperator.java
public class BitOperator {
    public static void main(String[] args) {
        System.out.println(2 | 3);  // 3
        System.out.println(2 ^ 3);  // 1
    }
}

还有三个位运算符>>、<< 和 >>>,特别说明,没有<<<符号。
1>>2
	00000000 00000000 00000000 00000001
--->00000000 00000000 00000000 00000000|01
= 0
往右边移动几次就相当于除以多少个2
1<<2
	00000000 00000000 00000000 00000001
 00|00000000 00000000 00000000 00000100<---
= 4
往左边移动几次就相当于乘以多少个2
>>>逻辑右移叫无符号右移

六、本章作业

1、计算下列表达式的结果
10 / 3 = ?;
3
10 / 5 = ?;
2
10 % 2 = ?;
0
-10.5 % 3 = ?;
// 如果a%b,当a是小数的时,公式
a - (int)a/b*b
-10.5 - (int)(-10.5) / 3 * 3
-10.5 - (-10) / 3 * 3
-10.5 + 10 / 3 * 3
-10.5 + 3 * 3
-10.5 + 9
-1.5
// 注意:有小数运算,得到的结果是近似值
2、试试说出下列代码的结果
int i = 66;
System.out.println(++i+i);  // 134
3、在Java中,以下赋值语句正确的是:
A) int num1 = (int)"18"; false
将字符串强转成int是不行的,需要使用包装类
Integer.parseInt("18");
B) int num2 = 18.0;      false
这里尝试将double给int,double比int大
C) double num3 = 3d;     true
后面加上一个后缀d表示一个double类型
D) double num4 = 8;      true
int类型给double类型可以
E) int i = 48; char ch = i + 1;  false
最终的结果类型为int
F) byte b = 19; short s = b + 2; false
最终的结果类型为int
4、试着写出将String转换成double类型的语句,以及将char类型转换成String的语句,举例说明即可。
String str = "18.8";
double d1 = Double.parseDouble(str);

char c1 = 'a';
String str2 = c1 + "";

七、控制结构(编程思想)

目录:
顺序控制
分支控制(if switch)
循环控制(for while dowhile,多重循环)
break
continue
return

流程控制的基本介绍:
	在程序中,程序运行的流程控制决定程序是如何执行的,是我们必须掌握的,主要有三大流程控制语句。
	1) 顺序控制
	2) 分支控制
	3) 循环控制
1、顺序控制
顺序控制是我们的程序的一个默认的控制顺序,程序从上往下逐步执行,中间没有任何判断和跳转。
比如在Java中,定义一个变量是先定义然后引用。
Java中定义变量的时候采用的是合法的前向引用原则。比如:
public class Test {
	int num1 = 12;
	int num2 = num1 + 2;  // num1前面已经定义
}
而错误的形式:
public class Test {
	int num2 = num1 + 2;  // 这个是错误的
	int num1 = 12;  // 之后才定义
}
2、分支控制if else
分支控制是让程序有选择地执行,分支控制有三种:
第一种是单分支
第二种是双分支
第三种是多分支
单分支:
	单分支地基本语法是:
基本语法
if(条件表达式) {
	执行代码块;  (可以有多条语句)
}
说明:当条件表达式为true地时候,就会执行{}中地代码,如果为false,就不会执行,特别说明地是,如果{}中只有一条语句,则可以不用写{},但是建议写上{}.
案例说明:If01.java
编写一个程序,可以输入人的年龄,如果这个人的年龄大于18岁,则输出“你的年龄大于18,要对自己的行为负责,送入监狱”
import java.util.Scanner;
public class If01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入您的年龄:");
        if (scanner.nextInt() > 18) {
            System.out.println("你年龄大于18,要对自己的行为负责,送入监狱。");
        }
    }
}
单分支对应的流程图,描述程序的执行流程

双分支的基本语法:
if (条件表达式) {
	执行代码块1;
} else {
	执行代码块2;
}
说明:当条件表达式成立,即执行代码块1,否则执行代码块2,如果执行代码块只有一条语句则{}也可以省略,否则不能省略。
案例演示:If02.java
编写一个程序,可以输入人的年龄,如果该同志的年龄大于18岁,则输出“你的年龄大于18岁,要对自己的行为负责,送入监狱。”否则,输出“你的年龄不大这次就放过你了。”。
import java.util.Scanner;
public class If02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入您的年龄:");
        byte age = scanner.nextByte();
        if (age > 18) {
            System.out.println("你的年龄大于18岁,要对自己的行为负责,送入监狱。");
        } else {
            System.out.println("你的年龄不大这次就放过你了。");
        }
    }
}
也画出双分支对应的流程图

练习:
单分支和双分支的练习题:
对于下列代码,若有输出,指出输出结果
int x = 7;
int y = 4;
if (x > 5) {  // true
	if (y > 5) {  // false
		System.out.println(x + y);
	}
	System.out.println("你好~");  // 执行
} else {
	System.out.println("x is " + x);
}
// 输出的内容是?  你好~

IfExercise01.java
编写程序,声明两个double类型的变量并且赋值。判断第一个数大于10.0,且第二个数小于20.0,打印两个数之和。
定义两个变量int,判断二者的和,是否能够被3又能够被5整除,打印提示信息。
判断一个年龄是否是闰年,闰年的条件是符合下面二者之一:
	年份能够被4整除,但是不能被100整除;
	能够被400整除。
import java.util.Scanner;
public class IfExercise01 {
    public static void main(String[] args) {
        System.out.println("第一题:");
        double d1 = 12.3;
        double d2 = 15.6;
        if (d1 > 10.0 && d2 < 20.0) {
            System.out.println("d1 = " + d1 + " d2 = " + d2 +
                    '\n' + "d1 > 10.0 且 d2 < 20.0。");
            System.out.println("d1 + d2 = " + (d1 + d2));  // 27.9
        }

        System.out.println("第二题:");
        int int1 = 5;
        int int2 = 10;
        int sm = int1 + int2;  // 将结果放到一个变量中,虽然会浪费空间,但是节省了两次计算的时间
        if (sm % 3 == 0 && sm % 5 == 0) {
            System.out.println("int1和int2两者之和能够被3又能被5整除!");
        } else {
            System.out.println("int1和int2两者之和不能够被3又能被5整除!");
        }

        System.out.println("第三题:");
        Scanner scanner = new Scanner(System.in);
        System.out.print("请您输入一个年份,只要输入年即可:");
        int year = scanner.nextInt();
        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
            System.out.println("是闰年!");
        } else {
            System.out.println("不是闰年!");
        }
    }
}

多分支基本语法:
if (条件表达式1) {
	执行代码块1;
} else if (条件表达式2) {
	执行代码块2;
}
...
else {
	执行代码块n;
}
多分枝也是可以没有else
多分枝控制练习

If03.java
输入保国同志的芝麻信用分:
如果:
1、信用分为100分时,输出信用极好;
2、信用分为(80, 99]时,输出 信用优秀;
3、信用分为[60, 80]时,输出 信用一般;
4、其他情况,输出 信用不及格;
5、请从键盘输入保国同志的芝麻信用分,并加以判断
import java.util.Scanner;
public class If03 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请您输入芝麻信用分[0,100]:");
        int score = scanner.nextInt();
        if (score >= 0 && score <= 100) {
            if (score == 100) {
                System.out.println("信用极好");
            } else if (score > 80 && score <= 99) {
                System.out.println("信用优秀");
            } else if (score >= 60 && score <= 80) {
                System.out.println("信用一般");
            } else {
                System.out.println("信用不及格");
            }
        } else {
            System.out.println("信用分的范围只能在[0, 100]!");
        }
    }
}
关于输入如果输入英文或者其他怎么办,这个在异常处理会讲解。
tip:关于vim如何进行整体代码块的缩进,可以使用Ctrl v进入可视化模式,然后通过hjkl进行上下左右移动选中想要缩进的代码块,然后>或者<选择向左边或者向右边使用Tab缩进。

image
image
image

posted @ 2025-04-29 23:16  请叫我虾  阅读(45)  评论(0)    收藏  举报