什么是软件?
- 软件,即一系列按照特定顺序组织的计算机数据和指令的集合。有系统软件和应用软件之分。
人机交互方式
- 图形化界面(Graphical User Interface GUI)这种方式简单直观,使用者易于接受,容易上手操作。
- 命令行方式(Command Line Interface CLI):需要有一个控制台,输入特定的指令,让计算机完成一些操作。较为麻烦,需要记录住一些 命令。
DOS操作系统
Java语言的初学者,学习一些DOS命令,会非常有帮助。DOS是一个早期的操作系统,现在已经被Windows系统取代,对于我们开发人员,目前需要在DOS中完成一些事情,因此就需要掌握一些必要的命令。
- 进入DOS操作窗口:按下Windows+R键盘,打开运行窗口,输入cmd回车,进入到DOS的操作窗口。
- 打开DOS命令行后,看到一个路径 c:user 就表示我们现在操作的磁盘是c盘。
接下来我们来看几个常见的 dos 命令吧:
- dir 命令:查看当前目录下所有的子文件或子目录。
- cd 命令:切换路径,使用方法是:cd+目录路径,需要注意的是路径包括相对路径和绝对路径,对于 windows 来说从硬盘的根路径下开始的路径都是绝对路径,例如:C:Program Files、 C:Program FilesJava 等,所有的相对路径都是从当前所在目录作为起点开始查找的路径。另 外 cd ..切换到上级目录,cd 切换到根目录。
- 切换盘符:直接输入 c:,或者 d:,然后回车即可。切换盘符不需要 cd 命令。
- del 命令:删除文件或目录,例如:del *.class,删除当前目录下所有的.class 文件。
- ipconfig 命令:查看 IP 地址等信息,查看更详细的信息使用 ipconfig /all。
- ping 命令:查看两台计算机是否可以正常通信,例如:ping 192.168.1.100,正常情况下发送数据包和接收数据包数量相同并且没有延迟的时候表示通信正常,ping 192.168.1.100 -t 表示一直发送数据包和接收数据包,ping www.baidu.com 可以查看电脑是否可以正常上网。
- mkdir 命令:创建目录,例如:mkdir abc 表示在“当前目录”下新建 abc 目录。
- cls 命令:清屏。
- exit 命令:退出 DOS 命令窗口
常用文本编辑快捷键
使用快捷键可以大大提高开发效率,从现在起我们应该尽可能使用快捷键来代替鼠标,接 下来,我给大家列举一下通用的文本编辑快捷键。当然,如果大家想熟练掌握,还是需要后期不断的使用,请看下面列表:
计算机编程语言介绍
什么是计算机语言
- 语言:是人与人之间用于沟通的一种方式。例如:中国人与中国人用普通话沟通。而 中国人要和英国人交流,就要学习英语。 计算机语言:人与计算机交流的方式。如果人要与计算机交流,那么就要学习计算机语言。 计算机语言有很多种。如:C ,C++ ,Java ,PHP , Kotlin,Python,Scala等。
计算机语言的种类
- 第一代语言:机器语言。指令以二进制代码形式存在。
- 第二代语言:汇编语言。使用助记符表示一条机器指令。
- 第三代语言:高级语言 C、Pascal、Fortran面向过程的语言 丶C++面向过程/面向对象 丶Java跨平台的纯面向对象的语言 丶 .NET跨语言的平台 丶Python、Scala…
Java常识
什么是Java语言?
- 是SUN(Stanford University Network,斯坦福大学网络公司 ) 1995年推出的一 门高级编程语言。
- 是一种面向Internet的编程语言。Java一开始富有吸引力是因为Java程序可以 在Web浏览器中运行。这些Java程序被称为Java小程序(applet)。applet使 用现代的图形用户界面与Web用户进行交互。 applet内嵌在HTML代码中。
- 随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。
Java简史
- 1991年 Green项目,开发语言最初命名为Oak (橡树)
- 1994年,开发组意识到Oak 非常适合于互联网
- 1996年,发布JDK 1.0,约8.3万个网页应用Java技术来制作
- 1997年,发布JDK 1.1,JavaOne会议召开,创当时全球同类会议规模之最
- 1998年,发布JDK 1.2,同年发布企业平台J2EE
- 1999年,Java分成J2SE、J2EE和J2ME,JSP/Servlet技术诞生
- 2004年,发布里程碑式版本:JDK 1.5,为突出此版本的重要性,更名为JDK 5.0
- 2005年,J2SE -> JavaSE,J2EE -> JavaEE,J2ME -> JavaME
- 2009年,Oracle公司收购SUN,交易价格74亿美元
- 2011年,发布JDK 7.0
- 2014年,发布JDK 8.0,是继JDK 5.0以来变化最大的版本
- 2017年,发布JDK 9.0,最大限度实现模块化
- 2018年3月,发布JDK 10.0,版本号也称为18.3
- 2018年9月,发布JDK 11.0,版本号也称为18.9
Java技术体系平台
从Java的应用领域来分,Java语言的应用方向主要表现在以下几个方面:
- 企业级应用:主要指复杂的大企业的软件系统、各种类型的网站。Java的安全机制以及 它的跨平台的优势,使它在分布式系统领域开发中有广泛应用。应用领域包括金融、电 信、交通、电子商务等。
- Android平台应用:Android应用程序使用Java语言编写。Android开发水平的高低 很大程度上取决于Java语言核心能力是否扎实。
- 大数据平台开发:各类框架有Hadoop,spark,storm,flink等,就这类技术生态 圈来讲,还有各种中间件如flume,kafka,sqoop等等 ,这些框架以及工具大多数 是用Java编写而成,但提供诸如Java,scala,Python,R等各种语言API供编程。
- 移动领域应用:主要表现在消费和嵌入式领域,是指在各种小型设备上的应用,包括手 机、PDA、机顶盒、汽车通信设备等。
Java语言的诞生
java之父James Gosling团队在开发”Green”项目时,发现C缺少垃圾回收系统,还有可移植的安 全性、分布程序设计和多线程功能。最后,他们想要一种易于移植到各种设备上的平台。 Java确实是从C语言和C++语言继承了许多成份,甚至可以将Java看 成是类C语言发展和衍生的产物。比如Java语言的变量声明,操作符 形式,参数传递,流程控制等方面和C语言、C++语言完全相同。但同 时,Java是一个纯粹的面向对象的程序设计语言,它继承了C++语言 面向对象技术的核心。Java舍弃了C语言中容易引起错误的指针(以 引用取代)、运算符重载(operator overloading)、多重继承 (以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用 的对象所占据的内存空间。JDK1.5又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱
- 两个基本概念:类、对象
- 三大特性:封装、继承、多态
特点二:健壮性
- 吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与 释放等),提供了一个相对安全的内存管理和访问机制
特点三:跨平台性
- 跨平台性:通过Java语言编写的应用程序在不同的系统平台上都可以运行。“Write once , Run Anywhere” 原理:只要在需要运行 java 应用程序的操作系统上,先安装一个Java虚拟机 (JVM Java Virtual Machine) 即可。由JVM来负责Java程序在该系统中的运行。
核心机制之Java虚拟机
- JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器。
- 对于不同的平台,有不同的虚拟机。
- 只有某平台提供了对应的java虚拟机,java程序才可在此平台运行
- Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”。
核心机制之垃圾回收
- 不再使用的内存空间应回收—— 垃圾回收。
- 在C/C++等语言中,由程序员负责回收无用内存。
- Java 语言消除了程序员回收无用内存空间的责任:它提供一种系统级线程跟踪存储空 间的分配情况。并在JVM空闲时,检查并释放那些可被释放的存储空间。
- 垃圾回收在Java程序运行过程中自动进行,程序员无法精确控制和干预。
- Java程序还会出现内存泄漏和内存溢出问题吗?Yes!
什么是JDK,JRE
JDK、JRE、JVM关系
Java语言的环境搭建
下载JDK
- 官方网址: www.oracle.com 或者 java.sun.com
安装JDK
- 傻瓜式安装,下一步即可。
- 建议:安装路径不要有中文或者空格等特殊符号。
- 如果操作系统是64位的,软件尽量选择支持64位的(除非软件本身不区分)。
- 当提示安装 JRE 时,正常在JDK安装时已经装过了,但是为了后续使用集成开发工具不报错,建议也根据提示安装JRE。
- JDK8安装的时候,不仅JDK内置了一个JRE,而且还会在JDK目录之外独立的生成一个单独的JRE。(以前低版本的时候,JRE实际上是有2个。)一个是JDK内置的,一个是独立于JDK之外的。
JDK的安装目录介绍
配置环境变量 path
为了开发方便,我们想在任意的目录下都可以使用JDK的开发工具,则必须要配置环境变量,配置环境变量的意义 在于告诉操作系统,我们使用的JDK开发工具在哪个目录下。具体操作流程,参看百度。
注意:环境变量包括“系统变量”和“用户变量”
- 系统变量:范围比较大,系统变量会让计算机所有用户都起作用。
- 用户变量:范围比较小,这个变量只是作用于当前用户。
到目前为止,一共配置了哪些环境变量?
- 到目前为止,我们只配置了一个环境变量path,并且这个环境变量path和java实际上没关系,是人家windows操作系统的机制。
- 对于Java的JDK所属的环境变量,有一个叫做:JAVA_HOME这个JAVA_HOME目前我们不需要,不配置这个环境变量也不会影响当前java程序的运行。但是后期学习到JavaWEB的时候需要安装Tomcat服务器,那个时候JAVA_HOME就必须配置了。那么除了JAVA_HOME环境变量之外,JDK相关的环境变量还有其他的吗?答案:有的。
怎么查看编译器版本?
- 命令:javac -version
怎么查看java虚拟机的版本?
- 命令:java -version
开发环境已经搭建完毕,可以开发我们第一个Java程序了。 Java程序开发三步骤:编写、编译、运行。在编写第一个 Java 程序之前,我们应当对 Java 的加载与执行提前有一个简单的了解,请看下图:
通过上图,我们可以看到 Java 程序从开发到最终运行是这样进行的:
第一步(写代码):在任意位置创建一个.java 结尾的文件,程序员在该文件中编写符合 Java 语法的源代码,这个文件被称为Java 源文件。
第二步(编译):使用“javac”命令对 java 源文件进行编译,如果 Java 源文件符合 Java语法规则,则编译生成 1 个或者多个以“.class”结尾的文件。“.class”结尾的文件我们称之 为字节码文件,注意字节码文件不是普通文本文件,使用记事本等文本编辑器是无法打开的, 但该文件内容也不是二进制,如果是二进制形式的话,操作系统是可以直接执行的,这个文件 的内容我们称之为字节码。注意:这里有一个“类名”的概念,假设生成的文件是 A.class, 则表示类名为 A,B.class 则表示类名为 B。
第三步(运行):使用“java”命令运行已编译的 Java 程序,假设编译之后的字节码文件 是 A.class,则在 dos 命令窗口中执行 java A命令,这个时候 Java 虚拟机(JVM)就启动了, Java 虚拟机通过“类装载器 ClassLoader”从硬盘中找到 A.class 文件并装载,字节码文件被装 载到 Java 虚拟机之后,Java 虚拟机解释器对字节码进行解释,最终解释为二进制码,然后操 作系统通过执行二进制指令来和硬件平台完成交互。
以上则是 Java 程序加载与执行的过程,接下来我给大家总结 7 条规则,大家可以理解并记 忆一下:
- Java 程序从开发到运行包括编译和运行两个阶段,这两个阶段可以在不同的操作系统 中完成,例如在 windows 环境下进行编译,在 Linux 环境下运行,这是因为有 JVM 机制的存 在,做到了一次编译到处运行(跨平台/可移植)。
- 编译阶段需要使用 javac.exe(安装 JDK 之后该命令就存在了)命令,运行阶段需要使 用 java.exe(安装 JRE 之后该命令就存在了)命令。
- 一个 Java 源文件可能会编译生成多个 class 文件。
- Java 源文件中的源代码如果不符合 Java 的语法机制则编译时编译器会提示错误信息, 并且无法生成 class 文件。反之则生成 class 文件,而 class 文件才是最终要执行的程序,此时 将 Java 源文件删除是不会影响 Java 程序运行的(当然,我们也不必删除 java 源文件,因为在 运行 class 文件之后,如果没有达到预期的运行效果,这个时候还需要将 Java 源代码修改,重新编译,以达到最终的运行效果)。
- 若生成的字节码文件名为 A.class,那么我们称 A为一个类的名字
- 当编译阶段完成之后,我们可以使用 JRE 中的 java.exe 命令运行程序,例如执行命令 “java A”,该命令执行后会启动类加载器,类加载器去硬盘上搜索 A.class 文件,找到该字节 码文件之后,将其加载到 JVM 当中,JVM 中的解释器会将 A.class 字节码文件解释为操作系 统可以执行的二进制码,然后操作系统通过执行二进制码和硬件平台交互。
- 运行 Java 程序的前提是当前操作系统上已经安装了对应版本的 JVM(JVM 不是单独 安装的,安装 JRE 即可,不同的操作系统需要安装不同版本的 JRE,不同版本的 JRE 对应不 同版本的 JVM)。
在了解了 Java 程序的加载与执行之后,我们开始动手实现第一个 Java 程序吧!
HelloWorld案例
1:编写Java源程序
我们首先新建HelloWorld.java 文件,键入如下代码
public class HelloWorld { public static void main(String[] args) { System.out.println("hello world"); } }
第一个 HelloWord 源程序就编写完成了,但是这个文件是程序员编写的,JVM是看不懂的,也就不能运行,因此我 们必须将编写好的 Java源文件 编译成JVM可以看懂的 字节码文件 。
2:编译Java源文件
在DOS命令行中,进入Java源文件的目录,使用 javac 命令进行编译。javac后面一定是跟着java源文件的路径(路径包括相对和绝对)
编译成功后,命令行没有任何提示。源文件的目录,发现产生了一个新的文件 HelloWorld.class ,该文件就是编译后的文件,是Java的可运行文件,称为字节码文件,有了字节码文件,就可以运行程序了。
3:运行Java程序
在DOS命令行中,进入Java源文件的目录,使用 java 命令进行运行。java这个命令,后面跟的是“类名”,而绝对不能跟“文件路径”,
对修改后的Test.java源文件需要重新编译,生成新的class文件后,再进行执行。
java HelloWorld”的执行过程以及原理。
- 第一步:会先启动JVM(java虚拟机)
- 第二步:JVM启动之后,JVM会去启动“类加载器classloader”
- 类加载器的作用:加载类的。本质上类加载器负责去硬盘上找“类”对应的“字节码”文件。假设是“java HelloWorld”,那么类加载器会去硬盘上搜索:HelloWorld.class文件。
- 默认情况下类加载器(classloader)会从当前路径下找。
- 我们可以设置一个环境变量,叫做:classpath 给类加载器指定一个路径,让类加载器去指定的路径下加载字节码文件
- classpath是一个环境变量,是给“类加载器”指路的。
- classpath环境变量不属于windows操作系统,classpath环境变量隶属于java。
- 第三步:类加载器如果在硬盘上找不到对应的字节码文件,会报错,报什么错?错误: 找不到或无法加载主类。类加载器如果在硬盘上找到了对应的字节码文件,类加载器会将该字节码。文件装载到JVM当中,JVM启动“解释器”将字节码解释为“101010000...”这种二进制码,操作系统执行二进制码和硬件交互。
Java注释
注释是对代码的解释和说明,其目的是让程序员能够更加快速的理解代码。它是编写程序时,写程序的人给一个语句、程序段等的解释或提示,能提高程序代码的可读性。我认为添加注释,是为了程序更容易理解与维护,特别是维护,更是对自己代码负责的一种体现。注释在编译的时候不会生成到 class 字节码文件当中,它只在 java 源文件中保留。 Java 语言的注释包括三种方式,它们分别是:
第一种:单行注释,语法格式如下:
- // 单行注释,两个正斜杠后面的内容被注释
第二种:多行注释,语法格式如下:
- /* 注释文字 */
第三种:javadoc 文档注释。
- /**@author 指定java程序的作者,注释内容*/
注释注意事项:
- 对于单行和多行注释,被注释的文字,不会被JVM(java虚拟机)解释执行。
- 多行注释里面不允许有多行注释嵌套
- 文档注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。
- 通常要在类和接口上写注释,这一部分注释是必须的。在这里,我们需要使用 javadoc 注释,需要标明:创建者,创建时间,版本,以及该类的作用。在方法中,我们需要对入参,出参,以及返回值,均要标明。对常量,我们需要使用多行注释,进行标明该常量的用途。在关键算法上,添加注释并且按照顺序依次标明,写明白该方法为什么这么做。
- 注释的作用不在于表示代码的含义,而在于表示代码的功能。
我们现在来给上面的HelloWorld 源文件添加注释
/* 1. java规范的三种注释方式: 单行注释 多行注释 文档注释(java特有) 2. 单行注释和多行注释的作用: ① 对所写的程序进行解释说明,增强可读性。方便自己,方便别人 ② 调试所写的代码 3. 特点:单行注释和多行注释,注释了的内容不参与编译。 换句话说,编译以后生成的.class结尾的字节码文件中不包含注释掉的信息 4. 文档注释的使用: 注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。 5. 多行注释不可以嵌套使用 */ /** 文档注释 @author shkstart @version v1.0 这是我的第一个java程序!非常的开森! */ public class HelloWorld{ /* 多行注释: 如下的main方法是程序的入口! main的格式是固定的! */ /** 如下的方式是main(),作用:程序的入口。 */ public static void main(String[] args){ //单行注释:如下的语句表示输出到控制台 //System.out.println("Hello World!") System.out.println("Hello World!"); } }
入门程序说明
编译和运行是两回事
- 编译:是指将我们编写的Java源文件翻译成JVM认识的class文件,在这个过程中, javac 编译器会检查我们 所写的程序是否有错误,有错误就会提示出来,如果没有错误就会编译成功。
- 运行:是指将 class文件 交给JVM去运行,此时JVM就会去执行我们编写的程序了。
关于main方法
- main方法:称为主方法。写法是固定格式不可以更改。main方法是程序的入口点或起始点,无论我们编写多少程序,JVM在运行的时候,都会从main方法这里开始执行。
小结第一个程序
- Java源文件以“java”为扩展名。源文件的基本组成部分是类(class),如 本例中的HelloWorld类。
- 类名后面必须是一对大括号,这一对大括号被称为“类体”
- Java应用程序的执行入口是main()方法。它有固定的书写格式: public static void main(String[] args) {...}
- Java语言严格区分大小写。
- Java方法由一条条语句构成,每个语句以“;”结束。
- 大括号都是成对出现的,缺一不可。
- 一个源文件中最多只能有一个public类。其它类的个数不限,如果源文件包含 一个public类,则文件名必须按该类名命名。虽然一个 java 源文件可以定义多个 class,实际上这是不规范的,比较规范的写法是一个 java 源文件中只定义一个 class
- 非常非常重要的是:方法体中的代码遵循自上而下的顺序依次逐行执行。
- 类体当中不能直接编写输出语句
/* 对第一个java程序进行总结 1. java程序编写-编译-运行的过程 编写:我们将编写的java代码保存在以".java"结尾的源文件中 编译:使用javac.exe命令编译我们的java源文件。格式:javac 源文件名.java 运行:使用java.exe命令解释运行我们的字节码文件。 格式:java 类名 2. 在一个java源文件中可以声明多个class。但是,只能最多有一个类声明为public的。 而且要求声明为public的类的类名必须与源文件名相同。 3. 程序的入口是main()方法。格式是固定的。 4. 输出语句: System.out.println():先输出数据,然后换行 System.out.print():只输出数据 5.每一行执行语句都以";"结束。 6.编译的过程:编译以后,会生成一个或多个字节码文件。字节码文件的文件名与java源文件中的类名相同。 */ public class Hello { public static void main(String[] args) {//public static void main(String a[]) {//arguments:参数 System.out.print("Hello World!"); System.out.println();//换行 System.out.println("Hello World!"); } } class Person{ } class Animal{ }