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语言赋予了特殊含义,用来专门用途的字符串(单词)
特点:关键字中所有字母都为小写


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; // 十六进制


进制之间的相互转换(基本功)这里分成四组进行讲解,
第一组是其他进制转十进制
从右向左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缩进。




浙公网安备 33010602011771号