一、Java语言概述
Java技术体系
-
Java SE(Java Standard Edition)标准版
支持面向桌面级应用(如Windows下的应用程序)的Java平台,提供了完整的Java核心API,此版本以前称为J2SE
-
Java EE(Java Enterprise Edition)企业版
是为开发企业环境下的应用程序提供的一套解决方案。该技术体系中包含的技术如:Servlet 、Jsp等,主要针对于Web应用程序开发。版本以前称为J2EE
-
Java ME(Java Micro Edition)小型版
支持Java程序运行在移动终端(手机、PDA)上的平台,对Java API有所精简,并加入了针对移动终端的支持,此版本以前称为J2ME
Java语言的特点
-
面向对象
- 三大特性:封装、继承、多态
-
健壮性
- 吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制
-
跨平台性
- 跨平台性:通过Java语言编写的应用程序在不同的系统平台上都可以运行。“Write once , Run Anywhere”
- 原理:只要在需要运行 java 应用程序的操作系统上,先安装一个Java虚拟机 (JVM Java Virtual Machine) 即可。由JVM来负责Java程序在该系统中的运行。
友情提示:
- java具有跨平台性,JVM不具有跨平台性。不同的平台,JVM会略有区别,如linux上的JVM与Windows上的JVM就有不同。
因为有了JVM,同一个Java 程序在三个不同的操作系统中都可以执行。这样就实现了Java 程序的跨平台性。
Java语言运行机制及运行过程
-
Java两种核心机制
Java虚拟机 (Java Virtal Machine)
垃圾收集机制 (Garbage Collection)
核心机制——Java虚拟机
- JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器。
- 对于不同的平台,有不同的虚拟机。
- 只有某平台提供了对应的java虚拟机,java程序才可在此平台运行
- Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”
核心机制——垃圾回收
- 不再使用的内存空间应回收—— 垃圾回收。
在C/C++等语言中,由程序员负责回收无用内存。
Java 语言消除了程序员回收无用内存空间的责任:它提供一种系统级线程跟踪存储空间的分配情况。并在JVM空闲时,检查并释放那些可被释放的存储空间。 - 垃圾回收在Java程序运行过程中自动进行,程序员无法精确控制和干预。
有了垃圾回收机制,Java程序还会出现内存泄漏和内存溢出问题吗?Yes!
二 、Java环境搭建
见上篇笔记jdk的安装
认识JDK 、JRE 、JVM
-
JDK(Java Development Kit Java开发工具包)
-
JRE(Java Runtime Environment Java运行环境)
JDK = JRE + 开发工具集(例如Javac编译工具等)
JRE = JVM + Java SE标准类库
配置环境变量path
1、为什么要配置环境变量?
为了在任意目录下都可以执行类似于javac
这样的可执行程序。
举例:
-
在dos命令行中敲入javac,出现错误提示:
-
错误原因:当前执行的程序在当前目录下如果不存在,windows系统会在系统中已有的一个名为path的环境变量指定的目录中查找。如果仍未找到,会出现以上的错误提示。所以进入到 jdk安装路径in目录下,执行javac,会看到javac参数提示信息。
2、配置JAVA_HOME的作用
在后续的学习中会安装其他的工具,如Tomcat,Tomcat的配置文件中有一个变量名为JAVA_HOME,这个JAVA_HOME指向jdk的安装路径(bin的上一级目录),为了便于后面的使用,我们干脆提前设置一个JAVA_HOME存储jdk的安装路径。
三、一些常用的DOS命令
1、进入目录命令:cd
//进入根目录
cd/ 或 cd
2、切换到上一级
cd..
3、进入当前盘的其他目录下
绝对路径:从根目录开始定位,例如:cd d: est2001 或者 cd d:/test200/1
相对路径:从当前目录开始定位,例如:...... est2001 或者 ../../../test200/1
4、切换盘符命令
(1)直接盘符
例如要切换到D盘
d:
(2) 使用cd命令
例如:要切换到E盘,可以使用
cd /D e:
5、查看当前目录下有什么内容
dir
6、新建目录:md (make directory)
///在当前目录下创建hello文件夹
md hello
//在当前目录下创建a,b,c三个文件夹
md a b c
//在d盘test文件夹下创建a文件夹
md d: esta
7、删除目录:rd
//删除空目录
rd 空目录名
//删除目录以及下面的子目录和文件,带询问
rd /S 非空目录名
//删除目录以及下面的子目录和文件,不带询问
rd /S/Q 非空目录名
8、新建空文件命令:type nul
tyype nul > 文件名.扩展名
9、追加内容到文件命令:echo
echo 内容 > 文件名.扩展名
10、复制(copy)或移动(move)文件
copy 源文件 目标目录新文件名.扩展名
move 源文件 目标目录
11、删除文件命令:del
//删除指定文件
del 文件名.扩展名
del 目标目录文件名.扩展名
//删除所有文件并询问
del *.*
//删除所有文件不询问
del /Q *.*
12、查看某个目录的下一级目录结构:tree
//tree 目录
tree /F 目录
/F 显示每个文件夹中文件的名称。
13、清屏命令
cls
四、入门程序——HelloWorld
如何编写并运行HelloWorld程序
Java程序开发三步骤:编写、编译、运行
编写Java源文件
1、在z:practice
目录下新建文本文件,完整的文件名修改为HelloWorld.java
,其中文件名为HelloWorld
,后缀名必须为.java
。
2、用notepad++等文本编辑器打开
3、写入以下代码
public class HelloWorld {
public static void main(String[] args) {
System.out.println("HelloWorld");
}
}
编译Java源文件
在DOS命令行中,进入z:practice
目录,使用javac
命令进行编译
// javac 源文件名.扩展名
javac HelloWorld.java
运行Java程序
//java 类名
java HelloWorld
HelloWorld案例常见错误
1、单词拼写错误
2、类名与源文件名保持一致
3、严格区分大小写
4、不要出现中文目录
编码问题
1、字符编码问题
当cmd命令行窗口的字符编码与.java源文件的字符编码不一致,如何解决?
解决方案一:
在Notepad++等编辑器中,修改源文件的字符编码(使用本地编码)
解决方案二:
//在使用javac命令式,可以指定源文件的字符编码
javac -encoding utf-8 HelloWorld.java
由HelloWorld案例拓展的常识
1、源文件名与类名一致问题
(1)源文件名是否必须与类名一致?public呢?
如果这个类不是public,那么源文件名可以和类名不一致。
如果这个类是public,那么要求源文件名必须与类名一致。
我们建议大家,不管是否是public,都与源文件名保持一致,而且一个源文件尽量只写一个类,目的是为了好维护。
(2)一个源文件中是否可以有多个类?public呢?
一个源文件中可以有多个类,编译后会生成多个.class字节码文件。
但是一个源文件只能有一个public的类。
(3)main必须在public的类中吗?
不是。
但是后面写代码时,基本上main习惯上都在public类中。