计算机全称:电子计算机,俗称电脑。是一种能够安装程序运行,自动、高速处理海量数据的现代化智能电子设备
。
由硬件和软件所组成,没有安装任何软件的计算机成为裸机。常见的形式有台式计算机、笔记本计算机、大型计算机等。
CPU(Central Processing Unit,中央处理器)
硬盘(Hard Disk Drive)
机械硬盘(HDD)
、固态硬盘(SSD)
以及混合硬盘(SSHD)
内存(Memory)
计算机软件是使用计算机过程中必不可少的东西,计算机软件可以使计算机按照事先预定好的顺序完成特定的功能。
一台计算机由:主板、CPU、内存、电源、显卡、磁盘等组成,这些是必须的,只要主机工作,这几样缺一不可。
软件,即一系列按照特定顺序组织
的计算机数据
和指令
的集合。有系统软件和应用软件之分。
系统软件:
应用软件:
图形化界面(Graphical User Interface,GUI),这种方式简单直观,使用者易于接受,容易上手操作。
命令行方式(Command Line Interface,CLI),需要在控制台输入特定的指令
,让计算机完成一些操作。需要记忆一些指令,较为麻烦。
DOS(Disk Operating System,磁盘操作系统)是Microsoft公司在Windows之前推出的一个操作系统,是单用户、单任务(即只能执行一个任务)的操作系统。现在被Windows系统取代。
对于Java初学者,学习一些DOS命令,会非常有帮助。
进入DOS操作窗口:
按下Windows+R键盘,打开运行窗口,输入cmd回车,进入到DOS的操作窗口。
常用指令:
操作1:进入和回退
操作 | 说明 |
---|---|
盘符名称: | 盘符切换。E:回车,表示切换到E盘。 |
dir | 列出当前目录下的文件以及文件夹 |
cd 目录 | 进入指定单级目录。 |
cd 目录1\目录2\… | 进入指定多级目录。cd atguigu\JavaSE |
cd … | 回退到上一级目录。 |
cd \ 或 cd / | 回退到盘符目录。 |
操作2:增、删
操作 | 说明 |
---|---|
md 文件目录名 | 创建指定的文件目录。 |
rd 文件目录名 | 删除指定的文件目录(如文件目录内有数据,删除失败) |
操作3:其它
操作 | 说明 |
---|---|
cls | 清屏。 |
exit | 退出命令提示符窗口。 |
← → | 移动光标 |
↑ ↓ | 调阅历史操作命令 |
Delete和Backspace | 删除字符 |
语言:是人与人之间用于沟通的一种方式。例如:中国人与中国人用普通话沟通。而中国人要和英国人交流,可以使用英语或普通话。
计算机编程语言,就是人与计算机交流的方式。人们可以使用编程语言
对计算机下达命令
,让计算机完成人们需要的功能。
计算机语言有很多种。如:C 、C++、Java、Go、JavaScript、Python,Scala等。
1.机器语言
机器语言是直接用二进制代码指令表达的计算机语言,指令是用0和1组成的一串代码,它们有一定的位数,并分成若干段,各段的编码表示不同的含义。
2.汇编语言
汇编语言是使用一些特殊的符号来代替机器语言的二进制码,计算机不能直接识别,需要用一种软件将汇编语言翻译成机器语言。
3.高级语言
使用普通英语进行编写源代码,通过编译器将源代码翻译成计算机直接识别的机器语言,之后再由计算机执行。
高级语言按照程序设计方法的不同,又分为:面向过程的语言、面向对象的语言。
1.C语言:万物之源
诞生于1972年
,由AT&T公司旗下贝尔实验室
创建完成,用于构建Unix操作系统。
偏向计算机底层操作(操作系统、网络、硬件驱动等)。
优势:几乎所有现代编程语言都脱胎于C
劣势:相当陡的学习曲线;不支持面向对象编程
2.C++语言:难学的语言
升级版本
。C++是C语言的超集,C语言的大部分知识也适用于C++。最复杂
也是最难
的编程语言。3.C#语言:背靠大树的语言
2000年
,一款强大而灵活的编程语言。靠着微软
这棵大树,是多年来windows平台的一门主流编程语言。4.PHP语言:最好的语言?
服务器端脚本语言
。最初表示个人主页(Personal Home Page)5.Python:易学的语言
开发效率非常高
。胶水语言
,哪里都可以用。6.JavaScript语言:前端为王
所有主流浏览器
上唯一支持的脚本语言。在前端开发中,占有不可替代的地位。7.Java语言:需求旺盛
运用最广的项目语言
。代码稳定性超过 C 和 C++,生产力远超 C 和 C++。有 JVM 在,可以轻松地跨平台。数量最多
的程序员,最不缺人。8.Go语言:夹缝中生存
云计算领域
事实上的标准语言,尤其是在 Docker/Kubernetes 等项目中。总结:
程序设计方法
来解决问题。这也是本套课程的主旨。是SUN
(Stanford University Network,斯坦福大学网络公司 ) 1995年
推出的一门高级编程语言。
是一种面向Internet的编程语言。Java一开始富有吸引力是因为Java程序可以在Web浏览器
中运行。这些Java程序被称为Java小程序
(applet),内嵌在HTML代码中。
伴随着互联网的迅猛发展,以及Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。
起步阶段:
1991年,Sun公司的工程师小组想要设计一种语言,应用在电视机
、电话
、闹钟
、烤面包机
等家用电器的控制和通信。由于这些设备的处理能力
和内存
都很有限,并且不同的厂商会选择不同的中央处理器(CPU),因此这种语言的关键是代码短小
、紧凑
且与平台无关
(即不能与任何特定的体系结构捆绑在一起)。
Gosling团队率先创造了这个语言,并命名为“Oak
"(起名的原因是因为他非常喜欢自己办公室外的橡树)。后因智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。
随着20世纪90年代互联网的发展,Sun公司发现该语言在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。(Java是印度尼西亚爪哇岛
的英文名称,因盛产咖啡而闻名。)
发展阶段:
发行版本 | 发行时间 | 备注 |
---|---|---|
Java 1.0 | 1996.01.23 | Sun公司发布了Java的第一个开发工具包 |
Java 1.1 | 1997.02.19 | JavaOne会议召开,创当时全球同类会议规模之最。 |
Java 1.2 | 1998.12.08 | Java拆分成: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公司 |
2009.04.20 | Oracle公司收购SUN,交易价格74亿 美元。 |
|
Java 7.0 | 2011.07.02 | |
Java 8.0 | 2014.03.18 | 此版本是继Java 5.0以来变化最大的版本。是长期支持版本(LTS) |
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安装包,是长期支持版本(LTS) |
Java 12.0 | 2019.03.19 | |
… | … | |
Java17.0 | 2021.09 | 发布Java 17.0,版本号也称为21.9,是长期支持版本。 |
… | … | |
Java19.0 | 2022.09 | 发布Java19.0,版本号也称为22.9。 |
桌面级应用
(如Windows下的应用程序)的Java平台,即定位个人计算机的应用开发。在服务器端的Web应用开发
。移动终端(手机、机顶盒)上的平台
,即定位在消费性电子产品的应用开发注意:
Android开发不等同于Java ME的开发
Java 语言是一种分布式的面向对象语言,具有面向对象、平台无关性、简单性、解释执行、多线程、安全性等很多特点。
1.面向对象
Java 是一种面向对象的语言,它对对象中的类、对象、继承、封装、多态、接口、包等均有很好的支持。为了简单起见,Java 只支持类之间的单继承,但是可以使用接口来实现多继承。使用 Java 语言开发程序,需要采用面向对象的思想设计程序和编写代码。
2.平台无关性
平台无关性的具体表现在于,Java 是“一次编写,到处运行(Write Once,Run any Where)”的语言,因此采用 Java 语言编写的程序具有很好的可移植性,而保证这一点的正是 Java 的虚拟机机制。在引入虚拟机之后,Java 语言在不同的平台上运行不需要重新编译。
3.简单性
Java 语言的语法与 C 语言和 C++ 语言很相近,使得很多程序员学起来很容易。对 Java 来说,它舍弃了很多 C++ 中难以理解的特性,如操作符的重载和多继承等,而且 Java 语言不使用指针,加入了垃圾回收机制,解决了程序员需要管理内存的问题,使编程变得更加简单。
4.解释执行
Java 程序在 Java 平台运行时会被编译成字节码文件,然后可以在有 Java 环境的操作系统上运行。在运行文件时,Java 的解释器对这些字节码进行解释执行,执行过程中需要加入的类在连接阶段被载入到运行环境中。
5.多线程
Java 语言是多线程的,这也是 Java 语言的一大特性,它必须由 Thread 类和它的子类来创建。Java 支持多个线程同时执行,并提供多线程之间的同步机制。任何一个线程都有自己的 run() 方法,要执行的方法就写在 run() 方法体内。
6.分布式
Java 语言支持 Internet 应用的开发,在 Java 的基本应用编程接口中就有一个网络应用编程接口,它提供了网络应用编程的类库,包括 URL、URLConnection、Socket 等。Java 的 RIM 机制也是开发分布式应用的重要手段。
7.健壮性
Java 的强类型机制、异常处理、垃圾回收机制等都是 Java 健壮性的重要保证。对指针的丢弃是 Java 的一大进步。另外,Java 的异常机制也是健壮性的一大体现。
8.高性能
Java 的高性能主要是相对其他高级脚本语言来说的,随着 JIT(Just in Time)的发展,Java 的运行速度也越来越高。
9.安全性
Java 通常被用在网络环境中,为此,Java 提供了一个安全机制以防止恶意代码的攻击。除了 Java 语言具有许多的安全特性以外,Java 还对通过网络下载的类增加一个安全防范机制,分配不同的名字空间以防替代本地的同名类,并包含安全管理机制。
Java 语言的众多特性使其在众多的编程语言中占有较大的市场份额,Java 语言对对象的支持和强大的 API 使得编程工作变得更加容易和快捷,大大降低了程序的开发成本。Java 的“一次编写,到处执行”正是它吸引众多商家和编程人员的一大优势。
J
ava D
evelopment K
it):是Java程序开发工具包,包含JRE
和开发人员使用的工具。J
ava R
untime E
nvironment) :是Java程序的运行时环境,包含JVM
和运行时所需要的核心类库
。J
ava V
irtual M
achine):Java虚拟机,是整个 Java 实现跨平台的最核心
的部分,能够运行以 Java 语言写作的软件程序。如下是Java 8.0 Platform:
三者的联系:
小结:
JDK = JRE + 开发工具集(例如Javac编译工具等)
JRE = JVM + Java SE标准类库
下载地址:https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html
双击下载的JDK.exe进行安装,一直下一步即可
JDK 安装目录下具有多个子目录和一些网页文件,其中重要目录和文件的说明如下。
什么是path环境变量?
window操作系统执行命令时,所要搜寻的路径。
为什么配置path?
希望在命令行使用javac.exe等工具时,任意目录下都可以找到这个工具所在的目录。
配置步骤:
(1)打开桌面上的计算机,进入后在左侧找到计算机
,单击鼠标右键
,选择属性
,如图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OGDunHKS-1678148415230)(null)]
(2)选择高级系统设置
,如图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LczDmAeB-1678148415430)(null)]
(3)在高级
选项卡,单击环境变量
,如图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J2b62WS3-1678148417263)(null)]
(4)在系统变量
中,单击新建
,创建新的环境变量,如图所示:
(5)变量名输入JAVA_HOME
,变量值输入 D:\develop_tools\jdk\jdk1.8.0_271
,单击确定
,如图所示:
(6)选中Path
环境变量,双击
或者点击编辑
,如图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SwrgenUQ-1678148415180)(null)]
(7)在变量值的最前面,键入%JAVA_HOME%\bin
。如图所示:
注意:强烈建议将%JAVA_HOME%\bin声明在path环境变量中所有变量的最前面!
(8)环境变量配置完成,重启DOS命令行,在任意目录下输入javac
或java
命令或java -version
,运行成功。
小结如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LsRxP5lJ-1678148415329)(null)]
不管大家有没有提前安装JDK8或其它版本JDK,在我们安装完JDK17之后,理应按JDK8的方式配置path环境变量。但是,我们发现在安装完JDK17以后,配置环境变量之前,执行CMD指令:
竟然成功了!而且是17.0.2版本。因为JDK17在安装之后,自动进行了环境变量的配置。如下:
这里建议,将JDK17安装的路径,设置为JAVA_HOME,并将%JAVA_HOME%\bin
上移到首位。
编程规范是对编程的一种约定,主要作用是增强代码的可读性和可维护性,便于代码重用。
首先要求程序中的各个要素都遵守命名规则,然后在编码中严格按照编码格式编写代码。命名规则包括以下几点。
1.包的名称由一个小写字母序列组成。
2.类的名称由大写字母开头,其他字母都由小写的单词组成。
3.类的实例的名称由一个小写字母开头,后面的单词由大写字母开头。
4.常量的名称都大写,并且指出完整含义。
5.参数的名称无其他具体规定。
6.数组的命名使用“类型[] 数组名”的形式。
另外,编码格式规定如下
1.程序最开始编写导入包和类语句,即 import 语句。import 语句可以有多行,编写完 import 语句后空一行。
2.定义 public 类,顶格书写。类的主体左括号“{”不换行书写,右括号“}”顶格书写。
3.定义 public 类中的变量,缩进书写。
4.定义方法用缩进书写,方法的左括号“{”不换行书写,右括号“}”和方法首行第一个字符对齐。方法体要再次缩进书写,最后一个变量定义和第一个方法定义之间、方法和方法之间最好空一行。
提示:在单一的语句后有“;”,在一对括号“{}“之外无“;”。方法调用名和紧跟在其后的左括号“(”无空格,该左括号和其后的标识符之间无空格。多个参数之间的逗号和前一个参数紧靠,与后一个参数空一格。
程序(Program)是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合。
程序一词源于生活,指的是完成某些事情的一种既定方式和过程。
Java程序开发三步骤:编写
、编译
、运行
。
程序开发步骤:
第一步:编程程序
Helloworld.java文件
第二步:编译程序(通过编译器生成)
HelloWorld.class文件
第三步:运行程序(JVM Java运行平台)
程序开发步骤解析:
1.编写
:是指在 Java 开发环境中进行程序代码的输入,最终形成后缀名为 .java
的 Java 源文件。
2.编译
:是指使用 Java 编译器对源文件进行错误排査的过程,编译后将生成后缀名为.class
的字节码文件,不像C语言那样生成可执行文件。
3.运行
:是指使用 Java 解释器将字节码文件翻译成机器代码,执行并显示结果。
程序运行流程:
(1)在E:\代码空间\java入门
目录下新建文本文件,完整的文件名修改为HelloWorld.java
,其中文件名为HelloWorld
,后缀名必须为.java
。
(2)用记事本或editplus等文本编辑器打开(虽然记事本也可以,但是没有关键字颜色标识,不利于初学者学习)
(3)在文件中输入如下代码,并且保存:
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello world!");
}
}
第一个HelloWord
源程序就编写完成了,但是这个文件是程序员编写的,JVM是看不懂的,也就不能运行,因此我们必须将编写好的Java源文件
编译成JVM可以看懂的字节码文件
,也就是.class
文件。
在DOS命令行中,进入E:\代码空间\java入门
目录,使用javac
命令进行编译。
使用文件资源管理器打开E:\代码空间\java入门
目录,然后在地址栏输入cmd。
命令:
javac Java源文件名.后缀名java
举例:
javac HelloWorld.java
编译成功后,命令行没有任何提示。打开D:\JavaSE\chapter01
目录,发现产生了一个新的文件 HelloChina.class
,该文件就是编译后的文件,是Java的可运行文件,称为字节码文件,有了字节码文件,就可以运行程序了。
在DOS命令行中,在字节码文件目录下,使用java
命令进行运行。
命令:
java 主类名字
主类是指包含main方法的类,main方法是Java程序的入口:
public static void main(String[] args){
}
举例:
java HelloWorld
Java 源代码本质上其实就是普通的文本文件,所以理论上来说任何可以编辑文本文件的编辑器都可以作为我们的 Java 代码编辑工具
集成 IDE 就是把代码的编写
、调试
、编译
、执行
都集成到一个工具中了,不用单独在为每个环节使用工具
前期我们先使用文本开发工具,培养代码感
,利于公司笔、面试。
后期我们使用IDE,提供更强大的功能支持
。
举例1:
举例2:
举例1:
声明为public的类应与文件名一致,否知编译失败。
举例2:
编译失败,注意错误出现的行数,再到源代码中指定位置改错
当cmd命令行窗口的字符编码与.java源文件的字符编码不一致,如何解决?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZROjruh4-1678148415381)(null)]
解决方案一:
解决方案二:
在使用javac命令式,可以指定源文件的字符编码
javac -encoding utf-8 Review01.java
注意缩进!
一定要有缩进。缩进就像人得体的衣着一样!
只要遇到{}就缩进,缩进的快捷键tab键。
必要的空格
结构:
类{
方法{
语句;
}
}
格式:
(1)每一级缩进一个Tab键
(2){}的左半部分在行尾,右半部分单独一行,与和它成对的"{"的行首对齐
Java程序的入口是main方法
public static void main(String[] args){
}
换行输出语句:输出内容,完毕后进行换行,格式如下:
System.out.println(输出内容);
直接输出语句:输出内容,完毕后不做任何处理,格式如下
System.out.print(输出内容);
注意事项:
换行输出语句,括号内可以什么都不写,只做换行处理
直接输出语句,括号内什么都不写的话,编译报错
(1)源文件名是否必须与类名一致?public呢?
如果这个类不是public,那么源文件名可以和类名不一致。但是不便于代码维护。
如果这个类是public,那么要求源文件名必须与类名一致。否则编译报错。
我们建议大家,不管是否是public,都与源文件名保持一致,而且一个源文件尽量只写一个类,目的是为了好维护。
(2)一个源文件中是否可以有多个类?public呢?
一个源文件中可以有多个类,编译后会生成多个.class字节码文件。
但是一个源文件只能有一个public的类。
Java确实是从C语言和C++语言继承了许多成份,甚至可以将Java看成是类C语言发展和衍生的产物。“青出于蓝,而胜于蓝”。
优点:
Write once , Run Anywhere
”。J
VM ,Java V
irtual M
achine) 即可。由JVM来负责Java程序在该系统中的运行。面向对象性:
面向对象是一种程序设计技术,非常适合大型软件的设计和开发
。面向对象编程支持封装、继承、多态等特性,让程序更好达到高内聚
,低耦合
的标准。
健壮性:
吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制。
安全性高:
Java适合于网络/分布式环境,需要提供一个安全机制以防恶意代码的攻击。如:安全防范机制
(ClassLoader类加载器),可以分配不同的命名空间以防替代本地的同名类、字节代码检查。
简单性:
Java就是C++语法的简化版
,我们也可以将Java称之为“C++--
”。比如:头文件,指针运算,结构,联合,操作符重载,虚基类等。
高性能:
Java最初发展阶段,总是被人诟病“性能低
”;客观上,高级语言运行效率总是低于低级语言的,这个无法避免。Java语言本身发展中通过虚拟机的优化提升了几十倍运行效率
。比如,通过JIT(JUST IN TIME)即时编译技术提高运行效率。
Java低性能的短腿,已经被完全解决了
。业界发展上,我们也看到很多C++应用转到Java开发,很多C++程序员转型为Java程序员。
缺点:
语法过于复杂、严谨
,对程序员的约束比较多,与python、php等相比入门较难。但是一旦学会了,就业岗位需求量大,而且薪资待遇节节攀升
。整个架构会比较重
,对于初创公司开发和维护人员的成本比较高(即薪资高),选择用Java语言开发网站或应用系统的需要一定的经济实力。并非适用于所有领域
。比如,Objective C、Swift在iOS设备上就有着无可取代的地位。浏览器中的处理几乎完全由JavaScript掌控。Windows程序通常都用C++或C#编写。Java在服务器端编程和跨平台客户端应用领域则很有优势。JVM(J
ava V
irtual M
achine ,Java虚拟机):是一个虚拟的计算机,是Java程序的运行环境。JVM具有指令集并使用不同的存储区域,负责执行指令,管理数据、内存、寄存器。
功能1:实现Java程序的跨平台性
我们编写的Java代码,都运行在JVM 之上。正是因为有了JVM,才使得Java程序具备了跨平台性。
使用JVM前后对比:
功能2:自动内存管理(内存分配、内存回收)
数据的分配
、存储
等都由JVM来完成减少了
因为没有释放空间而导致的内存泄漏
。面试题:
Java程序还会出现内存溢出和内存泄漏问题吗? Yes!
反编译:把class文件还原成java源文件,注意:只能反编译未加密的的class文件