大家好啊~ , 清汉 回来了, 再也不离家出走了
时隔一月," 断更人 "终于开更了~
本次更新带来了全新的一门编程语言 Java~
这门编程语言,将是今后文章更新的主打选手,将荣登本博客 C位,哈哈~
博主,很是期待,信心爆棚,哦~
这本书呢,开始阅读的时候很不习惯,(可能是学过Python的原因吧,两种编程语言基础知识差不太多)感觉啰啰嗦嗦的进度很慢。
后来慢慢读进去了,觉得作者的这种笔法对 “0”基础初学者很是友好,顺着作者的思维由浅入深,就很容易理解。
尤其是作者阐述 Java 编程思想,封装、继承、多态的时候,层层递进,让你理解的很自然。先带你将各种例程走一遍,并没有强调单个例程的就是 java 的某个编程思想,而是用生活中的例子带入到编程中,最后引出 封装、继承、多态的含义,让人豁然开朗。
(这就是我决定引用本书中的知识,来作为 初识 Java 系列文章的原因)
掌握一门编程语言的精髓,就是掌握他的编程思想。
当你理解并可以熟练运用这门编程语言的核心思想的时候,做起开发来,那就是下笔如有神,才思如泉涌,如有神助啊~
DIY 1
声明:未打广告,全文知识梳理来源于《JAVA入门1-2-3》豆瓣评分9.0
注:例中所有 >>> 符号后为输出结果
- -snip- - 为代码省略位置
知识框图
引言
- 目前的知识框图还不够全面,只是基础中的基础,后续整理后再更新。
- 文章中就不把全图都展开了,思维导图内写的内容比较多,更像是一个笔记,展开也看不清楚~ ~
- 若是那位小伙伴需要可私聊发你完整导图,共同进步!!
Hello World
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World !!");
}
}
-
欢迎来到 Java 的世界,Hello World !!
-
不知道小伙伴们有没有好奇过,为什么每学习一门编程语言都是从 Hello world 开始,为甚?
-
我想每种编程语言都是一个新世界吧,当年在控制台输出 Hello World 的时候,就标志着你进入了 Java 这个面向对象的世界,多姿多态的新世界。
JDK
-
要想敲开 Java 世界的大门,首先你要用拥有开启它的钥匙,而 JDK 就是这把钥匙。目前已经更新到 jdk-17 了 ~ Java 钥匙领取处
-
JDK 是什么呢?
- JDK 全称 Java Development Kit, Java开发工具,包含了JRE和开发工具。
-
那 JRE 又是什么呢?
- JRE 全称 Java Runtime Environment, Java运行环境,包含了 JVM 和 Java 的核心类库(Java API)。
-
JVM 呢?
- JVM 全称 Java Virtual Machine, Java 虚拟机。
- JVM 就是 Java 可以实现跨平台的根本。我们编写出来的源码 .java 文件,经过编译器编译后生成 .class 字节码文件,最后被 JVM 所解释执行。因此只要在对应的操作系统上安装了 JVM 就可以实现跨平台了。
-
到这里大家是不是已经迫不及待要安装 JDK 了?这里就不再单独书写了,C 站安装教程太多了,这位博主Marvin_996写的不错,大家可以参考。
IDE
- 安装好 JDK 后,应该在哪里编写代码呢?
- 记事本?
- 作为 21世纪 20年代的现代人类,总不能在记事本里编写代码吧?那样也太原始了,简单编写一个 Hello World 还可以,要是以后开发项目了,一个项目里有多个 Java 文件,需要相互配合,这个时候还用记事本?
- 集成开发环境
- 新时代的人们都在一种叫做集成开发环境的东西里面写代码。
- 集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。
- 懂了吗?也就是一个软件里面,可以把程序开发所有的事情都干完,而且还是自动干。一键编译、运行 ~
- 这里推荐 IDEA ,书中使用的 Eclipse,并不推荐使用。
再看 Hello World
// 定义一个类,所有的Java程序都是在类种编写的可以理解为一类对象
// 语法如下,其中 HelloWorld 是类名称。
// 注意存放这个类的文件要与类名一致,如这个源码文件全称:HelloWorld.java
public class HelloWorld {
// 定义一个方法,方法是实现功能载体,可以理解为一个方法就是一个功能。
// 语法如下:
public static void main(String[] args) {
// 向控制台输出 Hello World !! 这个字符串
// 语法如下:
System.out.println("Hello World !!");
}
}
// >>> Hello World !!
拓展内容:
- 注释可以让我们轻易理解这段代码或者这行代码是在干什么?不用费力的一点点阅读代码来猜测它的功能
- 例如:打开 Java 的源码,可以看到 Java 开发工程师们对每一段代码的功能都做了注释,让我们可以轻易知道代码的功能
- 下面是 Java 中 lang 包下 System 类中的代码截图,其中绿色的灰色的都是注释内容,在 IDEA 中按下键盘上的 ctrl + 鼠标左键点击相应的类,即可查看源码。
- Java中的注释分为三种
- 单行注释 // 注释的内容
- 多行注释 /* 注释的内容 */
- 文档注释 /** 注释的内容 */
- 被注释的内容不会被编译执行,现在的 IDE 都很友好,注释的内容会有不同的高亮显示,可以轻易识别。
Java 中的基本数据类型和运算符
基本数据类型
- Java 中的数据类型分为基本数据类型和引用数据类型,本篇文章我们只详细介绍基本数据类型,引用数据类型后续文章慢慢引出。
- 基本数据类型,Java 给出了几个关键字,用来分别定义不同值域、不同类型的数据。
关键字 | 含义 |
---|---|
byte、short、int、long | 整数类型 |
float、double | 小数类型(浮点型) |
char | 字符类型 |
boolean | 布尔类型 |
public class BasicDataType {
public static void main(String[] args) {
// 整数类型
// 定义 4种 整数类型的变量,并分别赋值
byte by = 127;
short sh = 32767;
int in = 2147483647;
long lo = 922;
// 向控制台输出整数类属性变量的值
System.out.println("by: " + by +
"\nsh: " + sh +
"\nin: " + in +
"\nlo: " + lo);
// println 单独一行语句没有内容,可以有换行的效果
System.out.println();
// 小数(浮点数)类型
// 定义 2种 小数类型的变量,并分别赋值
float fl = 1.5f;
double dou = 2.3;
// 向控制台输出小数类属性变量的值
System.out.println("fl: " + fl +
"\ndou: " + dou);
// println 单独一行语句没有内容,可以有换行的效果
System.out.println();
// 字符类型
// 定义 char 类型变量并赋值
// 注意只能保存一个字符
char ch = '人';
System.out.println("ch: " + ch);
System.out.println();
// 布尔类型
// 定义布尔类型变量,并赋值为 true 也可以赋值 false
boolean boo = true;
System.out.println("boo: " + boo);
}
}
拓展内容
- 变量
- 上面代码中 by sh in lo 都是变量。不同类型变量,可以储存不同的值。
- 在声明变量之前,要定义这个变量的类型,因为 Java 是一种强类型语言,它是不会自己根据值来判断数据类型的。
- 变量的命名规则:
- 必须以字母、下划线、或者美元符$开头
- 变量名必须由字母、数字、下划线组成
- 变量名不能是 Java 中的关键字
- 温馨提示:
- 变量名最好是做到见名知意,不要命名一些与变量实际用处不相干的字符
类型转换
Java 中的数据类型转换机制
- 强制转换
- Java 中高精度的数据类型转换为低精度的数据类型,需要强制类型转化,强制类型转换的格式如下代码所示
// 强制类型转换实例
public class ForceConcert {
public static void main(String[] args) {
double doubleValue = 9.6; // 首先声明了一个双精度的浮点型变量并赋值一个小数
int intValue; // 然后声明了一个整型变量
intValue = (int) doubleValue; // 强制类型转换,浮点型转换为整型;
System.out.println(intValue); // 浮点型强制转换位整型时,Java会将小数点后的部分全部删除。
intValue = (int) (doubleValue + 0.5); // 可做 +0.5 运算,达到四舍五入的效果;
// 此处对运算加括号是因为强制类型转换优先于运算符
// 若是运算不加括号,首先将 doubleValue 转换为整型,再做加法运算编译器会输出损失精度的错误。
System.out.println(intValue);
}
}
// >> 9
// >> 10
基本运算符
基本运算符
- Java 中的基本运算符包括数学中的四则运算符“加减乘除”,不过其中还是有一些细微区别的,不过有些功能还是完全跟数学运算是一样效果的哈。
- 比如除,我们这里用的 / 这个斜杠符号表示,不过这个运算结果只取商,而不计余数。要想得到余数须使用 % 百分号这个符号,则不取整只取余
- = 等号是用来给变量赋值的
- () 括号与数学运算中作用一样都是用来改变运算的优先级的,,其中如果出现在 Java 关键字、类、方法后面就不是这个作用了
- 其他运算符的作用会在下面代码中慢慢刨析
public class BasicOperator {
public static void main(String[] args) {
int a = 7, b = 2; // 定义两个 int类型
int c = a + b; // 常规加法运算
System.out.println("a" + " + " + "b = " + c); // + 作用:字符串拼接
int d = a - b; // 常规减法运算
System.out.println("b - a = " + d);
int e = a * b; // 常规乘法运算
System.out.println("a * b = " + e);
int f = a / b; // 除法取商(取整)运算
System.out.println("a / b = " + f);
int g = a % b; // 除法取余运算
System.out.println("a % b = " + g);
}
}
// >> a + b = 9
// >> b - a = 5
// >> a * b = 14
// >> a / b = 3
// >> a % b = 1
布尔运算符
关系运算符
- 作用是:比较两个值,并返回一个值(true或者false)
- 关系运算符都是两元操作符,也就是说这个操作符需要有两个操作数
- 关系运算符,左边和右边的变量类型必须有比较的可能性
// 关系运算符实例演示
public class BooleanRelation {
public static void main(String[] args) {
int a = 2, b = 5; // 声明两个int类型的变量
System.out.println("a == b :" + (a == b)); // 相等运算符,判断左右两边是否相等
System.out.println("a != b :" + (a != b)); // 不等运算符,判断左右两边是否不相等
System.out.println("a > b :" + (a > b)); // 大于运算符,判断左边是否大于右边
System.out.println("a < b :" + (a < b)); // 小于运算符,判断左边是否小于右边
System.out.println("a <= b :" + (a <= b)); // 小于等于运算符,判断左边是否小于或者等于右边
System.out.println("a >= b :" + (a >= b)); // 大于于等于运算符,判断左边是否大于或者等于右边
}
}
// >> a == b :false
// >> a != b :true
// >> a > b :false
// >> a < b :true
// >> a <= b :true
// >> a >= b :false
逻辑运算符
- 求 boolean 类型数据关系的布尔运算符
- 作用是:把各种运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,返回判断结果(true或者false)
- 包括 逻辑与、逻辑或、逻辑异或、逻辑非
- 注意:其中逻辑非属于单元运算符,且只能用于 boolean 类型变量
// 逻辑运算符
public class Bo0leanLogic {
public static void main(String[] args) {
boolean a = true, b = true;
boolean c = false;
// 逻辑与
System.out.println(a & b); // >> true
System.out.println(a & c); // >> false
// 逻辑或
System.out.println(a | b); // >> true
System.out.println(a | c); // >> true
// 逻辑异或
System.out.println(a ^ b); // >> false
System.out.println(a ^ c); // >> true
// 逻辑非
System.out.println(!a); // >> false
System.out.println(!b); // >> false
}
}
拓展:
短路逻辑运算符
- 当使用短路逻辑运算符的时候,只要第一个表达式的结果为 false ,那么结果就是 false,程序不会去对第二个表达式再做判断了。
- 这样做的好处是可以节省,运算时间、空间,提高程序运行效率
- 其中包括 &&、||
- 下面代码中只演示了短路逻辑与,并没有演示短路逻辑或。两种运算符的短路用法是一样的,有兴趣的小伙伴可以自己敲一下试试
// 短路逻辑与实例
public class ShortBoolean {
public static void main(String[] args) {
int a = 1;
int b = 2;
int c = 0;
boolean d = a > b && (c = a + 2) > b;
// 条件1 && 条件2
// 条件1若为false,条件2就不会执行了
System.out.println("短路逻辑与 c :" + c);
boolean e = a > b & (c = a + 2) > b;
// 条件1 && 条件2
// 条件1若为false,条件2还会执行
System.out.println("逻辑与 c :" + c);
System.out.println("d:" + d);
System.out.println("e:" + e);
}
}
// >> 短路逻辑与 c :0
// >> 逻辑与 c :3
// >> d:false
// >> e:false
位运算符
- 位运算符是专门针对内存中的二进制数据进行运算的一种运算符
- 二进制是由 0 1 组成,其中每一个数子所占的位置称为位,在进行位逻辑运算时就会对比相同位置上的数字计算。
位逻辑运算符
符号 | 运算方式 | 结果 |
---|---|---|
& | 0010 & 0011 | 0010 |
| | 0010 | 0011 | 0011 |
^ | 0010 ^ 0011 | 0001 |
~ | 0010 | 1101 |
- Java 中二进制最高位是符号位,【0】表示正,【1】表示负,其余位表示数值的大小
移位运算符
符号 | 运算方式 | 结果 |
---|---|---|
<< | 0 0011 1111 << 1 | 0 0111 1110 |
>> | 1 0011 1111 >> 1 | 1 1001 1111 |
>>> | 1 0011 1111 >>> 1 | 0 1001 1111 |
注 :<< 1 ,意思是,左移一位
拓展:
三元运算符
- 前面说了那么多的两元运算符,一个单元运算符,下面说一下三元运算符。
- 顾名思义三元运算符,就是要有三个数或者说三个表达式凑在一起,然后使用固定的语法格式书写,最后得到一个结果。
- 如下面代码:
// 三元运算符
public class ThreeOperator {
public static void main(String[] args) {
int a = 2, b = 5; // 声明两个 int类型变量
int c = a > b ? a : b;
// 条件 ? 返回值a : 返回值b
// 条件如果是 true 就返回 a 的值,如果条件为 false 就返回 b 的值
System.out.println(c);
}
}
// >> 5
拓展知识
String 类型
- 文章前面有提到字符串,但一直没有详细讲解,是因为与我们这篇文章的主题【基本数据类型和运算符】没什么关系的原因。但是,在测试用例中怎么都还是绕不开 String 类型的字符串。。。所以在此部分,我们简单说一下,不至于让大家看不懂文章中的代码里都写得啥,哈哈~
- 使用关键字 String 声明得变量是为字符串类型得变量,变量赋值通过 “” 双引号包括内容,表示这是段字符串。
- System.out.println() 向控制台输出,可以直接使用双引号包括字符输出字符串内容
- 字符串得拼接规则,将通过代码来演示
- 同时在字符串中有时还会用到转义符,在思维导图中我们有详细得列出了 8 种转义符。这些转义符都是在 字符或者字符串 类型中使用,就像我们使用doc文档编辑文字,偶尔需要换行、退格等操作,在我们编辑的代码并不是doc文档没有给我们内置这些操作,这时就需要转义符来帮助我们了。文中就不在一一演示了,有兴趣的可以自己去敲代码去尝试
public class StringAddPrimer {
public static void main(String[] args) {
int a = 3;
int b = 5;
String str1 = "将数字的字符拼接到字符串中:" + a;
String str2 = a + b + "加法从左到右运算"; // a + b 运算后的结果转化为字符在与字符串拼接;
String str3 = "加法从左到右运算" + a + b ; // 字符串与 a 拼接,再与 b 拼接,所以 a + b 没有运算;
String str4 = "可以使用括号改变运算顺序" + (a + b); // 这样就先运算 a + b,后与字符串拼接了;
String str5 = "可使用空字符串将两个变量分开" + a + "" + b; // 看似与 str2 一致,实际改变了运算结果。
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
System.out.println(str4);
System.out.println(str5);
}
}
// >> 将数字的字符拼接到字符串中:3
// >> 8加法从左到右运算
// >> 加法从左到右运算35
// >> 可以使用括号改变运算顺序8
// >> 可使用空字符串将两个变量分开35
自增和自减
- a++;
- 在 Java 中上述表达式,等同于 a = a + 1;
- 所以我们将,++ 或者 – 称为自增、自减操作。
- 不过 ++ 或 – 在变量前后分别有不同的运算顺序,下面通过代码来演示
public class Test {
public static void main(String[] args) {
int i = 10;
int j = 10;
i++; // 单独使用
System.out.println("i:" + i);
++j; // 单独使用
System.out.println("j:" + j);
int x = 10;
int y = x++; // 赋值运算,++在后边,所以是使用x原来的值赋值给y,x本身自增1
System.out.println("x:" + x + ", y:" + y);
int m = 10;
int n = ++m; // 赋值运算,++在前边,所以是使用m自增后的值赋值给n,m本身自增1
System.out.println("m:" + m + ", m:" + m);
}
}
// >> i:11
// >> j:11
// >> x:11, y:10
// >> m:11, m:11
本篇小结
- 初步接触了 Java语言
- 学习了 Java 的 8 种基本数据类型
- 学习了基本数据类型之间的转换
- 学习了 Java 中的运算符,有基本运算符、布尔运算符两大类
- 逻辑运算符的掌握还需要多加练习,需对二进制及进制转换多加了解~
文章中若是有什么不对的地方,欢迎大家指出纠错,共同进步!!
感谢,每一位认真阅读到这里的少侠!来个手滑三联吧,不迷路~
下期见,等你哟~