前言:开始学习java的第一天,子在川上曰:逝者如斯夫…
1. JDK安装配置和HelloWorld
1.1 java历史
-
Java由Sun Microsystems公司与1995年5月推出;java是爪哇岛命名,因盛产咖啡而闻名(其实一开始是准备叫C+±-的,可能觉得不好听…);
-
2009年Oracle公司宣布正式以74亿美元的价格收购Sun公司,Java商标从此正式归Oracle所有(找了一个干巴巴…);
-
Java不仅仅是一门编程语言,同时也是一个技术平台;
-
Java技术分为三个版本:JavaSE,JavaEE,JavaME;
JavaSE(Java Standard Edition):Java标准版 是其他版本的核心基础,能用于开发桌面应用系统(开发出来的,就是桌面程序,就是C/S架构的软件);
JavaEE(Java Enterprise Edition):Java企业版 用于开发企业级应用(就是Java的企业平台,JavaEE开发的B/S架构的软件,简单理解就是网站,我们平时看到的各种网站,都可以用JavaEE开发);
JavaME(Java Micro Edition):Java微型版 可以用于嵌入式设备系统(开发的就是手机程序,移动设备程序等);
总结就是,SE开发软件,EE开发网站,ME开发移动设备软件;
1.2 java语言特点
1.跨平台性
-
一处编写,处处运行。指的是用Java语言编写的程序,可以在各个操作系统上运行,不需 要修改。也称为平台无关性,可移植性;
-
Java源程序是解释执行的, 每个平台上有不同版本的 JVM,JVM负责把字节码 文件(类文件)解释成符 合当前平台规范的机器码;
-
JVM: Java Virtual Machine,Java虚拟机。是Java的核心和基础。 能基于JVM 执行字节码文件。 如果计算机要执行 Java程序,那么必须安装JVM;
2.面向对象
- Java是一门面向对象的语言;面向对象(Object Oriented)简称OO(对象是不可能有的…);
- 面向对象与面向过程是两种有代表性的编程思想(C++、C#等也是面向对象,C语言就是面向过程思想);
- 面向对象思想有三大特征:封装、继承、多态(万物皆可对象);
3.健壮性
- 健壮性又称鲁棒性(robustness);
- Java的强类型机制保证任何数据必须有明确的数据类型(js和python这种就是弱类型语言);
- Java提供异常处理机制,能够统一处理异常事件;
- Java不再使用指针,实现垃圾自动回收,程序员不需要手动回收内存(可以说是吸收了c和c++的优点以及去除了不好的地方);
4.分布式
-
提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、 ServerSocket 等;
-
Java的RMI(远程方法调用)机制是开发分布式应用的重要手段;
可以理解为单个应用无法处理这个业务,从而让多个应用去解决一件事情,一个任务拆分为多个子任务,分散服务器压力,应该是这么个意思…
5.动态性
- 允许程序动态地装人运行过程中所需要的类;也可以通过网络来载入所需要的类(也就是当需要该类时才去装载类,而不是在执行之前全部把import的类全部装载进来);
- Java中能进行运行时的类型检查;
6.多线程
- Java语言支持多线程编程;
- 提供多线程机制允许程序中有多个任务并发执行(就是你能一边登qq和一边听歌);
- 提供的同步机制允许共享数据;
1.3 JDK, JRE JVM区别和联系
JDK是Java开发工具包(Java Development Kit)的简称,是一个软件;
- 如果要用Java语言编写程序,就必须在计算机上安装JDK;
JRE是Java运行环境(Java Runtime Environment)的简称;
- 如果要在机器上运行Java程序,就必须要有JRE;
JVM(Java Virtual Machine)称为Java虚拟机,在Java平台中有着举足轻重的地位;JVM可以理解为Java编译器和操作系统间的虚拟处理器;
- 编译器编译出的字节码只要JVM认识即可;
- JVM再将字节码解释成操作系统认识的机器码;
- 只要需要运行Java程序的设备,都需要安装JVM;
显然:这三者的关系:一层层的嵌套:jdk>jre>jvm
1.4 安装JDK,配置环境变量
1.4.1 下载:官网
https://www.oracle.com/java/technologies/javase-jdk8-downloads.html
或者通过别人提供的链接,csdn博客
1.4.2 安装
按默认步骤执行
1.4.3 Jdk各个文件夹的作用
安装后打开:
Jdk代码包:
Bin:一堆可执行程序,一系列的工具,可以直接在DOS窗口调用使用;
- javac – 编译器,将源程序转成字节码;
- java – 运行编译后的java程序(.class后缀的);
- jar – 打包工具,将相关的类文件打包成一个文件;
- javadoc – 文档生成器,从源码注释中提取文档;
- jdb – debugger,查错工具;
- appletviewer:小程序浏览器,执行HTML文件上的Java小程序的Java浏览器;
- javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件;
- javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义;
- jconsole: Java进行系统调试和监控的工具;
Db:常见的jar包,类库文件
Include:头文件
Jre:运行时环境
Lib:是jdk工具用到的类库及其他文件
外部的jre:这个是共同的jre
打开bin目录:
Javac:c compair: java编译器
Java:解释器,运行的是字节码文件
我们一段代码的执行要遵循这样的原则:先编译,后解释,解释字节码文件;
这里我们可以进入到jdk的bin目录中,按住shift键选择在此文件夹中打开命令行窗口:
刚才我们看到如果要执行javac是不是要找到jdk的bin目录那么深,那我们希望在随便一个窗口都能执行javac,这个时候就需要配置jdk的环境变量
这就是为什么要配置环境变量的原因了(有点那啥感觉了…)
1.4.4 配置环境变量
- 计算机->右键->属性->高级系统设置->环境变量->系统变量->新建,此处按操作执行就可打开环境变量窗口;
2.计算机->右键->属性->高级系统设置->环境变量->系统变量->path
%JAVA_HOME%\bin(这边为什么设置JAVA_HOME其实也有原因);
重新打开一个dos窗口,输入javac,发现可以识别,证明配置变量成功,如果提示javac不是可用命令,则表示安装不成功,或者path中的路径设置错误;
3.配置classPath:配置类库文件 [.表示当前路径,必须要加]
C:\Program Files\Java\jdk1.8.0_121\lib
C:\Program Files\Java\jdk1.8.0_121\lib\tools.jar
下划线的这个部分定义一个变量来表示:JAVA_HOME->指向C:\Program Files\Java\jdk1.8.0_121
下划线的路径可以替换成 %JAVA_HOME% (%xxx%表示引用)
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
注:这里的JAVA_HOME变量设置的原因是因为配置类库文件时发现前面都有一段重复的代码,为了减少代码的重复量;
1.4.5 小结
配置环境变量->实现对源程序的编译和执行
- JAVA_HOME: JDK的根目录/安装目录 C:\Program Files\Java\jdk1.8.0_112
- Path:配置命令文件的位置 %JAVA_HOME%\bin;
- classpath:配置的是类库文件的位置
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
1.5 第一个Java代码:
Javac命令:用于编译
Java 命令: 用于解释执行
书写一个hello.java(这里推荐下一个notepad++编辑器)
这个文件名要和类名一致,因为类前面有一个public
main :入口,每个程序的执行都需要入口,再加上一个字符串数组的参数
- 进入cmd命令,找到java源程序,执行javac命令
Javac 源文件名.java //此时需要后缀名
2.解释执行: java执行字节码文件
Java 字节码文件名 //此时不需要后缀名
下面几道题就能拿很好的弄清楚这个问题
1.请问下面代码保存为a.java,编译后生成的类文件名是哪个?(A)
class Test{ }
A、Test.class
B、test.class
C、a.class
D、以上都不对
2.请问下面代码保存为a.java,使用哪条命令可以成功编译?(B)
class Test{ }
A、javac Test.java
B、javac a.java
C、javac Test
D、javac a
3.请问下面代码保存为a.java,成功编译后,使用哪条命令可以运行?(C)
class Test{ }
A、java Test.class
B、java a.class
C、java Test
D、java a
4.请问下面代码保存为a.java,成功编译后,生成哪些类文件?(D)
class Test{ } class Demo{ }
A、a.class
B、Test.class
C、TestDemo.class
D、Test.class Demo.class