见《第一个阶段课程体系介绍.xmind》
Java是一种计算机编程语言。
所谓计算机编程语言,就是人们可以使用编程语言对计算机下达命令,让计算机完成人们需要的功能。
TIOBE排行榜是根据互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎(如Google、Bing、Yahoo!)以及Wikipedia、Amazon、YouTube和Baidu等统计出的排名数据。
计算机语言走势
Java诞生于SUN(Stanford University Network),09年SUN被Oracle(甲骨文)收购。
Java之父是詹姆斯.高斯林(James Gosling)。
1996年发布JDK1.0版。
目前最新的版本是Java18。我们学习的Java17。
将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 | ①每半年更新一次(3月、9月);②Java 9.0开始不再支持windows 32位系统 |
Java 10.0 | 2018.03.21 | |
Java 11.0 | 2018.09.25 | JDK安装包取消独立JRE安装包,长期支持版本 |
Java12-16 | 每半年更新一次 | |
Java17.0 | 2021.9 | 最新的长期支持版本 |
Java18.0 | 2022.3 | |
Java19.0 | 2022.9 |
虽然甲骨文刷Java版本号很积极,但开发者、编程者们实际上有些意兴阑珊。年初的统计显示,37%的开发者居然停留在Jav 8版本,这可是2014年3月发布的了,29%使用Java 11做开发,只有37%表示会考虑切换到Java 17 LTS(长期支持版)。按计划下一个LTS长期支持版会是Java 21。
不是,因为在每个领域都有更合适的编程语言。
C 语言无疑是现代计算机软件编程语言的王者,几乎所有的操作系统都是 C 语言写成的。C语言是面向过程的编程语言。
C++ 是面向对象的 C 语言,一直在不断的改进。为了与C兼容,C++被迫做出了很多重大的设计妥协,结果导致语言过分华丽,过分复杂。为了与C兼容,C++并没有采用自动内存管理的策略,从而丧失了修正C最严重问题的机会。另外C++的OO设计耦合度过高,导致组件之间出现很厚的粘合层,并且带来了严重的可维护性问题。C++的应用主要集中在GUI(图形化界面)、游戏和多媒体工具包方面,其他地方很少用到。
C#是.NET开发平台的主语言。.NET开发平台包括虚拟机CLR、公共类库以及编译工具等开发环境,它是Java语言强有力的竞争对手。但是.NET环境只有Windows有。
Visual Basic主要用于图形化界面程序的设计,目前也是基于.NET平台。
JavaScript 是能运行在浏览器中的语言,丰富的前端界面离不开 Javascript 的功劳。近年来的 Node.js 又在后端占有一席之地。
Python 用于系统管理,并通过高性能预编译的库,提供 API 来进行科学计算,文本处理等,是 Linux 必选的解释性语言。Python的应用方向主要是数据分析、人工智能和机器学习、网络爬虫、自动化测试、web开发、科学计算和统计等。Python的优势是语法简洁清晰,也具有丰富和强大的类库。但是Python更像是胶水语言,它通常用于将其他语言(尤其是C/C++)制作的各种模块轻松的联结在一起。而且Python的运行效率非常低。
PHP是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域。LAMP(Linux+Apache+MySQL+PHP)免费套装让很多创业公司可以实现快速低成本的搭建公司网站。虽然 PHP语言使用简单,但是一直有安全漏洞问题要解决。多线程支持不好,性能低下,代码不规范等问题。行业领跑者们从着眼未来考虑,在大数据、物联网、人工智能等方面的广泛应用前景下,对待PHP的重视程度就逐渐下降了。
Ruby 强于 DSL(领域特定语言),程序员可以定义丰富的语义来充分表达自己的思想。
Erlang 就是为分布式计算设计的,能保证在大规模并发访问的情况下,保持强壮和稳定性。
Go 语言内置了并发能力,可以编译成本地代码。当前新的网络相关项目,很大比例是由 Go 语言编写的,如 Docker、Kubernetes 等。
函数式编程有 Lisp,编写 iOS 程序有 Swift/Objective-C。
R的思想是:它可以提供一些集成的统计工具,但更大量的是它提供各种数学计算、统计计算的函数,从而使使用者能灵活机动的进行数据分析,甚至创造出符合需要的新的统计计算方法
SQL 是用于访问和处理关系型数据库的标准语言, 这类数据库包括:MySQL,Oracle, SQL Server, DB2, PostgreSQL,Sybase, Access 等等
一句话概括,能留在排行榜之上的语言,都是好的语言,在其所在的领域能做到最好。
(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
。
下载网址:www.oracle.com
下载步骤:
选择Accept License Agreement,
注册或登录后下载
安装步骤:
为什么配置path?
希望在命令行使用javac.exe等工具时,任意目录下都可以找到这个工具所在的目录。
例如:我们在C:\Users\Irene目录下使用java命令,结果如下:
我们在JDK的安装目录的bin目录下使用java命令,结果如下:
我们不可能每次使用java.exe,javac.exe等工具的时候都进入到JDK的安装目录下,太麻烦了。我们希望在任意目录下都可以使用JDK的bin目录的开发工具,因此我们需要告诉操作系统去哪里找这些开发工具,这就需要配置path环境变量。
步骤:
打开桌面上的计算机,进入后在左侧找到计算机
,单击鼠标右键
,选择属性
,如图所示:
选择高级系统设置
,如图所示:
在高级
选项卡,单击环境变量
,如图所示:
在系统变量
中,选中Path
环境变量,双击
或者点击编辑
,如图所示:
在变量值的最前面,键入D:\develop\Java\jdk1.8.0_202\bin;
分号必须要写,而且还要是英文符号。如图所示:
步骤:
JDK安装完毕,可以开发我们第一个Java程序了。
Java程序开发三步骤:编写、编译、运行。
在D:\atguigu\javaee\JavaSE20190624\code\day01_code
目录下新建文本文件,完整的文件名修改为HelloWorld.java
,其中文件名为HelloWorld
,后缀名必须为==.java==。
用notepad++等文本编辑器打开(虽然是系统自带的记事本也可以,但是记事本没有关键字颜色标识,不利于初学者学习)
在文件中输入如下代码,并且保存:
class HelloWorld {
public static void main(String[] args) {
System.out.println("HelloWorld");
}
}
友情提示:
每个字母和符号必须与示例代码一模一样。
第一个HelloWord
源程序就编写完成了,但是这个文件是程序员编写的,JVM是看不懂的,也就不能运行,因此我们必须将编写好的Java源文件
编译成JVM可以看懂的字节码文件
,也就是==.class==文件。
在DOS命令行中,进入D:\atguigu\javaee\JavaSE20190624\code\day01_code
目录,使用javac
命令进行编译。
方式一:使用文件资源管理器打开D:\atguigu\javaee\JavaSE20190624\code\day01_code
目录,然后在地址栏输入cmd。
方式二:在notepad++软件的文件菜单–>打开所在文件夹–>命令行(要求notepad++软件必须是用管理员权限启动的,否则会出现已经正确配置了环境变量,却仍然找不到javac命令的问题)
命令:
javac Java源文件名.后缀名
举例:
javac HelloWorld.java
编译成功后,命令行没有任何提示。打开D:\atguigu\javaee\JavaSE20190624\code\day01_code
目录,发现产生了一个新的文件 HelloWorld.class
,该文件就是编译后的文件,是Java的可运行文件,称为字节码文件,有了字节码文件,就可以运行程序了。
Java源文件的编译工具
javac.exe
在DOS命令行中,在字节码文件目录下,使用java
命令进行运行。
命令:
java 主类名字
主类是指包含main方法的类,main方法是Java程序的入口,没有main方法,Java类无法独立运行:
public static void main(String[] args){
}
举例:
java HelloWorld
友情提示:
java HelloWord 不要写 不要写 不要写 .class,也不要写.java
Java字节码文件的运行工具:java.exe
案例:新建类AtGuiGuDemo,输出atguigu。
class AtGuiGuDemo {
public static void main(String[] args) {
System.out.println("atguigu");
}
}
例如:
例如:
(1)源文件名、类名、字节码文件名的认识
(2)源文件名是否必须与类名一致?
如果这个类不是public,那么源文件名可以和类名不一致。但是不便于代码维护。不推荐这么干。
我们建议大家,不管是否是public,都与源文件名保持一致,而且一个源文件尽量只写一个类,目的是为了好维护。
(3)类名和字节码文件名一致?
字节码文件名就是类名
(4)一个源文件中是否可以有多个类?
一个源文件中可以有多个类,编译后会生成多个.class字节码文件。
(1)class前面可以加public
如果这个类是public,那么要求源文件名必须与类名一致。否则编译报错。
因此一个源文件只能有一个public的类。
(2)main方法必须在public的类中吗?
不是。
但是后面写代码时,基本上main方法(主方法)习惯上都在public类中。
(1)程序代码中代码、类名等
严格区分大小写
(2)字节码文件名
因为字节码文件名就是类名,所以严格区分大小写
java命令 主类名/字节码文件名
(3)源文件名
在Windows操作系统中.java的源文件名不区分大小写,但是考虑到需要培养程序员严谨的工作态度,我们建议大家养成区分大小写的习惯。
javac命令 源文件名.java
当cmd命令行窗口的字符编码与.java源文件的字符编码不一致,如何解决?
解决方案一:
在Notepad++等编辑器中,修改源文件的字符编码
解决方案二:
在使用javac命令式,可以指定源文件的字符编码
javac -encoding utf-8 Review01.java
类{
方法{
语句;
}
}
格式:
(1)每一级{}缩进一个Tab键
(2)习惯{}的左半部分在行尾,右半部分单独一行,与和它成对的"{"的行首对齐