目录
Java重要特点
- Java语言是面向对象的(oop)
- Java语言是健壮的,Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证
- Java语言是跨平台性的
将 .java 编译成 ,class,这个 .class 既可以在Linux,又可以在windows运行
即编译好的 .class 文件可以在多个系统下运行,这种特性就是跨平台性
- 补充:为什么可以运行
- 因为每一个操作系统上都有一个JVM,不同的操作系统里,JVM都不一样,根本原因就是靠JVM来支撑,另外JVM包含在JDK里面
- Java语言是解释性的(了解)
解释性语言:javascript、php、Java、
编译性语言:C、C++
解释性语言和编译性语言的区别:解释性语言的编译后的代码,不能直接被机器执行,还需要解释器来执行,而编译性语言的编译后的代码,可以直接被机器执行
Java虚拟机(JVM)
基本介绍
- JVM 是一个虚拟的计算机,具有指令集并使用不同的存储区域,负责执行指令、管理数据、内存、寄存器,包含在 JDK 中
- 对于不同的平台,有不同的虚拟机
- Java虚拟机机构屏蔽了底层运行平台的差别,实现了“一次编译、到处运行”
示意图
JDK和JRE
JDK基本介绍
JDK(Java Development Kit Java开发工具包)
- JDK = JRE + Java的开发工具(java、javac、javadoc、javap)
- JDK是提供给Java开发人员使用的,其中包含了Java的开发工具,也包含了 JRE ,因此安装了 JDK ,就可以不用在单独安装 JRE 了
JRE基本介绍
JRE(Java Runtime Environment Java的运行环境)
- JRE = JVM + Java的核心类库【类】
- 包括Java虚拟机(JVM - Java Virtual Machine)和Java程序所需的核心类库等
- 因此如果想要运行一个已经开发好的 Java 程序,计算机中只需要安装 JRE 即可,好比程序员已经写好了 test.java 的文件,并且编译成了 test.class 文件,而另一个人想要运行的话只需要JRE这个运行环境,就不需要 javac 这些开发工具了
JDK、JRE、JVM的包含关系
- JDK = JRE + 开发工具集(例如javac、java编译工具等)
- JRE = JVM + Java SE标准类库(Java核心类库)
- 如果只想运行开发好的 .class 文件,只需要JRE
安装JDK和JRE
- 安装JDK的细节:一般安装长期支持版如:Java 8,Java 11, 或者现在的Java 17
- 注意:JDK安装过程中的安装路径不能有中文或者特殊符号如空格等,而安装JRE,看你自己,可以不安装,因为JDK中含有JRE
配置环境变量path
为什么要配置环境变量path
在**命令行窗口(dos命令行)**下运行 java 和 javac
为什么报错:
由于当前执行的程序在当前目录下不存在(因为我们将JDK安装在了别的路径下),因此win10系统会在系统中已有的path路径下查找,若查找不到就会报错
而我们为了能够在任何一个目录下执行 java 和 javac,因此我们就需要去配置环境变量
配置环境变量path的步骤
- 我的电脑 – 右键属性 – 高级系统设置 – 环境变量
- 增加 JAVA_HOME 环境变量,执行JDK的安装目录,如我的:F:\soft\Java
- 编译 path 环境变量,增加 %JAVA_HOME%\bin
- 打开命令行窗口(DOS命令行),任意目录下敲入 java 和 javac,如果出现 java 或者 javac的参数信息,则表示配置成功
- 既可以在用户变量里配置,也可以在系统变量里配置,不同的点就是在用户变量里配置,只能供lenovo这个用户使用,换个用户就需要重新配置,不然使用不了,而系统变量表示所有用户都可以使用
配置完成后,就能在任意目录下的命令行窗口下运行java,可以查看其版本
Java快速入门(使用Sublime Text)
需求说明
要求开发一个 Hello.java 程序们,可以输出 “hello,world!”
开发步骤
- 将 Java 代码编写到扩展名为 Hello.java 的文件中
//这是java的快速入门,演示java的开发步骤
//对代码的相关说明
//1. public class Hello 表示Hello是一个类,是一个public公有的类
//2. Hello{ } 表示一个类的开始和结束
//3. public static void main(String[] args) 表示一个主方法,即我们程序的入口
//4. main() { } 表示方法的开始和结束
//5. System.out.println("hello,world~"); 表示输出"hello,world~"到屏幕
//6. ; 表示语句结束
public class Hello {
//编写一个main方法
public static void main(String[] args) {
System.out.println("hello, world!");
}
}
- 通过 javac 命令对该 java 文件进行编译,生成 .class 文件
**使用Sublime Text这个软件进行编译的,默认使用UTF-8,并且在文件中含有文字(即注释),由于DOS命令行(命令行窗口)是GBK格式,因此在命令行窗口下(DOS命令行)使用 javac 进行编译的时候会报错,**这里如果没有文字,虽然编译的类型不同,但还是能够编译
- 它提醒你是编码 GBK 的不可映射字符,这是由于命令行窗口是默认使用 GBK 的编码,而Sublime Text是 UTF-8 的编码,主要原因是文件中还含有中文(即注释),两者类型不同,
- 因此为了解决这个问题,就需要将Sublime Text默认的文件编码转变成 GBK
- 这样子就能正常编译,正常运行
- 通过 java 命令对生成的 .class 文件进行运行
- 运行直接 java 文件名
- 运行不用 .class ,因为Java的规则,java Hello 只运行我们编写的类(即public class Hello),如果加上,会认为我们运行的是 Hello.class 的类,因此运行的时候不用加 .class
运行原理示意图
Java执行流程分析
- 运行就是通过运行工具 java.exe 对字节码文件(.class)进行执行,本质上就是将 .class 文件装载到 JVM 机上执行
- 注意事项:当修改过文件后,需要重新编译,生成新的 .class 文件,再次执行,才会改变
Java开发注意事项和细节说明
- Java源文件以 .java 为扩展名,源文件的基本组成部分是类(class),如本类中的Hello类
- Java应用程序的执行入口是 main() 方法,它有固定的书写格式:
public static void main(String[] args) {…}
-
Java语法严格区分大小写
-
Java方法由一条条语句构成,每个语句以 " ; " 结束
-
大括号都是成对出现的,缺一不可。[习惯:先写 {} 再写代码]
-
一个源文件中最多只能有一个public类,其他类的个数不限
- 这样子编译后,每一个类都有一个 .class 文件
- 如果源文件包含一个public类,则文件名必须按该类名命名!
public class Hello {
//编写一个main方法
public static void main(String[] args) {
System.out.println("hello, world!");
}
}
- 这里类名和文件不同,编译的时候会发生报错
- 一个源文件中最多只能有一个public类,其他类的个数不限,也可以将main方法写在 非public类 中,然后指定运行 非public类,这样入口方法就是 非public 的main方法
public class Hello {
//编写一个main方法
public static void main(String[] args) {
System.out.println("Zan教育");
}
}
//一个源文件中最多只能有一个public类,其他类的个数不限
//Dog是一个类
//编译后,每一个类都对应一个.class
class Dog {
//一个源文件中最多只能由一个public类,其他类的个数不限,也可以将main方法写在非public类中
//然后指定运行非public,这样入口方法就是在非public的main方法
public static void main(String[] args) {
System.out.println("hello, 小狗狗~");
}
}
class Tiger {
public static void main(String[] args) {
System.out.println("hello, 小老虎~");
}
}
- 这里 非class类 运行后,会只进入 非class类 的main入口处
Java转义字符
- \t:一个制表位,实现代码对齐的功能
- \n:换行符
- *\:一个*
public class ChangeChar {
public static void main(String[] args) {
// \\:一个\
1. System.out.println("F:\Java\code");//error
2. System.out.println("F:\\Java\\code");
}
}
- 第一种情况就会报错,因为 \ 被默认当作转义字符的标志,因此想要打印出 \ ,就需要两个\
- “:一个”
public class ChangeChar {
public static void main(String[] args) {
// \":一个“
1. System.out.println("老张说:"要好好学习java,有前途"");//error
2. System.out.println("老张说:\"要好好学习java,有前途\"");
}
}
- 第一种情况也会报错,因为有两个双引号,解析不出来了
- ‘:一个’
- 原理同\
- \r:一个回车
- \r 表示回车 - 而回车过后会将光标放到输出的当前行的第一个字符前,用 \r 后面的字符替换当前的字符
public class ChangeChar {
public static void main(String[] args) {
// \r:一个回车
// 1. 输出 老张的
// 2. \r 表示回车 - 回车过后将光标放到输出的当前行的第一个字符,
// 用后面的字符替换当前的字符
System.out.println("老张的\r教育"); // 教育的
System.out.println("老张的\r\n教育"); // 老张的
// 教育
}
}
- \n会将光标定位到下一行的位置
//演示转义字符的使用
public class ChangeChar {
public static void main(String[] args) {
// \t:一个制表位,实现对齐的功能
System.out.println("1. 北京\t天津\t上海");
// \n:换行符
System.out.println("2. jack\nsmith\nary");
// \\:一个\
System.out.println("3. F:\\Java\\code");
// \":一个“
System.out.println("4. 老张说:\"要好好学习java,有前途\"");
// \':一个‘
System.out.println("5/ 老张说:\'要好好学习java,有前途\'");
// \r:一个回车
// 1. 输出 老张的
// 2. \r 表示回车 - 回车过后将光标放到输出的当前行的第一个字符,用后面的字符替换当前的字符
System.out.println("6. ");
System.out.println("老张的\r教育"); // 教育的
System.out.println("老张的\r\n教育"); // 老张的
// 教育
}
}
初学Java易犯错误
- 找不到文件
- 解决方法:源文件名不存在或者写错,或者当前路径错误
- 主类名和文件名不一致
- 解决方法:声明为public的主类应与文件名一致,否则编译失败
- 缺少分号
- 解决方法:编译失败,注意错误出现的行数,再到源代码中指定位置改错
- 常见错误总结
学习编程最容易犯的错是语法错误(初学者)。Java要求你必须按照语法规则去编写代码。如果你的程序违反了语法规则,例如:忘记加分号、大括号、引号、或者拼错了单词,java编译器都会报语法错误。尝试着去看懂编译器会报错的错误信息
- 数字 1 写成字母 l
- 数字 0 写成字母 o
- 英文符号写成中文字符:; ;" ”
- 拼写错误:void -> viod
- 业务错误、环境错误(不好修改)
注释
- 单行注释 //
基本格式://注释文字
- 多行注释 /* */
基本格式“/* 注释文字 */
- 单行注释和文档注释的使用细节
- \1. 被注释的文字,不会被JVM(java虚拟机)解释执行(即注释里的东西不会被执行)
- \2. 多行注释里面不允许有多行注释嵌套
//演示注释使用
//
public class Comment01 {
public static void main(String[] args) {
//嵌套注释
/*示意
/*
*/
下面代码完成 两个数相加
定义变量
*/
}
}
- 嵌套注释的错误
- 文档注释 /* */*
注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档,一般写在类前
//文档注释
//
/**
* @author 张zan
* @version 1.0
*/
public class Comment02 {
//编写一个main方法
public static void main(String[] args) {
}
}
基本格式就是**/** */包含,然后中间以*@**格式来写,*@后面的内容具体可以参考《javadoc 标签.docx》
- 另外应用的格式就是
javadoc -d 文件夹名 -xx -yy 程序名
如:javadoc -d F:\java\code\temp -author -version Comment02.java
- 这样就会在temp文件夹里面生成一大推网页文件
Java代码规范
- 类、方法的注释,要以javadoc的方式来写
- 非JavaDoc的注释,往往都是给代码的维护者看的,着重告诉为什么这样写,如何修改,注意什么问题等
- 使用tab操作,实现缩进,默认整体向右边移动,也可以用shift+tab整体向左移
- 运算符和 = 两边习惯性的各加一个空格,比如:2 + 4 * 5 + 345 - 89
- 源文件一般都使用utf-8编码(上面是由于在DOS上运行,DOS是GBK格式)
- 行宽度不要超过80个字符(即能一行看完,不需要拉动)
- 代码编写次行风格和行尾风格(推荐)
DOS命令(了解)
DOS介绍
Dos: Disk Operating System 磁盘操作系统
相对路径和绝对路径
相对路径:从当前目录开始定位,形成的一个路径
绝对路径:从顶级目录(根目录)D盘,开始定位,形成的路径
需求:想在当前目录下(D:\abc\test100)访问hello.txt
- 相对路径:…\abc2\test200\hello.txt
- 绝对路径:D:\abc2\test200\hello.txt
常用的DOS命令
- dir:查看当前目录是有什么内容,例:dir d:\abc2\test200
- cd:切换到其他盘下,盘符号,例:cd /d C:(/d是必须要的)
还可以切换到当前盘的其他目录下(相对路径和绝对路径)…\表示上一级目录,例:cd d:\abc2\test200 或 cd …\abc2\test200(当前目录在d:\abc\test100)
- 切换到上一级:cd …
- 切换到根目录:cd \
- tree:查看指定的目录下所有的子级目录
- cls:清屏
- exit:退出DOS
- md:创建目录,例:md d:\temp - 即在d盘创建temp文件夹
- rd:删除目录,例:rd d:\temp - 即删除在d盘的temp文件夹
- copy:拷贝文件
- del:删除文件
- echo:输入内容要文件,例:echo hello > hello.txt 即将hello放在hello.txt里面,空文件就是echo nul > pic.txt
- type:显示文件里的内容,例:type hello.txt 即显示hello.txt里面的内容
- move:移动,例:move ok.txt F:\ok.txt,将ok.txt移到F盘下