前言
欢迎来到我的博客,我是雨空集(全网同名),无论你是无意中发现我,还是有意搜索而来,我都感到荣幸。这里是一个分享知识、交流想法的平台,我希望我的博客能给你带来帮助和启发。如果你喜欢我的文章,别忘了收藏、点赞、关注,以便获取最新的内容。你还可以在文章下方留下你的想法和反馈,我非常欢迎你的意见。我会继续努力提供优质的内容。期待与你一起分享知识、互相学习,并建立一个积极的社区。让我们一起在这个知识之旅中取得进步!
本博客文章已收录至我的Java SE专栏,如需阅读其他有关博客笔记请转至该专栏下
传送门 -->Java SE_程序员雨空集
注释
对代码的说明与解释的文字
比如未来写代码,一下子看不明白就需要注释的帮助
Java中的注释分为三种:
- 单行注释:
// 这是单行注释文字
小知识:IDEA中默认的单行注释的快捷键是 Ctrl + /
- 多行注释:
/*
这是多行注释文字
这是多行注释文字
这是多行注释文字
*/
注意:多行注释不能嵌套使用。
小知识:IDEA中默认的多行注释的快捷键是 Ctrl + Shitf + /
- 文档注释(暂时用不到):
/**
这是多行注释文字
这是多行注释文字
这是多行注释文字
*/
标识符
在编程过程中,经常需要在程序定义一些符号标记一些名称
例如:包名、类型、方法名....
这些符号就称为标识符
标识符的命名规则
硬性要求
必须要这么做,否则代码会报错。
- 必须由数字、字母、_(下划线) 、美元符号$组成
- 数字不能开头
- 不能是关键字
- 区分大小写的
软性要求
不这么做也可以,但这是行业中的一种规范,所以建议那么做。
下面要求参考于阿里巴巴Java开发手册规范
1. lowerCamelCase 小驼峰风格 —— 适用于变量名和方法名
- 如果是一个单词,那么全部小写,比如:name
- 如果是多个单词,那么从第二个单词开始,首字母大写,比如:firstName、maxAge
2. UpperCamelCase 大驼峰风格 —— 适用于类名
- 如果是一个单词,那么首字母大写。比如:Demo、Test。
- 如果是多个单词,那么每一个单词首字母都需要大写。比如:HelloWorld
3. 包名统一用小写形式
不管起什么名字,都要做到见名知意。
关键字
定义
- 被Java赋予了特定含义的英文单词
- 关键字的字母全部小写
- 常用的代码编辑器,针对关键字有特殊颜色标识
注意:关键字很多,不用刻意去记。都会慢慢用到,慢慢记得的
abstract | assert | boolean | break | byte |
case | catch | char | class | const |
continue | default | do | double | else |
enum | extends | final | finally | float |
for | goto | if | implements | import |
instanceof | int | interface | long | native |
new | package | private | protected | public |
return | strictfp | short | static | super |
switch | synchronized | this | throw | throws |
transient | try | void | volatile | while |
public、class关键字
class关键字:
表示定义一个类。创建一个类。
类:Java项目最基本的组成单元,一个完整的Java项目有可能会有成千上万个类来组成的。
class后面跟随的就是这个类的名字,简称:类名(类名要和该Java文件名一致)。
在类名后面会有一对大括号,表示这个类的内容。
举例:
public class HelloWorld{
}
解释:class表示定义类。
类名:HelloWorld
HelloWorld后面的大括号表示这个类的范围。
public关键字:
当我们在Java中使用public关键字时,它的作用就是表示这个类、方法或变量是公开的,可以被其他类访问和使用。就像是一个公共门户,其他类可以通过这个门户来访问公共的类、方法或变量。这样做的好处是可以让不同的类之间进行交互和共享数据,提高代码的灵活性和可复用性。所以,当我们在定义一个类时,如果希望其他类可以使用这个类,就需要使用public关键字来修饰它。
数据类型
*Java语言数据类型的分类
- 基本数据类型
-
- 整型类型:byte、short、int、long
- 浮点类型:float、double
- 字符类型:char
- 布尔类型:boolean
- 引用数据类型(面向对象会深入学习)
-
- 类:class
- 接口:interface
- 数组
- 枚举:enmu
- 注解:annotation
基本数据类型
数据类型 | 关键字 | 内存占用 | 取值范围 |
整数 | byte | 1 | 负的2的7次方 ~ 2的7次方-1(-128~127) |
short | 2 | 负的2的15次方 ~ 2的15次方-1(-32768~32767) | |
int | 4 | 负的2的31次方 ~ 2的31次方-1 | |
long | 8 | 负的2的63次方 ~ 2的63次方-1 | |
浮点数 | float | 4 | 1.401298e-45 ~ 3.402823e+38 |
double | 8 | 4.9000000e-324 ~ 1.797693e+308 | |
字符 | char | 2 | 0-65535 |
布尔 | boolean | 1 | true,false |
注意:
- Java中整数默认是 int 类型,浮动数默认是 double 类型
- 各基本类型取值范围大小关系为:
double>float>long>int >short>byte
常量
常量就是在程序中固定不变的量,是不能改变的数据。
在Java中,常量包括整型常量、浮点型常量、字符常量、字符串常量、布尔常量和null常量。
整型常量
整数类型的数据。有二、八、十、十六进制表示方式。
- 二进制表示方式:以0b或0B开头,后面跟上一串由0和1组成的数字序列。例如,0b101表示十进制的5。
- 八进制表示方式:以0开头,后面跟上一串由0到7的数字组成的序列。例如,012表示十进制的10。
- 十进制表示方式:直接使用数字表示整数。例如,123表示十进制的123。
- 十六进制表示方式:以0x或0X开头,后面跟上一串由0到9和A到F(不区分大小写)的数字和字母组成的序列。例如,0xFF表示十进制的255。
浮点型常量
数学中的小数。
- 分为单精度浮点数(float0)和双精度浮点数(double)
- 单精度浮点数后面以 F 或 f 结尾,双精度浮点数以 D 或 d 结尾
在使用浮点数时也可以不加任何后缀,此时JVM会将浮点数默认为double类型
字符常量
表示一个字符,用一对英文半角格式的单引号(' ')括起来。
字符常量可以是英文字母、数字、标点符号和转义序列。
注意:转义序列是由两个字符组成的,通常表示一个特殊的字符或者具有特殊含义的字符序列。例如,\n 表示换行符,\t 表示制表符等。在Java中,这些转义序列被视为一个字符常量,即它们被当作一个字符进行处理。
'a'
'1'
'#'
'\n'
字符串常量
表示一串连续的字符,用一对英文半角格式的双引号(" ")括起来。
"4523"
"Hello world"
布尔常量
用于区分事物的真和加,有 true 和 false 两个值。
null 常量
null 常量只有一个值 null,表示对象的引用为空。
变量
定义
变量就在程序中临时存储数据的容器。但是这个容器中只能存一个值,是可以改变的。
定义格式
数据类型 变量名 = 数据值;
数据类型:
限定了变量当中能存储什么类型的数据。
如果要存10,那么数据类型就需要写整数类型。
如果要存10.0,那么数据类型就需要写小数类型。
变量名:其实就是这个容器的名字。
当以后想要使用变量里面的数据时,直接使用变量名就可以了。
数据值:真正存储在容器中的数据。
分号:表示语句结束的标志,就跟以前写作文时候的句号是一样的。
定义8种基本数据类型变量
public class VariableDemo3{
public static void main(String[] args){
// 1. 定义byte类型的变量,数据类型为byte,变量名为a,数据值为10
byte a = 10;
System.out.println(a); // 输出:10
// 2. 定义short类型的变量,数据类型为short,变量名为b,数据值为20
short b = 20;
System.out.println(b); // 输出:20
// 3. 定义int类型的变量,数据类型为int,变量名为c,数据值为30
int c = 30;
System.out.println(c); // 输出:30
// 4. 定义long类型的变量,数据类型为long,变量名为d,数据值为123456789123456789L,注意长整型需要在数字后面加L或l
long d = 123456789123456789L;
System.out.println(d); // 输出:123456789123456789
// 5. 定义float类型的变量,数据类型为float,变量名为e,数据值为10.1F,注意float类型需要在数字后面加F或f
float e = 10.1F;
System.out.println(e); // 输出:10.1
// 6. 定义double类型的变量,数据类型为double,变量名为f,数据值为20.3
double f = 20.3;
System.out.println(f); // 输出:20.3
// 7. 定义char类型的变量,数据类型为char,变量名为g,数据值为字符'a'
char g = 'a';
System.out.println(g); // 输出:a
// 8. 定义boolean类型的变量,数据类型为boolean,变量名为h,数据值为true
boolean h = true;
System.out.println(h); // 输出:true
}
}
输出结果:
定义时需注意的点:
- 定义 long 类型变量时,要在数据值的后面需要加上 L 后缀
(大小写都可以)
因为Java默认将整数值视为int类型,如果要表示long类型的数据,需要在数值后面加上 L 或 l 后缀,以告诉编译器这是一个long类型的值
long num = 20.3F;
- 定义 float 类型变量时,要在数据值的后面需要加上 F 后缀
(大小写都可以)
因为Java默认将小数值视为double类型,如果要表示float类型的数据,需要在数值后面加上F或f后缀,以告诉编译器这是一个float类型的值。
float num = 20.3F;
注意事项
- 命名变量名时不能重复命名。在Java编程中,每个变量都有唯一的名称。如果你尝试使用已经存在的变量名来命名一个新的变量,你会得到一个编译错误。因此,在命名变量时,你需要确保你的变量名是独一无二的。
- 在一条语句中,可以定义多个变量。但是这种方式影响代码的阅读,所以了解一下即可:这是指你可以在同一行代码中定义多个变量。例如,int a, b, c; 这将定义三个整型变量a、b和c。然而,这种做法可能会降低代码的可读性,因为其他开发者可能需要额外的上下文才能理解每个变量的用途。通常,为了提高代码的可读性,最好分别定义每个变量。
- 变量在使用之前必须要赋值。(个人建议尽量变量定义后就赋值)在Java中,变量必须有值才能使用。如果你尝试使用一个未赋值的变量,Java编译器会报错。在定义变量时,你可以立即给它赋值,如 int a = 10; ,或者在你使用它之前任何时间给它赋值。如果你忘记了给变量赋值,那么在某些情况下,Java编译器会为你提供一个默认值(例如,对于整数类型,默认值为0)。然而,为了代码的清晰和避免潜在的错误,最好在使用变量之前明确地为其赋值。
变量的类型转换
在程序中,经常会遇到不同类型的数据进行运算,为解决数据类型不一致的问题,需要对数据的类型进行转换
例如,一个浮点数和一个整型相加,必须先将两个数转化成同一类型,才能继续运算
而类型转换又分为自动类型转换和强制类型转换。
- 自动类型转换
自动类型转换也称为隐式类型转换,即在两种数据类型在转换的过程中不需要显式声明,有编译器自动完成。
需满足的条件:
- 两种数据类型彼此兼容
- 目标类型的取值范围大于源类型的取值范围
byte b = 3;
int x = b;
首先,我们声明了一个byte类型的变量b,并将其赋值为3。
然后,我们声明了一个int类型的变量x,并将其赋值为b。
在这个过程中,发生了自动类型转换。由于byte和int是兼容的数据类型,并且int的取值范围比byte大,编译器会自动将byte类型的值转换为int类型的值。因此,b的值3会被自动转换为x的值3。
需要注意的是,自动类型转换可能会导致精度损失或数据溢出。
在进行自动类型转换时,应该确保目标类型的取值范围足够大,以容纳源类型的所有可能取值。如果目标类型的取值范围不够大,可能会导致数据溢出或结果不准确。
3种可以进行自动类型转换的情况:
下面的3种可以理解就是上面所讲到的
- 整数类型之间
byte 类型数据可以赋值给short、int、long类型
short 类型数据可以赋值给int、long类型
int 类型数据可以赋值给long类型
- 整数类型转换为 float 类型
byte、char、short、int类型数据可以赋值给 float 类型
- 其他类型转换为 double 类型
byte、char、short、int、long、float类型数据可以赋值给 double 类型
- 强制类型转换
强制类型转换也称为显式类型转换,指两种数据类型之间的转换需要进行显示声明。
强制类型转换的语法如下:
目标类型 变量名 = (目标类型) 表达式;
需要注意的是,强制类型转换可能会导致数据丢失或溢出。在进行强制类型转换时,应该确保目标类型可以容纳源类型的值,否则可能会导致数据溢出或结果不准确。
示例:
double d = 3.14; int x = (int) d;
声明了一个double类型的变量d,并将其赋值为3.14。
然后,我们声明了一个int类型的变量x,并将其赋值为d。
由于double类型的取值范围比int类型大,我们需要进行强制类型转换来将double类型的值转换为int类型的值。
在强制类型转换的过程中,编译器会将double类型的值截断为整数部分,并将其赋给int类型的变量x。因此,在这个例子中,x的值将会是3。
需要注意的是,强制类型转换可能会导致精度损失或数据溢出。在进行强制类型转换时,应该谨慎考虑可能的精度损失和数据溢出问题,并确保转换的结果是符合预期的
键盘录入
键盘录入是指从键盘输入数据,并将其作为程序的输入
在Java中,可以使用Scanner类来实现键盘录入功能
使用Scanner类进行键盘录入的步骤如下:
第一步:导包
在使用Scanner类之前,需要先导入java.util.Scanner包。
可以在代码的开头添加如下导入语句:
import java.util.Scanner;
第二步:创建Scanner对象
在代码中创建一个Scanner对象,可以使用以下语句:
Scanner scanner = new Scanner(System.in);
这样就创建了一个名为scanner的Scanner对象,用于接收键盘输入。
第三步:接收数据
使用Scanner对象的方法来接收键盘输入的数据。例如,可以使用nextInt()
方法来接收一个整数,使用nextDouble()
方法来接收一个浮点数,使用nextLine()
方法来接收一行字符串等等。
示例:
import java.util.Scanner; // 导入Scanner类所在的包
public class KeyboardInputExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // 创建Scanner对象,用于接收键盘输入
System.out.print("请输入一个整数:"); // 提示用户输入一个整数
int num = scanner.nextInt(); // 使用nextInt()方法接收一个整数,并将其保存到变量num中
System.out.println("您输入的整数是:" + num); // 打印用户输入的整数
System.out.print("请输入一个浮点数:"); // 提示用户输入一个浮点数
double decimal = scanner.nextDouble(); // 使用nextDouble()方法接收一个浮点数,并将其保存到变量decimal中
System.out.println("您输入的浮点数是:" + decimal); // 打印用户输入的浮点数
scanner.nextLine(); // 清空输入缓冲区中的换行符
System.out.print("请输入一行字符串:"); // 提示用户输入一行字符串
String str = scanner.nextLine(); // 使用nextLine()方法接收一行字符串,并将其保存到变量str中
System.out.println("您输入的字符串是:" + str); // 打印用户输入的字符串
}
}
首先导入了java.util.Scanner包。然后,创建了一个Scanner对象scanner,并传入System.in作为参数,表示从标准输入(键盘)接收数据。
接下来,使用nextInt()
方法接收一个整数,并将其保存到变量num中。然后,使用nextDouble()
方法接收一个浮点数,并将其保存到变量decimal中。最后,使用nextLine()
方法接收一行字符串,并将其保存到变量str中。
需要注意的是,在使用nextLine()
方法之前,如果之前使用了nextInt()
或nextDouble()
等方法,可能会导致输入缓冲区中仍然存在换行符。为了避免这个问题,可以在接收字符串之前,使用一个额外的nextLine()
方法来清空输入缓冲区。