软件:
一系列按照特定顺序组织的计算机数据和指令的集合、有系统软件(window、linux)和应用软件(QQ、微信)之分。
人机交互方式:
图形化界面(GUI) | 鼠标直接点击(简单直观,使用者容易接受和上手操作)。 |
---|---|
命令行方式(CLI) | 需要一个控制台来输入指令,让计算机完成操作(比如windows的DOS命令)。 |
Dos命令:
命令窗口:
win+r 后输入:cmd。 | |
---|---|
在文件路径中输入cmd,打开的就是当前路径下的dos窗口。 |
常见命令:
指令 | 说明 | 示例 | |
---|---|---|---|
dir | 显示当前文件夹下的文件和文件夹 | dir | |
copy | 将一份或多份文件复制到另一个位置 | copy 源文件 目标文件夹 | |
move | 移动文件并重命名文件和目录 | move 源文件 目标文件夹/移动后的文件名(文件名可选不声明新的文件名代表不改名字) | |
md或mkdir | 创建目录 | md 文件夹名 | |
cd | cd/ | 跳转到当前根目录 | |
cd .. | 跳转到当前目录的上一级 | ||
cd d:/project/demo | 跳转到指定目录,目录必须在当前盘符下,带当前盘符的会从盘符指定的路径找,不带的在当前目录下找 | ||
切换盘符 | 盘符名:(必须要带冒号) | d: | |
ren | 重命名文件 | ren 原文件名 : 修改的文件名 | |
del | 删除一个或多个文件、当作用于目录时代表删除目录中的所有文件 | del *.txt : 表示删除所有txt类型的文件 | |
del 文件名.后缀 删除当前目录下的指定文件,也可以指定路径 | |||
del 文件夹名 :代表删除目录中的所有文件 | |||
rd或rmdir | 删除一个空目录(有文件的删不了) | rd 空目录名 | |
echo | 创建文件并把内容写入文件中 | echo javase>1.doc 创建1.doc文件并把`javase`文字 写入文件中 | |
cls | 清除屏幕记录但不会清楚命令记录,可以使用上下键调出。 | ||
exit | 用于退出CMD.EXE 程序。 | ||
help | help:查看所有命令的信息 | ||
help 某指令:查看某个命令的信息 |
计算机语言:
人与计算机交流的方式。
机器语言 | 指令以二进制代码形式存在。 | |
---|---|---|
汇编语言 | 使用助记符表示一条机器指令。 | |
面向过程/对象 | C是面向过程的语言 | |
C++是面向过程和面向对象的语言 | ||
Java是跨平台的纯面向对象的语言。 |
Java概述:
Java是SUN(斯坦福大学网络公司) 1995年推出的一门高级编程语言。
是一种面向Internet的编程语言。Java一开始富有吸引力是因为Java程序可以在Web浏览器中运行。这些Java程序被称为Java小程序(applet)。applet使用现代的图形用户界面与Web用户进行交互。applet内嵌在HTML代码中。
Java发展历史:
日期 | 事件 |
---|---|
1995 年 5 月 | Java 语言诞生。 |
1996 年 1 月 | JDK1.0 诞生。 |
1998 年 12 月 | JAVA企业平台 J2EE 发布。 |
1999 年 6月 | SUN 公司发布 Java 的三个版本:标准版(Java2SE)、企业版(Java2EE、此时出现servlet、jsp)、微型版(Java2ME)。 |
2004 年 9 月 | J2SE1.5 发布,成为 Java 语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE1.5 更名为 Java SE 5.0。 |
2005 年 6 月 | JavaOne 大会召开,SUN 公司公开 Java SE 6。此时,Java 的各种版本已经更名,以取消其中的数字 "2":更名为 Java EE、 Java SE、 Java ME。 |
2006 年 12 月 | SUN 公司发布 JRE6.0。 |
2009 年 04 月 | 甲骨文 74 亿美元收购 Sun,取得 Java 的版权。 |
2011 年 7 月 | 甲骨文发布 Java7.0 的正式版。 |
2014 年 3 月 | Oracle 公司发表 Java SE 8。是继JDK 5.0以来变化最大的版本 |
2017 年 9 月 | Oracle 公司发表 Java SE 9。 |
2018 年 3 月 | Oracle 公司发表 Java SE 10。 |
2018 年 9 月 | Java SE 11 发布。 |
Java语言的体系:
JavaSE(标准版) | 支持面向桌面级应用(如Windows下应用程序)的Java平台,提供了完整的Java核心API。 |
---|---|
JavaEE(企业版) | 是开发企业环境(web)应用程序提供的一套解决方案。该技术中有Servlet 、Jsp等。 |
JavaME(微型版) | 支持Java程序运行在移动终端(手机、PDA)上。 |
Java Card | 支持一些Java小程序运行在小内存设备(如智能卡)上。 |
Java语言的特性:
是简单的 | Java 继承了C和C++、所以语法与他们很接近,但是Java 丢弃了 C++ 中很少使用的、很难理解的、令人迷惑的特性,如操作符重载、多继承、自动的强制类型转换等。Java 语言不使用指针,而是引用。并提供了内存空间自动分配和回收,使得程序员不必为内存管理而担忧。 |
---|---|
是面向对象的 | Java 提供类、接口和继承等面向对象的特性,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制。 Java 语言全面支持动态绑定,而 C++语言只对虚函数使用动态绑定。 |
是分布式的 | Java 支持网络应用的开发,在基本的 Java 应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括 URL、URLConnection、Socket、ServerSocket 等。 Java 的 RMI(远程方法激活)机制也是开发分布式应用的重要手段。 |
是健壮的 | Java 的强类型机制、异常处理、垃圾自动回收机制等是 Java 程序健壮性的重要保证。 Java 的安全检查机制使得 Java 更具健壮性。 |
是安全的 | Java通常被用在网络环境中,为此,Java 提供了一个安全机制使对通过网络下载的类具有一个安全防范机制(类 ClassLoader)以防恶意代码的攻击;如分配不同的命名空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类 SecurityManager)让 Java 应用设置安全哨兵。 |
是体系结构中立的 | Java 程序(.Java文件)在 Java 平台上被编译为体系结构中立的字节码格式(class 文件),然后可以在实现在这个 Java 平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。 |
是可移植的 | 可移植性来源于体系结构中立性。 Java 系统本身也具有很强的可移植性,Java 编译器是用 Java 实现的,Java 的运行环境是用 ANSI C 实现的。 |
是解释型的 | Java 程序在 Java 平台上被编译为字节码格式,然后可以在实现这个 Java 平台的任何系统中运行。在运行时,Java 平台中的 Java 解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。 |
是高性能的 | Java与那些解释型的高级脚本语言相比,Java 的确是高性能的。事实上,Java 的运行速度随着 JIT(Just-In-Time)编译器技术的发展越来越接近于 C++。 |
是多线程的 | 在 Java 中,线程是一种特殊的对象,它必须由 Thread 类或其子(孙)类来创建。通常有两种方法来创建线程: 其一,使用型构为 Thread(Runnable) 的构造子类将一个实现了Runnable 接口的对象包装成一个线程; 其二,从 Thread 类派生出子类并重写 run 方法,使用该子类创建的对象即为线程。 值得注意的是 Thread 类已经实现了 Runnable 接口,因此,任何一个线程均有它的 run 方法,而 run 方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。Java 语言支持多个线程的同时执行,并提供多线程之间的同步机制(synchronized)。 |
是动态的 | Java 语言的设计目标之一是适应于动态变化的环境。Java 程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java 中的类有一个运行时刻的表示,能进行运行时刻的类型检查。 |
Java语言的特点
面向对象:
两个基本概念:类、对象
三大特性:封装、继承、多态
健壮性:
吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制
跨平台性:
通过Java语言编写的应用程序在不同的系统平台上都可以运行、只要在需要运行java 应用程序的操作系统上,先安装一个Java虚拟机(JVM Java Virtual Machine) 即可。由JVM来负责Java程序在该系统中的运行。
Java基础知识图解:
Java的两种核心:
JVM虚拟机:
是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存和寄存器。
对于不同的平台,有不同的虚拟机、只有提供了对应平台的java虚拟机,java程序才可在此平台运行、这种机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行“的跨平台性。
垃圾回收机制(GC):
垃圾回收机制只回收JVM堆内存里的堆空间。对其他物理连接,比如数据库连接、输入流输出流、Socket连接无能为力需要手动关闭。
可以将对象的引用变量设置为null,暗示垃圾回收机制可以回收该对象。也可以通过System.gc()或者Runtime.getRuntime().gc()来通知系统进行垃圾回收,会有一些效果,但是系统是否进行垃圾回收依然不确定(Java语言规范并不保证GC一定会执行)。 垃圾回收在Java程序运行过程中自动进行具有不可预知性,程序无法精确控制垃圾回收机制执行。
垃圾回收机制回收任何对象之前,总会先调用它的finalize方法、如果覆盖该方法,让一个新的引用变量重新引用该对象,则会重新激活对象。永远不要主动调用某个对象的finalize方法,应该交给垃圾回收机制调用。
垃圾回收流程:
对于GC来说,当程序员创建对象时,Java就提供一种系统级线程跟踪存储空间的地址、大小以及使用情况。
通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的(不再使用的内存空间)"。
当GC在JVM空闲时确定一些对象为"不可达(不再使用的内存空间)"时GC就有责任回收这些内存空间,并检查释放那些可被释放的存储空间。
拓展-内存泄漏/溢出:
虽然有垃圾回收机制但是Java程序还会出现内存泄漏和内存溢出问题.
内存泄露:
是指程序在申请内存后,无法释放已申请的内存空间。
一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。
内存溢出:指程序申请内存时,没有足够的内存供申请者使用。
JDK、JRE、JVM的关系:
JDK(Java开发工具集+JRE) | JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。 |
---|---|
JRE(Java核心类库+JVM ) | 包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等, 如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。 |
Java工具集常见命令:
命令 | 说明 | |
---|---|---|
java -version | 展示jdk、jre和jvm的版本号 | |
javac | 编译java文件并生成同类名的可供JVM解析的`.class`文件 编译时需要带上后缀。 文件名无所谓大小写,因为现在是在window系统下找文件,window不区分大写。 | |
java | 执行 .class文件此时不用带后缀且文件名区分大小写,因为class文件是Java生成的,Java区分大小写。如果要单文件运行Java文件,那么Java文件需要有main方法(程序的入口)否则不能执行。 | |
执行jar包文件 | ||
jar | 主要用于打包jar文件 | |
javadoc | 主要用于生成帮助文档。 | |
某命令 -help | 获取某个Java命令的解释说明. |
配置Java环境:
下载JDK:
下载地址:Java Downloads | Oracle,点击如下下载按钮:
在下载页面中你需要选择接受许可,并根据自己的系统选择对应的版本,本文以 Window 64位系统为例:
安装JDK:
双击下载的jdk-8u131-windows-x64.exe进入安装向导。
下一步,可以更改安装路径(但安装路径不要有中文或者空格等特殊符号)
下一步,开始安装
安装JRE:
jdk安装后已包含jre、但会提示安装jre这是因为编程开发软件(如:idea、eclipse)需要一个独立jre
安装jre,也可以更改jre 安装路径。(安装路径不要有中文或者空格等特殊符号)
点击下一步,开始安装
结束安装
配置环境变量:
安装完成后,右击"我的电脑",点击"属性",选择"高级系统设置";
选择"高级"选项卡,点击"环境变量";
然后就会出现如下图所示的画面:
系统变量和用户变量的区别:
推荐系统变量不管那个用户登录都可使用,用户变量当换其他用户登录时会使用不了其他用户配置的变量。
变量设置:
在 "系统变量" 中设置 JAVA_HOME、PATH、CLASSPATH属性,若已存在则点击"编辑",不存在则点击"新建"。
配置完成后,你可以启动 Eclipse 来编写代码,它会自动完成java环境的引用配置。
变量名 | 变量值 | 说明 |
---|---|---|
JAVA_HOME | C:\Program Files (x86)\Java\jdk1.8.0_91 | 要根据自己的jdk实际路径配置 |
CLASSPATH | .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; | 记得前面有个"." |
Path | %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; | 双%号代表取属性名的值 |
JAVA_HOME 设置
此配置在运行tomcat时,tomcat会去根据此名找寻安装的JDK
PATH设置
当前执行的程序(或命令)在当前目录下如果不存在,windows系统会在系统中已有的一个名为path的环境变量指定的目录中查找。如果仍未找到,会出现以上的错误提示。为了所有地方都能使用java命令所以需要配置此变量(否则的话只有进入到 jdk安装路径\bin目录下,执行javac,会看到javac参数提示信息。)。
我的电脑--属性--高级系统设置--环境变量编辑path 环境变量,在变量值开始处加上java工具所在目录,后面用“; ”和其他值分隔开即可。
注:在 Windows10 中,Path 变量里是分条显示的,需分开添加,且移到最上面否则无法识别
CLASSPATH 设置
运行时去找class文件的地方,如果使用 1.5 以上版本的 JDK,不用设置 CLASSPATH 环境变量,也可以正常编译和运行 Java 程序。
测试JDK是否安装配置成功:
打开dos命令窗口键入命令: java -version命令,出现版本信息,说明环境变量配置成功;
Java文件编写格式:
文件格式是 .Java 类型
Java是区分大小写的
Java方法由一条条语句构成,每个语句以“;”结束。
Java中都是纯英文字符的且区分大小写,大括号都是成对出现的,缺一不可。
一个源文件中可以包含多个类(非内部类)但最多只能有一个public类,且文件名必须与pbulic类的类名相同,类名首字母应该大写,否则编译失败。
类的格式:
public class 类名(大驼峰){}
mian方法固定格式(程序运行的入口):
如果运行类时没有此方法会报在类中找不到主方法。
public static void main(String[] args){ }
输出到控制台的语句:
输出语句并换行:
System.out.println(“Hello World");
只输出语句:
System.out.print(“Hello World");
Java运行过程:
将Java 代码编写到扩展名为.java 的文件中。
通过javac 命令对该java 文件进行编译(编译时需要带上文件类型.java),编译后生成JVM可以识别的字节码文件(.clss文件)。
通过java 命令对生成的class 文件进行运行(运行时不用带上文件类型.class)。
注:每改变一次Java源文件都需要重新编译,才能运行到修改后的内容。
Java注释:
单行注释:
单行注释建议放在要注释的代码的上面
//注释内容
多行注释:
/*
注释内容
注释内容
*/
单行注释和多行注释的作用:对程序代码解释说明,提高代码阅读性,调试代码。
注:
单行注释和多行注释以及空格都不会被编译也不会展示在class文件中(文档注释除外)。
所有注释都不允许有嵌套(因为注释一旦遇到*/就代表注释的结束)。
文档注释:
注释内容会被JDK提供的工具javadoc所解析,生成一套以网页形式体现的程序说明文档。
每一个类的信息将在独自的HTML文件里。javadoc 也可以输出继承的树形结构和索引
在开始的 /** 之后,第一行或几行是关于类、变量和方法的主要描述。之后,你可以包含一个或多个各种各样的 @ 标签。每一个 @ 标签必须在一个新行的开始或者在一行的开始紧跟星号(*).
多个相同的标签注释要放在一起。
// 以 /** 开始,以 */结束。中间的星号(*)可省略。
/**
* @注释类型 注释说明
*/
javadoc 标签
标签 | 描述 | 示例 |
---|---|---|
@author | 标识一个类的作者 | @author description |
@deprecated | 指名一个过期的类或成员 | @deprecated description |
{@docRoot} | 指明当前文档根目录的路径 | Directory Path |
@exception | 标志一个类抛出的异常 | @exception exception-name explanation |
{@inheritDoc} | 从直接父类继承的注释 | Inherits a comment from the immediate surperclass. |
{@link} | 插入一个到另一个主题的链接 | {@link name text} |
{@linkplain} | 插入一个到另一个主题的链接,但是该链接显示纯文本字体 | Inserts an in-line link to another topic. |
@param | 说明一个方法的参数 | @param parameter-name explanation |
@return | 说明返回值类型 | @return explanation |
@see | 指定一个到另一个主题的链接 | @see anchor |
@serial | 说明一个序列化属性 | @serial description |
@serialData | 说明通过writeObject( ) 和 writeExternal( )方法写的数据 | @serialData description |
@serialField | 说明一个ObjectStreamField组件 | @serialField name type description |
@since | 标记当引入一个特定的变化时 | @since release |
@throws | 和 @exception标签一样. | The @throws tag has the same meaning as the @exception tag. |
{@value} | 显示常量的值,该常量必须是static属性。 | Displays the value of a constant, which must be a static field. |
@version | 指定类的版本 | @version info |
文档注释示例:
编写文件注释:
import java.io.*;
/**
* 这个类演示了文档注释
* @author Ayan Amhed
* @version 1.2
*/
public class SquareNum {
/**
* This method returns the square of num.
* This is a multiline description. You can use
* as many lines as you like.
* @param num The value to be squared.
* @return num squared.
*/
public double square(double num) {
return num * num;
}
}
注:每一个注释都在它描述的项目的前面。
生成文档方式:
javadoc -d 文件夹名 -author -version 类名.java
或
javadoc 类名.java
在经过 javadoc 处理之后,SquareNum 类的注释将在 SquareNum.html 或指定目录中的index.html中找到。