Java 以前自学过一写,现在工作了,时间太久有一些知识都遗忘了,今天开始就更新 Java 了,想着把之前的 Java 基础知识捡起来;从最基础的开始,打好 Java 基础,便于以后复习。也欢迎大家跟我一起复习。
话不多说,先看一张图
计算机是一种现代化的电子设备,它能够接受、存储、处理和输出数据。计算机由硬件和软件两部分组成,硬件包括中央处理器(CPU)、内存、硬盘、显示器、键盘、鼠标等部件,软件则包括系统软件和应用软件。计算机可以进行各种操作,如文字处理、图形设计、音视频播放、游戏等,并且可以通过网络连接进行通信和数据交换。计算机技术的发展对人类社会的影响非常深远,它已经成为现代化社会中不可或缺的一部分。
硬件是计算机系统的物理部分,主要包括以下组件:
还有其他硬件组件,如声卡、网卡、显卡、光驱、散热器等。这些硬件组件共同工作,使计算机能够完成各种任务。
计算机性能主要由以下几个部件决定:
这些部件共同工作,决定着计算机的性能和稳定性。
Java是一种计算机编程语言。
所谓计算机编程语言,就是人们可以使用编程语言对计算机下达命令,让计算机完成人们需要的功能。
TIOBE 排行榜是根据互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎(如 Google、Bing、Yahoo!)以及 Wikipedia、Amazon、YouTube 和 Baidu 等统计出的排名数据。
计算机语言走势
Java 诞生于 SUN(Stanford University Network),09 年 SUN 被 Oracle(甲骨文)收购。
Java 之父是詹姆斯。高斯林 (James Gosling)。
1996 年发布 JDK1.0 版。
目前最新的版本是 Java17。我们学习的 Java8。
将 Java 取名的是 Sun 公司的马克 奥颇门(Mark Opperman)。马克 奥颇门是在一家咖啡店与同事品尝咖啡时得到灵感的。Java 是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。国外的许多咖啡店用 Java 来命名或宣传,以彰显其咖啡的品质。Java 语言中的许多库类名称,多与咖啡有关,如 JavaBeans(咖啡豆)、NetBeans(网络豆)以及 ObjectBeans (对象豆)等等。Java 使 Sun 市值大升,一度超过 2 千亿美元。所有的网络巨头公司为之一振,IBM、HP、微软为 Java 配置了专门的开发团队,全球几百万软件工程师眷顾于 Java,着迷于 Java。1982 年 Sun 公司成立。1986 年 Sun 公司上市。1995 年 Sun 公司推出著名的 Java 编程语言。Sun 公司的位置非常像微机争霸战中的苹果公司。它有自己成套的硬件和操作系统,但是它缺乏应用软件。2001 年 “9.11” 以前,Sun 公司市值超过 1000 亿美元;此后,互联网泡沫破裂,硬件需求大幅减少,它的市值在一个月之内跌幅超过 90%。SUN 公司的成长用了 20 年,而衰落只用了 1 年!
发行版本 | 发行时间 | 备注 |
---|---|---|
Java | 1995.05.23 | Sun 公司在 Sun world 会议上正式发布 Java 和 HotJava 浏览器 |
Java 1.0 | 1996.01.23 | Sun 公司发布了 Java 的第一个开发工具包 |
Java 1.1 | 1997.02.19 | |
Java 1.2 | 1998.12.08 | 拆分成:J2SE(标准版)、J2EE(企业版)、J2ME(小型版) |
Java 1.3 | 2000.05.08 | |
Java1.4 | 2004.02.06 | |
Java 5.0 | 2004.09.30 | ①版本号从 1.4 直接更新至 5.0;②平台更名为 JavaSE、JavaEE、JavaME |
Java 6.0 | 2006.12.11 | 2009.04.20 Oracle 宣布收购 SUN 公司 |
Java 7.0 | 2011.07.02 | |
Java 8.0 | 2014.03.18 | |
Java 9.0 | 2017.09.22 | ①每半年更新一次;②Java 9.0 开始不再支持 windows 32 位系统 |
Java 10.0 | 2018.03.21 | |
Java 11.0 | 2018.09.25 | JDK 安装包取消独立 JRE 安装包,长期支持版本 |
Java 12.0 | 2019.03.19 | |
Java 13.0 | 2019.9.18 | |
Java 14.0 | 2020.3.17 | |
Java 15.0 | 2020.9 | |
Java16.0 | 2021.3 | |
Java17.0 | 2021.9 | 最新的长期支持版本 |
不是,因为在每个领域都有更合适的编程语言。
一句话概括,能留在排行榜之上的语言,都是好的语言,在其所在的领域能做到最好。
(1)优点
高内聚
, 低耦合
的标准。(2)缺点
根据 2020 年 IDC(Internet Data Center 互联网数据中心)的最新报告《Java 迎来 25 岁》,超过 900 万的开发人员代表全球 69% 的全职开发人员使用 Java—— 比其他任何语言都多。
Java 是目前应用最为广泛的软件开发平台之一。 随着 Java 以及 Java 社区的不断壮大,Java 也早已不再是简简单单的一门计算机语言了,它更是一个平台、一种文化、一个社区。
作为一个平台, Java 虚拟机扮演着举足轻重的作用。除了 Java 语言,任何一种能够被编译成字节码的计算机语言都属于 Java 这个平台。Groovy、Scala、 JRuby、Kotlin 等都是 Java 平台的一部分,它们依赖于 Java 虚拟机,同时,Java 平台也因为它们变得更加丰富多彩。
作为一种文化, Java 几乎成为了 “开源” 的代名词。在 Java 程序中,有着数不清的开源软件和框架。如 Tomcat、Struts, Hibernate, Spring,MyBatis 等。就连 JDK 和 JVM 自身也有不少开源的实现,如 OpenJDK、Apache Harmony。可以说,“共享” 的精神在 Java 世界里体现得淋漓尽致。
作为一个社区, Java 拥有全世界最多的技术拥护者和开源社区支持,有数不清的论坛和资料。从桌面应用软件、嵌入式开发到企业级应用、后台服务器、中间件,都可以看到 Java 的身影。其应用形式之复杂、参与人数之众多也令人咋舌。可以说,Java 社区已经俨然成为了一个良好而庞大的生态系统。其实这才是 Java 最大的优势和财富。
很多时候,我们写的程序可能要在多个操作系统运行,这个时候就要求我们的程序需要在尽可能不改动的情况下完实现这个目标。不同的语言实现跨平台的方式不同。Java 语言实现跨平台是建立在 “虚拟机” 基础之上的。
在 Java 出现之前,最为流行的编程语言是 C 和 C++。如果我们想要在一台使用 x86_64 指令集的 CPU 的机器(如个人 PC)上运行一个 C 语言程序,就需要编写一个将 C 语言翻译成 x86_64 汇编语言的编译器。如果想要在一台使用 arm 指令集的 CPU 的机器(如苹果手机)上,运行一个 C 语言程序,同样需要编写一个将 C 语言翻译成 arm 汇编语言的编译器。这样严重影响了 C 程序的跨平台性,因为针对特定的指令集开发编译器是一个难度非常大的工作。
那么 Java 是如何解决这个问题的呢?Java 设计了一套简洁的虚拟指令集,也就是字节码。如果我们想要在一台机器上运行 Java 程序,只需要将 Java 程序编译成字节码就可以了。编写一个将 Java 程序翻译成 Java 字节码的编译器,比起编写一个将 Java 程序翻译成 x86_64 指令集的编译器来说,要简单得多。可是这里产生了一个问题,难道我们的机器可以直接执行字节码这样的虚拟指令集吗?当然是不能的。我们需要针对不同的指令集,开发对应的字节码解释器。这个工作同样比较简单。
Java 虚拟机(JVM,Java Virtual Machine)是由软件技术模拟出计算机运行的一个虚拟的计算机,它负责解释执行字节码指令集。也就是说,只要一台机器可以运行 Java 的虚拟机,那么就能运行 Java 语言编写的程序。而不同的平台,需要安装不同的 Java 虚拟机程序。那么我们编写完 Java 程序之后,需要先将.java 的源文件编译为.class 的字节码文件,然后在 Java 虚拟机中来执行这些字节码文件。
Java 虚拟机的设计不仅仅解决了 Java 程序跨平台的问题,同时解决了很多语言的跨平台问题。
JVM
和运行时所需要的 核心类库
。JRE
和开发人员使用的工具。我们想要运行一个已有的 Java 程序,那么只需安装 JRE
即可。
我们想要开发一个全新的 Java 程序,那么必须安装 JDK
,其内部包含 JRE
。
对于 dos 命令,它不像 Linux 命令那样被我们频繁的使用,这就造成我们很容易遗忘;其实很多的 dos 命令和 Linux 命令是相通的;今天就先带大家重拾常用的 dos 命令;面对零基础的同学进行详解!
1、怎么打开 DOS 命令窗口 ⭐️win 键 + r (组合键):可以打开 “运行” 窗口 ⭐️在运行窗口文本框中输入: cmd,然后回车 2、什么是 DOS 命令呢? ⭐️在 DOS 命令窗口中才可以输入并执行 DOS 命令。 ⭐️在最初的 windows 计算机中没有图形界面的,只有 DOS 命令窗口。也就是说通过执行 DOS 命令窗口可以完全完成文件的新建、编辑、保存、删除等一系列操作。 3、默认情况下 DOS 命令窗口打开之后,定位的位置是哪里? ⭐️C:\Users\shark-gao > 这是我电脑默认的当前路径 4、切换盘符? ⭐️直接输入盘符就行: c: 回车 d: 回车 ⭐️当切换到 D 盘根下了,那么当前路径就是:D:>,当前路径是当前所在的位置。 5、mkdir (md) abc(创建文件夹)创建一个目录,起名 abc;和 Linux 是一样的 6、创建文本文件:echo 123 > 111.txt;就可以把 123 内容追加到 111.txt 中,并会创建这个文本文件;Linux 特有 echo 追加内容的功能 7、删除目录:用 rmdir (rd),例如 rmdir abc 就会删除 abc 目录 ⭐️对于 rmdir 建议大家记全称,不然容易和 Linux 的删除目录 rmdir (rm) 搞混 8、del 命令,删除一个或者多个文本文件 ⭐️删除 test.c 文件:del test.c ⭐️删除所有.c 结尾的文本文件,支持模糊匹配:del *.c 9、dir 查看当前目录下的文件和目录 ⭐️比如:dir/b > list.xls 就可以把当前目录下的文件名字追加到 excel 表格当中 10、切换目录?(非常重要,必须掌握) ⭐️使用 cd 命令来完成目录的切换:cd 是什么含义?change directory(改变目录) ⭐️cd 命令怎么用,语法格式是什么? cd 路径 ⭐️路径在 windows 系统上包括:相对路径和绝对路径。 ⭐️什么是相对路径呢? 一定要注意,从路径形式上来看,相对路径是一定不会以盘符开始的。 相对路径:相对路径一定是相对于当前所在 “位置” 而言的。 相对路径是相对于当前而言,从当前所在的位置作为起点。 死记:相对路径一定是从当前位置作为起点开始找。 ⭐️什么是绝对路径呢? 在 windows 操作系统中凡是路径起点是盘符的都是绝对路径, 例如:C:\Users\shark-gao> ⭐️注意: cd … 回到上级路径。 cd \ 直接回到根路径。 . 一个点,代表当前路径。 11、cls 清屏 12、exit 退出 DOS 命令窗口。 13、怎么查看本机的 IP 地址? ⭐️什么是 IP 地址?有什么用呢? ⭐️A 计算机在网络当中要想定位到(连接到)B 计算机,那么必须要先知道 B 计算机的 IP 地址,IP 地址也可以看做计算机在同一个网络当中的身份证号(唯一标识)。IP 地址就相当于电话号码是一个意思。 ⭐️ipconfig(ip 地址的配置信息)注意 Linux 下的是 ifconfig。 ⭐️ipconfig /all 该命令后面添加一个 /all 参数可以查看更详细的网络信息 这个详细信息中包括网卡 的物理地址 (Mac 地址),例如:70-8B-CD-A7-BA-25 14、怎么查看两台计算机是否可以正常通信? ping 命令 ⭐️语法格式:ping IP 地址或者 ping 域名 ⭐️例如:ping 61.135.169.121 或者 ping www.baidu.com,一般默认 ping 四次终止。 Linux 不加参数会一直 ping 下去,ctrl+c 终止。 ⭐️在一个 DOS 命令窗口中如果有一个命令一直在执行,想强行终止怎么办? ⭐️例如:ping www.baidu.com -t,加上 - t 参数,就会一直 ping 下去,一直 ping 的目的可以查看网络是否稳定。 http://www.baidu.com 可以打开百度(这种方式比较方便,域名更容易记忆) http://61.135.169.121 也可以打开百度 域名底层最终还是会被解析成 IP 地址的形式。还是 ctrl+c 终止!
Java
,单击进入,如图所示:
展示的是最新 Java 版本,例如 Java17。单击 Download Java,然后选择具体的版本下载。
选择 Accept License Agreement,
注册或登录后下载
jdk-8u202-windows-x64.exe
文件,并单击 下一步
,如图所示:
公共JRE前的下拉列表
,选择 此功能将不可用
如图所示:
D:\develop\Java\jdk1.8.0_202\
,并单击确定,如图所示:
为什么配置 path?
希望在命令行使用 javac.exe 等工具时,任意目录下都可以找到这个工具所在的目录。
例如:我们在 C:\Users\shark-gao 目录下使用 java 命令,结果如下:
我们在 JDK 的安装目录的 bin 目录下使用 java 命令,结果如下:
我们不可能每次使用 java.exe
, javac.exe
等工具的时候都进入到 JDK
的安装目录下,太麻烦了。我们希望在任意目录下都可以使用 JDK 的 bin 目录的开发工具,因此我们需要告诉操作系统去哪里找这些开发工具,这就需要配置 path 环境变量。
右键
,选择 属性
,如图所示:
高级
选项卡,单击 环境变量
,如图所示:
JAVA_HOME
这个环境变量
系统变量
中,选中 Path
环境变量, 双击
或者 点击编辑
,如图所示:
%JAVA_HOME%\bin
,将变量引入全局
javac
命令,运行成功。
JDK 安装完毕,可以开发我们第一个 Java 程序了。
Java 程序开发三步骤:编写、编译、运行。
E:\exer_code\Java2023\chapter01_JavaGrammar\src\main\java
目录下新建文本文件,完整的文件名修改为 HelloWorld.java
,其中文件名为 HelloWorld
,后缀名必须为 .java
。
保存
:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
友情提示: 每个字母和符号必须与示例代码一模一样。
第一个 HelloWord
源程序就编写完成了,但是这个文件是程序员编写的,JVM 是看不懂的,也就不能运行,因此我们必须将编写好的 Java源文件
编译成 JVM 可以看懂的 字节码文件
,也就是 .class
文件。
在 DOS 命令行中,进入 E:\exer_code\Java2023\chapter01_JavaGrammar\src\main\java
目录,使用 javac
命令进行编译。
方式一:使用文件资源管理器打开 E:\exer_code\Java2023\chapter01_JavaGrammar\src\main\java
目录,然后在地址栏输入 cmd。
命令:
javac Java源文件名.后缀名
举例:
javac HelloWorld.java
编译成功后,命令行没有任何提示。打开 E:\exer_code\Java2023\chapter01_JavaGrammar
目录,发现产生了一个新的文件 HelloWorld.class
,该文件就是编译后的文件,是 Java 的可运行文件,称为字节码文件,有了字节码文件,就可以运行程序了。
Java 源文件的编译工具
javac.exe
在 DOS 命令行中,在字节码文件目录下,使用 java
命令进行运行。
命令:
java 主类名字
主类是指包含 main 方法的类,main 方法是 Java 程序的入口:
public static void main(String[] args){
}
举例:
java HelloWorld
友情提示: java HelloWord 不要写 不要写 不要写 .class
如果有包名的话一定加上包名
,否则会显示找不到主类
Java 字节码文件的运行工具:java.exe
结构:
类{
方法{
语句;
}
}
格式:
(1)每一级缩进一个 Tab 键
(2){} 的左半部分在行尾,右半部分单独一行,与和它成对的 "{" 的行首对齐
当 cmd 命令行窗口的字符编码与.java 源文件的字符编码不一致,如何解决?
解决方案:
在使用javac命令式,可以指定源文件的字符编码
javac -encoding utf-8 HelloWorld.java
(1)源文件名:
在Windows操作系统中.java的源文件名不区分大小写,我们建议大家养成区分大小写的习惯。
(2)字节码文件名与类名
严格区分大小写
(3)代码中
严格区分大小写
(1)源文件名是否必须与类名一致? public
呢?
如果这个类不是public,那么源文件名可以和类名不一致。但是不便于代码维护。
如果这个类是public,那么要求源文件名必须与类名一致。否则编译报错。
我们建议大家,不管是否是public,都与源文件名保持一致,而且一个源文件尽量只写一个类,目的是为了好维护。
(2)一个源文件中是否可以有多个类? public
呢?
一个源文件中可以有多个类,编译后会生成多个.class字节码文件。
但是一个源文件只能有一个public的类。
(3)main 方法必须在 public
的类中吗?
不是。
但是后面写代码时,基本上main方法(主方法)习惯上都在public类中。
包括:姓名,年龄,性别,家庭住址,联系电话等
public class PersonalInfo {
public static void main(String[] args) {
System.out.println("姓名:张三");
System.out.println("年龄:25");
System.out.println("性别:男");
System.out.println("家庭住址:北京市海淀区");
System.out.println("联系电话:13888888888");
}
}
public class Diamond {
public static void main(String[] args) {
System.out.println(" * ");
System.out.println(" *** ");
System.out.println(" ***** ");
System.out.println(" ******* ");
System.out.println("*********");
System.out.println(" ******* ");
System.out.println(" ***** ");
System.out.println(" *** ");
System.out.println(" * ");
}
}
public class ProductList {
public static void main(String[] args) {
System.out.println("Product\t\tPrice\tStock");
System.out.println("Apple\t\t3.5\t10");
System.out.println("Banana\t\t2.5\t20");
System.out.println("Orange\t\t4.0\t15");
System.out.println("Watermelon\t5.0\t5");
System.out.println("Grape\t\t6.0\t8");
}
}
Java 既不是纯解释型语言,也不是纯编译型语言,而是一种混合型语言。Java 源代码首先会被编译成字节码文件,字节码文件不是针对特定的硬件和操作系统而编译的,而是针对 Java 虚拟机(JVM)而编译的。字节码文件在运行时由 JVM 解释执行,JVM 会将字节码文件转换为机器码并执行,这样就可以实现跨平台性,使得 Java 程序可以在任何安装了 JVM 的计算机上运行。因此,Java 是一种混合型语言,它既具备编译型语言的高效性,又具备解释型语言的跨平台性。
Java 是一种基于虚拟机的编程语言,它的跨平台性是通过 Java 虚拟机(JVM)实现的。Java 程序在编译时会被编译成字节码,而不是直接编译成机器语言。这些字节码可以在任何支持 Java 虚拟机的平台上运行,包括 Windows、Mac、Linux 等操作系统。 Java 虚拟机是一个抽象的计算机,它提供了一个独立于硬件平台的运行环境。当 Java 程序在不同的操作系统上运行时,JVM 会将字节码解释成机器码,从而实现跨平台运行。这种机制保证了 Java 程序在不同平台上的一致性和可移植性。 总的来说,Java 的跨平台性是通过将程序编译成字节码,再由 Java 虚拟机解释执行实现的。这种机制使得 Java 程序可以在不同平台上运行,无需重新编译。
Java 中的类路径(Classpath)是指 JVM 在搜索类文件(.class 文件)时所使用的路径。在 Java 中,当需要加载一个类时,JVM 会按照一定的顺序在类路径中查找该类的字节码文件。如果找到了该文件,则会加载该类并创建相应的对象。 类路径可以由多个路径组成,路径之间用分号(Windows 系统)或者冒号(Unix/Linux 系统)分隔。在 Java 中,类路径可以分为系统类路径和用户类路径。 系统类路径是 JVM 默认的类路径,它包含了 Java 运行环境中的核心类库和扩展类库。系统类路径可以通过系统属性 "java.class.path" 来获得。 用户类路径是用户自定义的类路径,它包含了用户自己编写的类文件和第三方库文件。用户类路径可以通过 "-classpath" 或 "-cp" 选项指定,也可以通过设置系统环境变量 CLASSPATH 来指定。 通常情况下,Java 程序的类文件都位于用户类路径中,而核心类库和扩展类库位于系统类路径中。在编写 Java 程序时,需要根据实际情况配置类路径,以确保程序能够正常运行。
Java 字节码不是机器码。Java 源代码在编译时会被编译成 Java 字节码(.class 文件),而不是直接编译成机器码。Java 字节码是一种中间代码,它是一种平台无关的二进制代码,可以在任何支持 Java 虚拟机(JVM)的平台上运行。 Java 字节码是由 Java 编译器生成的一种二进制文件,它包含了 Java 源代码编译后的中间代码,而不是机器码。Java 字节码可以被 JVM 解释执行,JVM 会将字节码解释成机器码,从而实现跨平台运行。 Java 字节码的优点是可以在不同平台上运行,而不需要重新编译。这种机制使得 Java 程序具有很强的可移植性和跨平台性。但是,由于 Java 字节码需要被 JVM 解释执行,因此 Java 程序的执行速度相对较慢。