文章目录
第二篇
2.1 从控制台读取输入
Java中的Scanner类是用于读取用户输入或文件内容的工具类。可以通过Scanner类的构造函数创建一个Scanner对象,并使用该对象的方法来读取输入或文件内容。Scanner类在包java.util中
以下是Scanner类的一些常用方法:
next():读取下一个以空格分隔的字符串。
nextLine():读取下一行字符串。
nextInt():读取下一个整数。
nextFloat():读取下一个浮点数。
nextDouble():读取下一个双精度浮点数。
hasNext():判断是否还有下一个输入项。
hasNextLine():判断是否还有下一行输入。
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个字符串: ");
String str = scanner.next();
System.out.println("输入的字符串为: " + str);
scanner.close();
}
}
/*以上代码创建了一个Scanner对象,从控制台读取用户输入的字符串,
并输出到控制台。需要注意的是,在读取完输入后,
应该调用Scanner对象的close()方法关闭输入流*/
2.2 标识符
Java中的标识符是用来标识变量、方法、类、接口等程序元素的名称。标识符的命名必须遵循一定的规则:
-
标识符只能由字母、数字、下划线和美元符号($)组成,且不能以数字开头。
-
Java中的标识符是区分大小写的,因此myVar和myvar是两个不同的标识符。
-
命名标识符时要使用有意义的名称,可以使用驼峰命名法来命名变量和方法,即第一个单词的首字母小写,后面每个单词的首字母大写,例如myVariableName。
-
对于类名,建议使用首字母大写的方式来命名,例如MyClassName。
-
标识符不能是保留字
遵守良好的标识符命名规则可以提高代码的可读性和可维护性。同时,也可以避免由于命名不规范而导致的代码错误和混淆
2.3 Java关键字
Java中的关键字是指具有特殊含义的单词,它们不能被用作标识符名称。这些关键字在Java语言中有着特殊的作用,例如用于控制流程、定义类、变量和方法等。
以下是一些Java关键字的介绍:
- abstract:用于定义抽象类和抽象方法。
- assert:用于测试代码的正确性。
- boolean:用于定义布尔类型的变量和值。
- break:用于跳出循环或switch语句。
- byte:用于定义字节类型的变量和值。
- case:用于定义switch语句的分支。
- catch:用于捕获异常。
- char:用于定义字符类型的变量和值。
- class:用于定义类。
- const(已经废弃):用于定义常量,但已经被final关键字所取代。
- continue:用于跳过循环中的某个迭代。
- default:用于定义switch语句的默认分支。
- do:用于定义do-while循环。
- double:用于定义双精度浮点数类型的变量和值。
- else:用于定义if语句的否定分支。
- enum:用于定义枚举类型。
- extends:用于定义类的继承关系。
- final:用于定义常量、方法和类,表示它们不能被修改或继承。
- finally:用于定义异常处理的最终代码块。
- float:用于定义单精度浮点数类型的变量和值。
- for:用于定义for循环。
- goto(已经废弃):用于无条件跳转语句,但已经被Java禁用。
- if:用于定义条件语句。
- implements:用于实现接口。
- import:用于导入其他包中的类。
- instanceof:用于测试一个对象是否是一个类的实例。
- int:用于定义整数类型的变量和值。
- interface:用于定义接口。
- long:用于定义长整数类型的变量和值。
- native:用于声明本地方法。
- new:用于创建一个新的对象。
- package:用于定义包。
- private:用于定义私有成员。
- protected:用于定义受保护的成员。
- public:用于定义公共成员。
- return:用于返回值。
- short:用于定义短整数类型的变量和值。
- static:用于定义静态成员。
- strictfp:用于定义精确浮点计算。
- super:用于调用父类的构造方法
2.4 变量
变量用于表示在程序中可能被改变的值
Java中的变量还可以被分为实例变量和局部变量。实例变量是定义在类中、方法外部的变量,它们属于类的实例,每个实例都有自己的实例变量。局部变量是定义在方法内部的变量,它们只在方法内部可用,离开方法后就被销毁了。
Java中还有一种特殊的变量,叫做静态变量,它们被定义为static关键字,属于类而不是实例,它们在整个程序的执行过程中只有一份拷贝,可以被所有实例访问。静态变量通常用于存储跨实例共享的数据。(这个后面章节会讲到)
2.4.1 变量的声明
int age = 10;//整型变量的声明
double value = 20.0//double型数据的声明
char sex = '男';//字符型数据的声明
String name = "Kobe";//字符串型数据的声明
2.4.2 变量的使用细节
Java变量的使用细节:
- 变量名必须遵守Java的命名规范,即以字母、下划线或美元符号开头,后面可以跟字母、数字、下划线或美元符号。
- 变量在使用前必须先声明并初始化,否则会出现编译错误。
- 变量的作用域是指在哪些地方可以访问到该变量。在Java中,变量可以有多种作用域,包括类作用域、方法作用域、块作用域等。
初学者可去查看下面这篇文章,初学者了解。
教妹学Java(八):初识Java变量_沉默王二的博客-CSDN博客
版权声明:本文为CSDN博主「沉默王二」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
2.5 Java中 + 号的使用
在Java中,+号主要有两种作用:
-
数学运算符:+号可以用于两个数字之间的加法运算,例如:
int num1 = 5;
int num2 = 10;
int sum = num1 + num2; // sum的值为15 -
字符串连接符:+号可以将两个字符串连接起来,例如:
String str1 = “Hello”;
String str2 = “World”;
String result = str1 + str2; // result的值为"HelloWorld"
需要注意的是,在使用+号进行字符串连接时,如果其中一个操作数是字符串,那么Java会将另一个操作数也转换为字符串,然后将它们连接起来。如果两个操作数都是数字,那么Java会将它们相加,并返回一个数字类型的结果。
System.out.println(10 + 10);//输出结果为:20
System.out.println(10 + "10");//输出结果为:1010
System.out.println(10 + "hi" + 20);//输出结果为:10hi20
System.out.println("hi" + 10 + 20);//输出结果为:hi1020
2.6 Java数据类型
Java中的数据类型可以分为两类:基本数据类型和引用数据类型。
-
基本数据类型:Java中的基本数据类型包括:
-
整型:byte、short、int、long
-
浮点型:float、double
-
字符型:char
-
布尔型:boolean
-
这些数据类型都有固定的大小和取值范围,可以直接存储在内存中,并且可以直接进行算术运算。
-
-
引用数据类型:Java中的引用数据类型包括:
-
类
-
接口
-
数组
这些数据类型在内存中只是存储了一个引用,需要通过new关键字来创建对象,并且可以调用对象的方法和访问对象的属性。引用数据类型的大小和取值范围是不固定的,取决于实际存储的数据。
-
数据类型 | 默认值 | 大小 |
---|---|---|
boolean | false | 1比特 |
char | ‘\u0000’ | 2字节 |
byte | 0 | 1字节 |
short | 0 | 2字节 |
int | 0 | 4字节 |
long | 0L | 8字节 |
float | 0.0f | 4字节 |
01、布尔
布尔(boolean)仅用于存储两个值:true 和 false,也就是真和假,通常用于条件的判断。代码示例:
boolean flag = true;
02、byte
byte 的取值范围在 -128 和 127 之间,包含 127。最小值为 -128,最大值为 127,默认值为 0。在网络传输的过程中,为了节省空间,常用字节来作为数据的传输方式。代码示例:
byte a = 10;
byte b = -10;
03、short
short 的取值范围在 -32,768 和 32,767 之间,包含 32,767。最小值为 -32,768,最大值为 32,767,默认值为 0。代码示例:
short s = 10000;
short r = -5000;
04、int
int 的取值范围在 -2,147,483,648(-2 ^ 31)和 2,147,483,647(2 ^ 31 -1)(含)之间,默认值为 0。如果没有特殊需求,整形数据就用 int。代码示例:
int a = 100000;
int b = -200000;
05、long
long 的取值范围在 -9,223,372,036,854,775,808(-2^63) 和 9,223,372,036,854,775,807(2^63 -1)(含)之间,默认值为 0。如果 int 存储不下,就用 long,整形数据就用 int。代码示例:
long a = 100000L;
long b = -200000L;/*为了和 int 作区分,long 型变量在声明的时候,末尾要带上大写的“L”。
不用小写的“l”,是因为小写的“l”容易和数字“1”混淆。*/
06、float
float 是单精度的浮点数,遵循 IEEE 754(二进制浮点数算术标准),取值范围是无限的,默认值为 0.0f。float 不适合用于精确的数值,比如说货币。代码示例:
float f1 = 234.5f;/*为了和 double 作区分,float 型变量在声明的时候,
末尾要带上小写的“f”。不需要使用大写的“F”,是因为小写的“f”很容易辨别。*/
07、double
double 是双精度的浮点数,遵循 IEEE 754(二进制浮点数算术标准),取值范围也是无限的,默认值为 0.0。double 同样不适合用于精确的数值,比如说货币。代码示例:
double d1 = 12.3
08、char
char 可以表示一个 16 位的 Unicode 字符,其值范围在 ‘\u0000’(0)和 ‘\uffff’(65,535)(包含)之间。代码示例:
char letterA = 'A'; // 用英文的单引号包裹住。
引用数据类型后面章节会讲到
2.7基本数据类型转换
2.7.1自动类型转换
Java中的自动类型转换是指在不需要进行任何显式转换的情况下,将一种数据类型转换为另一种数据类型。自动类型转换的规则如下:
- 将低容量类型向高容量类型自动转换。例如,将byte类型转换为int类型。
- 将整型常量(如1、2等)自动转换为浮点型。例如,将int类型的1自动转换为float类型的1.0。
- 将char类型自动转换为int类型。例如,将char类型的’a’自动转换为int类型的97。
需要注意的是,对于不同的数据类型之间进行运算时,Java编译器会自动进行类型转换,将其中一个数据类型转换为另一个数据类型,然后再进行运算。但是,如果不符合自动类型转换的规则,就需要进行显式类型转换。例如,将double类型转换为int类型时,需要使用强制类型转换符号“()”进行显式转换。
数据类型按容量大小排序
2.7.2自动类型转换使用细节
自动类型转还有一些细节需要注意:
- 当将浮点型转换为整型时,会将小数部分直接截断,而不是四舍五入。
- 对于byte、short、char三种类型,它们在进行运算时会自动转换为int类型,因为int类型是它们类型范围内最大的类型。
- 当进行运算时,如果两个操作数的类型不一致,Java编译器会自动将其中一个操作数转换为另一个操作数的类型,然后再进行运算。如果转换后的类型仍然不一致,则会将其中一个操作数转换为另一个操作数的类型的最大公共类型,然后再进行运算。
- 在表达式中,可以使用强制类型转换符号“()”进行显式类型转换,例如将double类型转换为int类型时可以使用“(int)”进行转换。
需要注意的是,虽然Java中的自动类型转换可以方便地进行数据类型转换,但是在进行类型转换时需要注意数据类型的范围和精度,以避免数据丢失和溢出等问题。
2.7.3强制类型转换
Java中的强制类型转换可以使用强制类型转换符号“()”进行显式类型转换,其语法格式为:
(目标类型) 值或表达式
例如,将double类型的变量d转换为int类型可以使用以下代码:
double d;
int i = (int) d;
需要注意的是,在进行强制类型转换时需要确保转换后的数据类型可以完整地容纳转换前的数据,否则可能会发生数据丢失和溢出等问题。因此,在进行强制类型转换时应该进行数据类型范围和精度的检查。
时需要注意数据类型的范围和精度,以避免数据丢失和溢出等问题。
2.8运算符
2.8.1算术运算符
运算符 | 运算 | 示例 | 结果 |
---|---|---|---|
+ | 正号 | +1 | 1 |
- | 负号 | a=-1 | -1 |
+ | 加 | 1+1 | 2 |
- | 减 | 2-1 | 1 |
* | 乘 | 2*2 | 4 |
/ | 除 | 4/2 | 2 |
% | 取余 | 3%2 | 1 |
++ | 自增 | a=2; b=++a a=2; b=a++ | a=3;b=3 a=3;b=2 |
– | 自减 | a=2; b= - -a a=2; b= a- - | a= 1;b=1 a=1;b=2 |
说明:自增++,当自增语句单独使用时,都等价于i=i+1,当作为表达式时,前++:先自增再赋值,后++:先赋值后自增。
2.8.2 增强赋值操作符
Java中允许使用增强赋值操作符来结合赋值和运算操作的功能
运算符 | 运算 | 示例 | 等价于 |
---|---|---|---|
+= | 加法赋值操作符 | i+=1 | i=i+1 |
-= | 减法赋值操纵符 | i-=1 | i=i-1 |
*= | 乘法赋值操作符 | i*=1 | i=i*1 |
/= | 除法赋值操作符 | i/=1 | i=i/1 |
%= | 取余赋值操作符 | i%=1 | i=i%1 |
注意:增强赋值操作符在表达式中所有其他操作符计算完成后执行。比如:x /= 4 + 2 * 3; 等价于x = x / (4 + 2 * 3);增强操作符之间是没有空格的,+=不能写成 + = 。
2.8.3 关系运算符
特点:关系运算符的结果都是boolean型;经常用在if结构或者循环结构的的条件判断
运算符 | 运算 | 示例 | 结果 |
---|---|---|---|
== | 相等 | 1==2 | false |
!= | 不等于 | 1!=1 | true |
< | 小于 | 1<2 | true |
> | 大于 | 3>2 | true |
<= | 小于等于 | 1<=2 | true |
>= | 大于等于 | 4>=2 | true |
instanceof | 检查是否是类的对象 | cat instanceof animal | true |
2.8.4 逻辑运算符
a | a | a&b | a&&b | a|b | a||b | !a | a^b |
---|---|---|---|---|---|---|---|
true | true | true | true | true | true | false | false |
true | false | false | false | true | true | false | true |
false | true | false | false | true | true | true | true |
false | false | false | false | false | false | true | false |
讲解规则:
- a&b : & 叫逻辑与:规则:当 a 和 b 同时为 true ,则结果为 true, 否则为 false
- a&&b : && 叫短路与:规则:当 a 和 b 同时为 true ,则结果为 true,否则为 false
- a|b : | 叫逻辑或,规则:当 a 和 b ,有一个为 true ,则结果为 true,否则为 false
- a||b : || 叫短路或,规则:当 a 和 b ,有一个为 true ,则结果为 true,否则为 false
- !a : 叫取反,或者非运算。当 a 为 true, 则结果为 false, 当 a 为 false 是,结果为 true
- a^b: 叫逻辑异或,当 a 和 b 不同时,则结果为 true, 否则为 false
&& 和 & 使用区别:
- &&短路与:如果第一个条件为 false,则第二个条件不会判断,最终结果为 false,效率高
- & 逻辑与:不管第一个条件是否为 false,第二个条件都要判断,效率低
- 开发中, 我们使用的基本是使用短路与&&, 效率高
|| 和 | 基本规则
名称 | 语法 | 特点 |
---|---|---|
短路或 | 条件 1||条件 2 | 两个条件中只要有一个成立,结果为 true,否则为false |
逻辑或 | | 条件 1|条件 2 | 只要有一个条件成立,结果为 true,否则为 false |
2.8.5 三元运算符
基本语法:条件表达式 ? 表达式 1: 表达式 2;
运算规则:
1、如果条件表达式为 true,运算后的结果是表达式 1;
2、如果条件表达式为 false,运算后的结果是表达式 2;
示例
int a = 1;
int b = 2;
// 解读
// 1. a > b 为 false
// 2. 返回 b
// 3. 返回的结果是 2
int result = a > b ? a : b;
System.out.println("result=" + result);