Java概述
1.1 软件开发
- 程序
模拟现实世界,解决现实问题,使用 编程语言 编写的 指令 的集合
2.计算机编程语言
C 嵌入式开发(主要是硬件)
C 嵌入式开发(主要是硬件)
C# web开发(基于hjdb协议进行数据交互的网页等等).net平台
python 人工智能 数据分析和挖掘 也能做web开发
PHP 中小型web开发
java web开发(Android、大数据)
JavaScript 网页脚本(依赖于网页浏览器等等)语言
html不属于计算机编程语言,是超文本标记语言,不具备逻辑处理能力
1.2 开发环境搭建(idea和jdk)
1.2.1 环境变量配置 jdk8比较稳
java-home
1.2.2 JDK的安装目录介绍
目录名称 | 说明 |
bin | 该路径下存放了JDK的各种工具命令。javac和java就放在这个目录。 |
conf | 该路径下存放了JDK的相关配置文件。 |
include | 该路径下存放了一些平台特定的头文件。 |
jmods | 该路径下存放了JDK的各种模块。 |
legal | 该路径下存放了JDK各模块的授权文档。 |
lib | 该路径下存放了JDK工具的一些补充JAR包。 |
1.3 java基础入门
1.3.1 java简介
- Sun Microsystems于1995年推出的面向对象的程序设计语言,共同创始人的詹姆斯·高斯林(James Gosling)被誉为“Java之父”。
- 1996年发布JDK 1.0
1998年发布JDK 1.2
平台名称:J2SE(Stadard Edition)、J2EE(Enterprise Edition)、J2ME(Micro Edition)
2004年发布JDK 1.5 版本更名:Java 5.0
平台名称:Java SE、Java EE、Java ME
2006年发布Java 6.0
2009年被Oracle收购
2011年由Oracle发布Java 7.0
2014年由Oracle发布Java 8.0
2017年由Oracle发布Java 9.0
2019年由Oracle发布Java 14.0
2022年由Oracle发布Java 17.0
1.3.2 java语言特点
- 面向对象
- 跨平台(一处编译,到处执行)
Java语言跨平台原理Java程序并非是直接运行的,Java编译器将Java源程序编译成与平台无关的字节码文件(class文件),然后由Java虚拟机(JVM)对字节码文件解释执行。所以在不同的操作系统下,只需安装不
同的Java虚拟机即可实现java程序的跨平台。
- 安全性高
- 简单性
- 多线程
1.3.3 第一个java程序 (重点)
- 编写源代码
新建一个.java结尾文件
在文件中编写代码
- 编译源代码
在代码的文件夹上直接输入cmd进入dos窗口
输入 javac HelloWorld.java
- 运行程序
在DOS窗口中输入 java 类名
1.3.4 编程语言分类
- 编译型语言----将代码一次性编译成编译器能翻译的文件格式
- 解释型语言----逐行翻译逐行执行
- Java的执行机制。将源文件编译成字节码文件(平台中立文件.class),再将字节码文件进行解释执行。
1.3.5 java专有名词
JDK(Java Development Kit): Java开发工具包
JRE(Java Runtime Environment): Java运行时环境
JVM(Java Virtual Machine): Java虚拟机
1.3.6 Java编程规范(代码缩进 注释 类 包)
每一个层级的代码使用tab键(制表位)进行间隔–shift+tab键表示回退一个制表位
即为{} 结构,内容,每个{}里面有一个缩进
class one { public static void main(String[] args) { System.out.println("hello,java"); } }
- 注释
单行注释 // 注释内容 (一般用于变量,对一行代码的解释)
多行注释 /* 注释内容 */ (对一段代码的解释)
文档注释 /** 注释内容 */ (对整个类|方法的解释)
用public修饰的类必须和文件名完全一致 即 public class 文件唯一主类;
其他可以用class 修饰
一般一个文件一个类,一个public class就好
- 同一个源文件中可以定义多个类。
- 编译后,每个类都会生成独立的 .class文件。
- 一个类中,只能有一个主方法,每个类都可以有自己的主方法。
- public修饰的类称为公开类,要求类名必须与文件名称完全相同,包括大小写。
- 一个源文件中,只能有一个公开类。
建议:目前学习阶段,一个java文件就写一个java类,且用public修饰
- 作用:类似于文件夹,用于管理字节码(.class)文件。
- 语法:package 包名。
- 位置:必须写在源文件的第一行。
- 采用域名倒置的规则:www.baidu.com -> com.baidu.xxx。
- 例如:com.qfedu.xxx
1.4 计算机基础
1.4.1 计算机单位
8 bit(位) —1024 Byte(字节) —1024 KB(千字节)—1024 MB (兆)—1024 GB —1024 TB
PB EB ZB BB DB CB XB
别苦闷国土配额资源不能动次序
1.4.2 常用的DOS命令
DOS窗口就是Windows操作系统的前身
打开DOS窗口:win+R 再输入cmd
命令 | 含义 |
C: D: E: | 切换盘符 |
cd 目录路径 | 目录切换 |
cd. | 表示当前目录 |
cd… | 表示上一级目录 |
cd/ | 回到当前盘符的根目录 |
tab | 自动补全(Linux Windows…) |
上下键 | 快速查看之前输入过的命令 |
ipconfig | 查看当前电脑的ip地址 |
ctrl + C | 强制停止当前命令(Linux Windows…) |
ping ip地址 | 测试连接是否与目标主机互通 |
mkdir 文件夹名称 | 创建文件夹 |
rmdir 文件夹名册 | 删除文件夹 |
rmdir 文件夹名册 | 删除文件夹 |
echo 内容>文件名 | 创建文件并写入内容 |
echo 内容>>文件名 | 创建文件并写入内容(可追加) |
calc | 打开计算器 |
notepad | 打开记事本 |
1.4.3 计算机中的进制
- 二进制(0,1)
- 十进制(0,9)
- 八进制
- 十六进制 0x…
计算机的硬件系统通常由五大部件构成,包括:运算器、控制器、存储器、输入设备和输出设备。
其中,运算器和控制器放在一起就是我们通常所说的中央处理器,它的功能是执行各种运算和控制指令以及处理计算机软件中的数据。
我们通常所说的程序实际上就是指令的集合,我们写程序就是将一系列的指令按照某种方式组织到一起,然后通过这些指令去控制计算机做我们想让它做的事情。
我们使用的计算机虽然器件做工越来越精密,处理能力越来越强大,但究其本质来说仍然属于“冯•诺依曼结构”的计算机。
“冯•诺依曼结构”有两个关键点,一是提出了将存储设备与中央处理器分开,二是提出了将数据以二进制
方式编码。
1.4.3.1 二进制
组成 0,1 进制规则逢二进一
计算机使用二进制形式就可以表示数据的存储
十进制 0 ----》 存储到计算机中 —》 二进制表示 00
十进制 1 ----》 存储到计算机中 —》 二进制表示 01
十进制 2 ----》 存储到计算机中 —》 二进制表示 01+1
----》 02(逢二进一,向前进位,原来位数清零) ---》 10
十进制 3 ----》 存储到计算机中 —》 二进制表示 11
十进制 4 ----》 存储到计算机中 —》 二进制表示 11 +1
----》 12(逢二进一,向前进位,原来位数清零) —》 1+1 0 —》20 ----》 100
… 最后一位+1 逢二进一向前计算操作
1.4.3.2 十进制
组成:0,1,2,3,4,5,6,7,8,9 --》十个数字 进制规则逢十进一
例如 9+1 —》个位满足了逢十进一的规则 —》 个位清零十位进一 10
1.4.3.3 二进制和十进制之间的互相转换操作
- 二进制转换为十进制
说明:如果将一个二进制转换为一个十进制,首先将二进制按照从右向左进行位置查位操作,最右侧第一位是0位置,依次递增,当前位数是计算的次方,计算的几进制就是几进制的次方法进行一求和相加
8421码(BCD):
二进制码与是十进制编码之间存在一个固定计算结果,二进制如果值是1就可以得到一个固定十进制
- 二进制快速转十进制
如果二进制数据中有数据为1必然要计算结果值,所以将最后4位二进制看做是满1的状态
即 1 1 1 1 通过这4个1得到一个计算公式 对应十进制
8 4 2 1 (十进制)
在第四位之间在多一个1怎么计算 ? 根据得到十进制数据的规则是8 4 2 1 每一个数字都是后一个数字的2位,依据这个规则就可以推断出之后数据值 所以第四位之前的1 得到结果是 8*2的结果即16
110110(二进制) —》 使用8421理论转化为 ----》 十进制 —》32+ 16 + 4+ 2 —》54
十进制转换为二进制
公式:使用十进制对2取余 直到商为0停止,按照从下至上读取余数就是二进制
知道的第一个问题:在Java整数除以整数只能得到整数
需求:根据上图中的操作方式将 十进制 4 、5 、6 、7 、8 、9 、10 转换为二进制 ,各位要观察计算结果与过程,是否可以发现什么?
知道的第二个问题:通过十进制与二进制的转换计算中可以发现,偶数对2求余结果为0,奇数对2求余结果为1,通过这个结果就可以在代码中进行判断了 如果确定某个数据是否是奇数或偶数的时候只需要使用当前数据对2求余看余数是否等于0或1就可以知道是否是奇数还是偶数了
1.4.3.4 八进制和十六进制
- 八进制
八进制的目的是为了方便记忆二进制使用
例如:1024(十进制) ----》 转换为二进制 ----》 10000000000(二进制)----》 因为二进制太长了所以转换为八进制记忆与计算 ----》 2000(八进制)
PS:八进制中没有十进制的概念,所以不要讲2000(不要读为两千,读为二零零零)
八进制的组成: 0,1,2,3,4,5,6,7 进制规则 逢八进一
例如 八进制结果为 7 向7进行加1操作 —》 7+1 = 8满足了进位规则 所以得到就是 —》 10
- 二进制与八进制之间转换计算
二进制快速转八进制
将一个八进制转换为一个二进制如何转换将八进制按照从右向左逐位拆分,每一位求二进制组合即可
例如: 17(八进制) —》 二进制形式
—》从右向左逐位拆分 1 和 7
—》 对拆分的每一位求对应的二进制 1对应二进制 1 7 对应的二进制111
—》将得到计算结果组合在一起(有一个原则,如果计算结果不足三位,补0操作)
—》因为7得到111满足了三位不需要补0 1得到结果是一个1不足三位,所以补0到三位
---》最终得到计算结果是 001111(二进制)
1
将一个二进制转换为八进制,讲二进制按照从右向左逐位拆分,每三位一段,补足三位左补0,求其对应十进制计算,就可以得到八进制结果了
例如: 10101011(二进制) —》 八进制
—》 从右向左每三位一段,不足三位的左 补0
—》 拆分之后的二进制 010 101 011
—》 求二进制对应的十进制结果 组合在一起就是 八进制 ----》 253
PS:某些情况之下,会使用八进制的形式表示 IP地址
因为IP地址正好是3位并且范围最大就是255
十六进制(了解)
PS:在实际开发中是看不到十六进制,但是十六进制是表示数据在**“真实”**内存中,存储位置表示(位置),这个位置是数据在内存中存储的,实际在代码中对数据操作,都是底层通过位置完成,所以我们要了解十六进制的组成和形式
十六进制的组成: 0~9,a(10),b(11),c(12),d(13),e(14),f(15)
PS: 基础数字是0到9是个数字,后续的10到15分别使用【a、b、c、d、e、f】来代替
十六进制的规则: 逢十六进一
十六进制与二进制之间互相转换
二进制快速转十六进制
二进制转换为十六进制,首先将二进制按照从右向左,每四位一段,不足四位补0操作,求二进制对应十进制形式组合在一起即可(当计算十进制结果为【1015之间的时候需要使用(af替换)】)
例如: 11100111100(二进制) —》 转换为对应的十六进制
---》 按照从右向左规则,每四位一段,不足四位左补0 0111 0011 1100
—》 计算二进制对应十进制即可(当计算十进制结果为【1015之间的时候需要使用(af替换)】)
73c(十六进制) 因为最后一个 1100 计算结果结果是8+4 = 12,12在十六进制中需要使用(a~f代替)
12对应字母是c所以最终结果12的展示形式就是c
十六进制转换为二进制: 首先将十六进制按照从右向左,逐位断开,计算每一个位对应二进制形式(如果遇到十六进制使用【af】表示,使用对应【1015】替换计算即可),让后将得到二进制组合在一起,(组合时如果二进制不足四位,左补0)
例如: af7(十六进制) ----》 转换为对应二进制
—》 按照从右向左规则,逐位断开
a f 7
---》 计算每一个位对应二进制形式(如果遇到十六进制使用【a~f】表示,使用对应【10~15】替换计算即可)
计算中出现a和f分别对应十进制是 10和15 只需要对这个两个十进制求二进制形式即可
10 15 7
—》求十进制对应二进制形式,但是得到结果不足四位,左补0
1010 1111 0111
—》 组合在一起 —》 101011110111
十六进制对于我们开发而言,主要的目的是表示数据在真实内存地址中存储的位置,在开发过程
中,打印某个“引用类型”时,出现的是一个十六进制的值,这个值就是数据在存储中存储的地址
位置
1.4.4 原码、反码和补码
计算中存储数据都是以二进制形式继续进行存储了,存储数据在内存值是需要开辟空间
的,这个空间是存在一个大小
8bit(位) = 1byte(字节 K) ---》8位是指8个二进制 1024byte(k) = 1KB 1024Kb = 1MB 1024MB = 1GB 1024GB = 1TB 1024TB = 1PB
计算机存储数据是要开辟空间,计算中最小开辟空间单位是**“字节”**
PS:以下的计算为了方便计算结果,都以1个字节在内存中存储 即8位
1.4.4.1 原码
原码是可以直观的观察出数据的大小,数据在内存那种如何表示原码
即使用二进制的形式表示数据的存储原码,最高位即左侧第一位使用【0】表示正数,【1】表示负数,其余位数表示数据的大小
1字节 等于 8位 即 0000 0000(8 位二进制)
例如: 正数7 和 负数 7 使用原码进行展示
正数7 ----》 使用 8位进行表示数据 0000 0000
正数原码的规则就是,左侧最高位符号位使用0表示正数 —》 0 000 0000
剩余的位数表示7这个数值的大小, 使用剩余的7个0表示7的数值 —》 0 000 0111(
7的原码)
负数7 ----》 使用 8位进行表示数据 0000 0000
负数原码的规则就是,左侧最高位符号位使用1表示负数 —》 1 000 0000
剩余的位数表示7这个数值的大小,使用剩余的7个0表示7的数值 —》 1000 0111(-7的原码)
思考:计算机是否是以原码的形式进行数据存储的?
使用原码存储1和-1的,并进行计算,查看结果
正数1的原码 0 000 0001
负数1的原码 1 000 0001
+
/-----------------------------------------
1 000 0010 —》 结果出来 是 -2
计算中是不可以使用原码的形式进行数据存储的是,会出现数据计算错误
1.4.4.2 反码
正数的反码和原码是一样的,负数的反码是在原码的基础之上进行计算得来的
负数的反码原则:符号位不动(不改变),其他位进行取反操作(1变0,0变1)
思考:计算机是否是以反码的形式进行数据存储的?
使用原码存储1和-1的,并进行计算,查看结果
负数1的原码 1 000 0001 —》在这个基础上计算反码
负数1的反码 1 111 1110
+
/------------------------------------------------
1 111 1111 ---》 结果出来 是 -255(不看符号位)/ -127(看符号位)
计算中是不可以使用原码和反码的形式进行数据存储的是,会出现数据计算错误
1.4.4.3 补码
正数的补码和原码、反码都是一样的【名词:三位一体】
负数的补码是在反码基础上进行+1操作
思考:计算机是否是以补码的形式进行数据存储的?
使用原码存储1和-1的,并进行计算,查看结果
正数1的原码和反码、补码 0 000 0001
负数1的原码 1 000 0001 —》在这个基础上计算反码
负数1的反码 1 111 1110 ----》在反码的基础上+1操作
负数1的补码 1 111 1111
1 0000 0000 ---》这个结果是0 ,1这个值会发生溢出操作(丢失不在存
储)
当前这个计算结果叫做理论值,理论值中1是存在的,但是在真实内存中存储是1会被舍去得到结果就是 0000 0000 即0 这个数据
计算中是以补码的形式进行数据的存储操作的