软件:
一系列按照特定顺序组织的计算机数据和指令的集合;有系统软件(window、linux)和应用软件(QQ、微信)之分。
人机交互方式:
图形化界面 | 鼠标直接点击 |
---|---|
命令行方式 | 需要控制台并输入特定指令让计算机完成操作(如windows的DOS命令)。 |
Dos命令:
磁盘操作系统(Disk Operating System)是Microsoft公司在Windows之前推出的一个操作系统,是单用户、单任务(即只能执行一个任务)的操作系统。现在在Windows系统中。
命令窗口:
win+r 后输入:cmd | |
---|---|
在文件路径中输入cmd,打开的就是当前路径下的dos窗口。 |
常见命令:
进入和回退:
盘符: | 盘符切换。E:回车,表示切换到E盘。 | |
---|---|---|
cd | cd 目录 或 cd 目录1\目录2\... | 进入指定单级目录或多级目录,带根路径是从盘符开始找,不带是在当前路径下。 |
cd .. | 回退到上一级目录。 | |
cd \ 或 cd / | 回退到盘符目录。 |
文件操作:
dir | 列出当前目录下的文件以及文件夹 | |
---|---|---|
md 文件目录名 | 创建指定的文件目录。 | |
rd 文件目录名 | 删除指定的文件目录(如文件目录内有目录或文件,删除失败) | |
copy | 将一份或多份文件复制到另一个位置 | |
move | 移动文件并重命名文件和目录 | |
ren | 重命名文件 | |
del | 删除一个或多个文件、当作用于目录时代表删除目录中的所有文件;*.文件类型代表删除所有此类型的文件 |
其他命令:
cls | 清除屏幕记录但不会清楚命令记录,可以使用上下键调出。 | |
---|---|---|
exit | 用于退出CMD.EXE 程序。 | |
Delete和Backspace | 删除字符 | |
help | help:查看所有命令的信息 | |
help 某指令:查看某个命令的信息 |
计算机语言:
人与计算机交流的方式。人们可以使用编程语言
对计算机下达命令
,让计算机完成人们需要的功能。
机器语言 | 使用的二进制代码。 | ||
---|---|---|---|
汇编语言 | 使用英文缩写的助记符表示一条机器指令。提高了程序的编写效率,但汇编语言是 | ||
面向过程/对象 | 独立于机器 ,有一定的通用性;计算机不能直接识别和执行用高级语言编写的程序,需要使用编译器或者解释器,转换为机器语言 才能被识别和执行。 | C是面向过程的语言 | |
C++是面向过程和面向对象的语言 | |||
Java是跨平台的纯面向对象的语言。 |
Java概述:
是一种面向Internet的编程语言。Java一开始富有吸引力是因为Java程序可以在Web浏览器中运行。这些Java程序被称为Java小程序(applet)。applet使用现代的图形用户界面与Web用户进行交互。applet内嵌在HTML代码中。
Java是从C语言和C++语言继承了许多成份,甚至可以将Java看成是类C语言发展和衍生的产物。比如Java语言的变量声明,操作符形式,参数传递,流程控制等方面和C语言、C++语言完全相同。但同时,Java是一个纯粹的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心。Java舍弃了C语言中容易引起错误的指针(以引用取代)、运算符重载(operatoroverloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间。JDK1.5又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱
Java发展历史:
日期 | 事件 |
---|---|
1995 年 5 月 | Java是SUN(斯坦福大学网络公司) 1995年推出的一门高级编程语言。语言诞生。 |
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以来变化最大的版本,是长期支持版本(LTS) |
2017 年 9 月 | Oracle 公司发表 Java SE 9。 |
2018 年 3 月 | Oracle 公司发表 Java SE 10。 |
2018 年 9 月 | Java SE 11 发布。JDK安装包取消独立JRE安装包,是长期支持版本(LTS) |
2021年9月 | Java17.0 发布。是长期支持版本(LTS)。最新版本的框架都是根据jdk17来的。 |
Java技术体系平台:
Java目前主要的应用场景:JavaEE后台开发、Android客户端的开发、大数据的开发
JavaSE(标准版) | 支持面向桌面级应用(如Windows下应用程序)的Java平台,提供了完整的Java核心API,包括用户界面接口AWT及Swing,网络功能与国际化、图像处理能力以及输入输出支持等。 | |
---|---|---|
JavaEE(企业版) | 是开发企业环境(web)应用程序提供的一套解决方案。在基础上增加了Servlet 、Jsp等服务器开发的类库 。 | |
JavaME(微型版) | 支持Java程序运行在移动终端(手机、PDA)平台上,对Java API有所精简,并加入了针对移动终端的支持。 |
Java语言的特性:
是简单的 | Java 继承了C和C++、所以语法与他们很接近,但是Java 丢弃了 C++ 中很少使用的、很难理解的、令人迷惑的特性,如操作符重载、多继承、自动的强制类型转换等。Java 语言不使用指针,而是引用。并提供了内存空间自动分配和回收,使得程序员不必为内存管理而担忧。 |
---|---|
是面向对象的 | Java 提供类、接口和继承等面向对象的特性,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。 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语言编写的应用程序在不同的系统平台上都可以运行、只需要运行java 应用程序的操作系统上,先安装一个Java虚拟机(JVM Java Virtual Machine) 即可。由JVM来负责Java程序在该系统中的运行。 |
JVM虚拟机:
是一个虚拟的计算机,是Java程序的运行环境,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存和寄存器。Java程序在运行过程中,涉及到运算的数据的分配
、存储
等都由JVM来完成
跨平台型:
对于不同的平台,有不同的虚拟机、只有提供了对应平台的java虚拟机由JVM来负责Java程序在该系统中的运行。 java程序才可在此平台运行、这种机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行“的跨平台性。
垃圾回收机制(GC):
不再使用的内存空间应回收,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃
垃圾回收机制只回收JVM堆内存里的堆空间。对其他物理连接,比如数据库连接、输入流输出流、Socket连接无能为力需要手动关闭。
可以将对象的引用变量设置为null,暗示垃圾回收机制可以回收该对象。也可以通过System.gc()或者Runtime.getRuntime().gc()来通知系统进行垃圾回收,会有一些效果,但是系统是否进行垃圾回收依然不确定(Java语言规范并不保证GC一定会执行)。 垃圾回收在Java程序运行过程中自动进行具有不可预知性,程序无法精确控制垃圾回收机制执行(Java语言没有提供释放已分配内存的显示操作方法。)。
垃圾回收机制回收任何对象之前,总会先调用它的finalize方法、如果覆盖该方法,让一个新的引用变量重新引用该对象,则会重新激活对象。永远不要主动调用某个对象的finalize方法,应该交给垃圾回收机制调用。
垃圾回收流程:
对于GC来说,当程序员创建对象时,Java就提供一种系统级线程跟踪存储空间的地址、大小以及使用情况。
通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的(不再使用的内存空间)"。
当GC在JVM空闲时确定一些对象为"不可达(不再使用的内存空间)"时GC就有责任回收这些内存空间,并检查释放那些可被释放的存储空间。
拓展-内存泄漏/溢出:
GC的自动回收,提高了内存空间的利用效率,也提高了编程人员的效率,很大程度上减少了
因为没有释放空间而导致的内存泄漏
。但是Java程序还会出现内存泄漏和内存溢出问题.
内存泄露:
是指程序在申请内存后,无法释放已申请的内存空间。
一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。
内存溢出:指程序申请内存时,没有足够的内存供申请者使用。
Java是一门半编译半解释型的语言:
JDK、JRE、JVM的关系:
JDK(Java开发工具集+JRE) | JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。但是开发中一些软件可以还是需要独立的jre。 |
---|---|
JRE(JavaSe核心类库+JVM ) | 是Java程序的运行时环境 ,包括Java虚拟机(JVM)和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进入安装向导。
下一步,可以更改安装路径(但安装路径不要有中文或者空格等特殊符号)
下一步,开始安装
jdk目录说明:
bin目录 | 开发工具集 | |
---|---|---|
db目录 | 该目录是一个小型数据库,在Java中引入了一个开源的数据库管理系统——JavaDB。因此在学习JDBC时无需安装额外的数据库软件,直接使用JavaDB即可。 | |
jre目录 | 该目录为Java运行时的环境根目录,它包含Java虚拟机、运行时的类包、Java应用启动器和一个bin目录,但不包含开发环境中的开发工具 | |
include目录 | 存放开放JDK所使用的c语言的头文件 | |
lib目录 | Java类库或库文件,是开发工具使用的归档包文件 | |
src.zip文件与javafx-src.zip文件 | 存放JDK核心类源代码和JavaFX源代码,通过这两个文件可以查看Java基础类的源代码 |
安装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设置
path环境变量是windows系统执行命令时要搜寻的路径。当前执行的程序(或命令)在当前目录下如果不存在,windows会在path变量指定的目录中查找。如果仍未找到,会出现错误提示。为了所有地方都能使用java命令所以需要配置此变量(否则的话只有进入到 jdk安装路径\bin目录下,执行javac,会看到javac参数提示信息。)。
我的电脑--属性--高级系统设置--环境变量编辑path 环境变量,在变量值开始处加上java工具所在目录,后面用“; ”和其他值分隔开即可。打开DOS命令行,任意目录下敲入javac。如果出现javac 的参数信息,配置成功。
Jdk可以安装多个,但是只有你配置了环境变量才会真正使用,jdk配置那个使用的是哪个
Windows10:
Path 变量里是分条显示的,需分开添加,且移到最上面否则无法识别
jdk17:
jdk17在安装后会自动进行path变量的配置,但我们要改成JAVA_HOME+path配置方式;如下为自动配置。
CLASSPATH 设置
运行时去找class文件的地方,如果使用 1.5 以上版本的 JDK,不用设置 CLASSPATH 环境变量,也可以正常编译和运行 Java 程序。
测试JDK是否安装配置成功:
打开dos命令窗口键入命令: java -version命令,出现版本信息,说明环境变量配置成功;
Java文件编写格式:
文件格式是 .Java 类型,源文件的基本组成部分是类(class)
Java方法由一条条语句构成,每个语句以“;”结束。
Java中都是纯英文字符的且严格区分大小写,大括号都是成对出现的,缺一不可。
一个源文件中可以包含多个类(非内部类)并且编译后也会生成多个字节码文件,与类名相同但最多只能有一个public类,且源文件名必须与pbulic类的类名相同,类名首字母应该大写,否则编译失败(非public的类源文件名可以不跟类名一致)。
类的格式:
public class 类名(大驼峰){}
class:关键字,表示"类",后面跟着类名
输出到控制台的语句:
如果没写发现没有编译失败,但也没有任何效果,因为并没有告诉JVM要帮我们做什么事情,也就是没有可以具体执行的语句。
想要和JVM来个互动,只要在main方法中加入一句System.out.println(“Hello World");因为程
序进行改动,所以再重新编译,运行即可。
输出语句并换行:
可以直接为空使用,代表换行。
System.out.println(“Hello World");
只输出语句:
不能为空使用。为空报错。
System.out.print(“Hello World");
理解main方法的语法:
main方法格式是固定的,如果运行类时没有此方法会报在类中找不到主方法。
public static void main(String[] args){ }
由于Java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是public,又因为Java虚拟机在执行main()方法时不必创建对象,所以该方法必须是static的,该方法接收一个String类型的数组参数,该数组中保存执行Java命令时传递给所运行的类的参数。
又因为main() 方法是静态的,我们不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员。
public | 公共的,用它修饰的类或成员在任意位置可见 |
---|---|
static | 静态的,用它修饰的方法,可以不用创建对象就可以调用 |
void | 表示该方法没有返回值 |
main | Java的主方法名,JavaSE的程序入口 |
String[] args | 字符串数组,这是main方法的形参类型,可以通过命令行参数传值、args这是main方法的形参名,如果要在main中使用命令行参数,可以遍历该args数组。 |
public class CommandLine {
public static void main(String[] args){
for(int i=0; i<args.length; i++){
System.out.println("args[" + i + "]: " + args[i]);
}
}
}
$ javac CommandLine.java
$ java CommandLine this is a command line 200 -100
args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100
java CommandLine "第一个参数" 第二个参数
这些参数会传给args数组
Java运行过程:
将Java 代码编写到扩展名为.java 的文件中。
通过javac 命令对该java 文件进行编译(编译时需要带上文件类型.java),生成一个或多个跟类名相同的字节码文件
通过java 命令对生成的class 文件进行运行(运行时不用带上文件类型.class)。
编译命令:
javac HellClass.java
运行命令:
java HellClass
注:每改变一次Java源文件都需要重新编译,才能运行到修改后的内容。
在cmd命令行窗口运行时的字符编码与.java源文件的字符编码不一致:
方式一:使用编辑器改变文件的字符编码
方式二:在使用javac命令式,可以指定源文件的字符编码
javac -encoding utf-8 Review01.java
Java注释:
对程序代码解释说明,提高代码阅读性
所有注释都不允许有嵌套(因为注释一旦遇到*/就代表注释的结束)。
多行和文档注释可以跨行
单行注释:
单行注释建议放在要注释的代码的上面
//注释内容
多行注释:
/*
注释内容
注释内容
*/
单行注释和多行注释的其他作用:调试代码。
注:单行注释和多行注释以及空格都不会被编译也不会展示在class文件中(文档注释除外)。
文档注释:
注释内容会被JDK提供的工具javadoc所解析,生成一套以网页形式体现的程序说明文档。
每一个类的信息将在独自的HTML文件里。javadoc 也可以输出继承的树形结构和索引
在开始的 /** 之后,第一行或几行是关于类、变量和方法的主要描述。之后,你可以包含一个或多个各种各样的 @ 标签。每一个 @ 标签必须在一个新行的开始或者在一行的开始紧跟星号(*).
多个相同的标签注释要放在一起。
javadoc解析的类都是public的
// 以 /** 开始,以 */结束。中间的星号(*)可省略。
/**
* @注释类型 注释说明
*/
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中找到。
更多推荐
Java概述
发布评论