目标: 1. Java背景知识介绍; 2. Java开发环境设置; 3.
编写、编译、运行Java程序的过程;
引言:
1. Why(为什么要学习Core Java)?
Core Java是Java语言的基础,其它Java技术均是构建在Core Java基础之上。
2. What(Core Java课程学习什么)?
1) Java编程语法(字符集、条件语句、循环语句);
2) Java编程语言面向对象的概念;封装 继承 多态
3) IO流;
4) 多线程;
5) 网络;
第一章: Getting Started(19)
JDK主要包括内容:
class的修饰符只能是public default abstract final
javac:将.java文件编译生产.class文件
java:运行.class文件 只需要提供文件名,不需要提供.class后缀 a.
Java虚拟机:负责解析和执行Java程序。Java虚拟机可运行在各种平台上;
可以将生成的.class转换成特定操作系统所识别的二进制文件
java虚拟机不能跨平台 b. JDK类库:
提供最基础的Java类及各种实用类。java.lang, java.io, java.util,
javax.swing和java.sql
包中的类都位于JDK类库中。
java.lang: 提供利用
Java 编程语言进行程序设计的基础类。最重要的类是
Object(它是类层次结构的根)和
Class(它的实例表示正在运行的应用程序中的类)。java.lang的夹包
默认直接被导入.
java.io:
Java的核心库java.io提供了全面的IO接口。包括:文件读写、标准设备输出
等。Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,
或者从输入流读入
java.util:包含集合collection
类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成
器、随机数生成器和位数组、日期Date类、堆栈Stack类、向量Vector类等)
。
c. 开发工具:
这些开发工具都是可执行程序,主要包括: javac.exe 编译工具;
java.exe
运行工具; javadoc.exe 生成JavaDoc文档的工具 jar.exe
打包工具 等。 我的电脑---》属性---》高级环境设置----》path
PATH:c:/progress file/java/jdk1.6.0_26/bin
javac.exe java.exe
这几个java相关命令本身并不被window识别,需要将存在命令路径添加到pat
h路径中.换言之 window可以识别javac编译命令和java运行命令 1.
设置Java开发环境;
a. 获取J2SDK;
j2sdk是JAVA的开发环境包它包含JDK(开发工具包)和JRE(运行时环境包)
JDK包含JRE
JDK是开发人员必装软件,除了拥有jre相关内容,还拥有java,javac等开发工
具
换言之,只有安装了jdk才可以对编写好的java程序进行编译和运行
JRE是客户端运行时必装软件,拥有jvm虚拟机和java相关的jar类库
j2sdk:在1.4版以前称为jdk,可以理解j2sdk是jdk的升级版本,所以我们只要
安了j2sdk即可,JDK就没必要了
b. 安装J2SDK; c.
设置环境变量:
JAVA_HOME:
起到变量作用,变量值是jdk的路径.一旦有人使用路径
直接提供变量就可以找到jdk的路径 1)
作用:简化其它变量设置过程中的内容输入。在变量设置过程中有可能要
多次使用到JDK的安装路径,如何简化 多次输入过程?
可先行将JDK的安装路径定义为一变量,以后凡使用到JDK安装路径的地方
均使用该变量 进行替换。
当有多个版本的jdk存在时,只需要制定java_home指向不同的jdk版本.使
用时引入不同的java_home
就可以改变jdk版本.不需要更改path内容.
path:
如果想要使用javac,java等命令,需要将该命令所在的路径
添加到path路径中.
1) 作用:指定执行外部命令时找寻对应可执行文件的路径范围; 2)
设置:
i. windows
[开始]->[控制面板]->[系统]->[高级]->[环境变量]->[新建环境变量]命
令,就可以创建环境变量path
path %JAVA_HOME%\bin;%path%
重启命令行窗口,变量即生效。window系统对path命令的大小写不
敏感。echo %path%、echo %Path%、 echo
%PATH%均显示设定的path变量值。
e.g
如果当前用户下存在.class文件
在classpath也指定的.这个当前路径
可以直接使用java 类名称来运行该.class文件
如果当前用户下不存在.class文件,而.class文件位于
当前的bin目录下。在classpath中指定了bin路径(-cp bin)
可以直接使用java 类名称来运行该.class文件
如果在classpath中没有指定./bin路径。可以使用
java -classpath(或者 -cp bin)来运行该.class文件
1) 作用:代表Java类的根路径。java命令会从classpath中寻找所需
的Java类, Java编译器编译Java类时,也会从 classpath中寻找所需的Java类。
classpath的默认值为当前路径。
2) 设置: i. windows [开始]->[控制面板]->[系统]->[高级]->[环境变量]->[新建环境
变量]命令,就可以创建环境变量classpath
重启命令行窗口,变量即生效。window系统对classpath命令的大
小写不敏感。echo %classpath%、 echo %ClassPath%、echo
%CLASSPATH%均显示设定的classpath变量值。
2. 理解Java语言特征;
Java语言包括语法规则和语法规则的实现。Sun公司对Java语言有自己的一份
参考实现:JDK。
a. 编程语言:语言本质即规则:
字符集、词法规则、句法规则(条件语句、循环语句等); 桌面应用程序
拥有图形化用户接口的软件; 服务器应用程序:通过浏览器访问运行;
b. 开发环境:开发程序,不管是桌面应用还是服务器应用,均需要JDK的支持。
c. 应用环境:运行时需要JRE的支持。
为什么java需要jre呢,因为java需要跨平台,也就是在什么机器上都能运行良
好!
java源文件会被编译成一个中间文件.class文件,这个文件不能像.exe文件那
样直接运行,而是被jre翻译成当
前机器运行时需要的程序,之后在运行。所以没有jre,那么.class文件就无法
转换成可运行的程序,所以脱离jre,java不可能运行
d. 部署环境:服务器应用程序需部署运行在服务器应用程序上,服务器本身也是一个Java程序
用Java语言编写的服务器应用程序部署运行时也需要Java语言的支持;
3. 为什么发明Java?
为什么发明了java,换而言之,java有哪些优点呢?
a. 提供一个解释环境
1) 加速开发:
Java当初目的是开发适用于智能化电子消费设备上的软件,它是基于C++语言,但做了简化,
能加速 软件的开发过程;
2) 一次编译到处运行: 跨平台;
3) 多线程:多线程编程的简单性是Java成为流行的服务器端开发语言的主要原因
之一
b. 提供一个比较容易的方式编程
1) 更健壮:没有指针(引用)、没有内存管理;
2) 纯粹的面向对象的编程:在Java中认为一切均是对象,对象有属性以及改变属
性值的方法。通过Java编程围绕 着构建对象的模板、实例化对象、调用对象的方法和属性等来进行。
封装 继承 多态
c. 那么如何实现上面这些呢?
虚拟机JVM提供一个解释环境,让java代码可以运行。
垃圾回收机制让程序员无需在代码中进行内存管理。
代码安全校验保证java代码的安全性.
4. 理解Java虚拟机的特征;
Jvm是什么?简称java 虚拟机(java virtual machine),是用软件来模拟一个虚拟的环境。
我们用java编写的源程序经过编译以后生成字节码文件,Jvm提供了一个解释运行 java字节码文件的环境只要 在 不同操作系统上安装了jvm后,就能对同一个java程序进行解释运行,这就java的跨平台,一次编译,到处运行。
将生成.class转换成机器或者(操作系统)所识别的二进制文件
5. 描述垃圾收集的概念;
什么叫垃圾回收:
1) 垃圾:无用对象所占据的内存空间;
垃圾回收:将无用对象所占据内存空间进行回收的过程;
为什么要垃圾回收?
1) 对象创建,需要占用内存空间,在一个程序运行过程中要创建无数个对象,如果
对象永久占用内存,那么内存很快会 消费光,导致后续对象无法创建或者出现内存不足的错误。
因此必须采取一定措施及时回收那些无用对象的内存,这 样保证内存可以被重复利用。
C++等程序由程序员显示进行内存释放,这样有可能:
1) 忘记内存释放,导致无端的内存占用;
2) 释放核心类库占用内存,导致系统崩溃;
Java中垃圾回收处理:
1) 由虚拟机通过一个系统级的垃圾回收器线程自动完成,不会忘记也不会释放错 ,系统更加稳定;
Java中垃圾回收处理特点:
1) 由虚拟机通过垃圾回收器线程自动完成;
2) 只有当对象不再被使用,它的内存才有可能被回收;如果虚拟机认为系统不需
要额外的内存,即便对象不再使用,内存 也不会回收;cpu是否空闲,内存是否紧张
3) 程序无法显示迫使垃圾回收器立即执行垃圾回收,可以通过java.lang.Syste
m.gc()/java.lang.Runtime.gc()建议 虚拟机回收对象;
6. 阐述Java平台代码安全实现策略;
Java虚拟机为Java程序提供运行时环境,其中一项重要的任务就是管理类,管
理类的加载、连接和初始化;
1) 加载:查找并加载类的二进制文件(class文件)
Java虚拟机可以从多种来源加载类的二进制数据,包括:
a. 从本地文件系统中加载.class文件,最常见;
b. 通过网络下载.class文件;
c. 从zip,jar或其他类型的归档文件中提取.class文件;
d. 从一个专有数据库中提取.class文件;
f. 把一个java源文件动态编译为.class文件;
2) 连接:
a. 验证:确保被加载类的正确性(有正确的内部结构,并且与其他类协调一致);
为什么要验证:
Java虚拟机不知道某个特定的.class文件到底是由正常的Java
编译器生成的,还是黑客特制的。类的验证能提
高程序的健壮性,确保程序被安全地执行。
类验证内容:
. 代码和jvm规范一致 . 代码不能破坏系统的完整性 .
没有堆栈的上溢和下溢 . 参数类型是正确的 .
类型转换的正确的
3) 初始化:给类的静态变量赋予正确的初始值;
7. 定义类、包、applets和应用程序;
1) Java的工作方式:
源代码: 编写Java源代码文件
编译器: 用编译器编译源代码。编译器会检查错误,如果有错就要改正才能产生正
确的输出。
输出: 编译器会产生字节码。任何支持Java的装置都能够把它转译成可执行的内容。
编译后的字节码与平台无关。
Java虚拟机: 可以读取与执行字节码。
加载指定类,开始执行它的main方法,然后一直运行到main的所有程序代码 结束为止。
2) Java的程序结构:
a. 源文件: 包含Java代码(按java语法规则编写的内容)的文件;
特征: i. 以java作为后缀; ii. 可以包含多个类/接口;
iii.名称与类名(只包含一个类/接口)或public修饰的类/接口(包含多个类/接口)同名;
结构: i. 包的声明语句(可有可无,如有只能有一行,且位于最前面);
ii. import语句(可有可无, 可有多行,紧跟着包的声明语句);
iii.类的声明语句{};
b. 类: Java代码组织的单位,
Java代码都是以一个个类形式组织的。用Java语言编写程序其实就是编写
一个个类;
一个类里的语句内容用大括号括起来,一个类里带有零至多个方法。
结构: i. 类的声明语句,例: public class HelloWorld ii.
类的内容语句,用大括号括起来: (1) 属性; (2) 方法:
c. 方法: 类似于其它语言里的函数或过程。方法里带有零至多行语句。
结构: i. 方法的声明语句,例: public static void main(String[]
args)
ii. 方法体,用大括号括起来: (1) 属性; (2) Java语句;
d. Main方法:
Java虚拟机执行Java程序时,首先执行调用的方法。main方法又叫程序
的入口方法或起点方法。不管你的程序有多大,
不管你的程序有多少个类,一定都会有一个main()方法来作为程序的起
点。
3) 剖析类:
public class FirstJavaProgram{ public static void main(String[]
args) { System.out.println("Hello Java, I am your fans!"); } }
window+r—>cmd—>(位于c盘)—>的D:(切换到d盘)
cd
java(进入到java3目录)—>
cd
chap01(进入到chap01目录)->
cd src(进入到src目录)->
dir(查看当前下是否有HelloWorld.java文件)
执行
javac HelloWorld.java
如果没有报错,表示编译通过
如果编译通过,执行java HelloWorld 运行helloworld程序
注意事项 :
1.允许构建的类中不存在public修饰的class,如果没有public
修饰的类,此时在其中构建main方法.也能作为程序入口
public修饰的类必须和当前文件名称一致(大小写必须一致)
helloworld.java public class HelloWorld 报错).
2.一个java文件中只允许有一个public修饰的类,并且该类的名称
必须和当前文件名称一直.类的名称与文件必须大小写一致.
允许类名称小写,只要和文件名称一致.允许有多个普通类
3.public static void main(String args[]){}
程序的入口所有的方法的构建
public去掉 编译通过,运行时发现找不到main方法.程序不能运行
static去掉 编译通过,运行时发现找不到main方法.程序不能运行
void去掉 编译不通过 报方法缺少返回类型
public和static位于可以置换,因为都是修饰符.
其他内容的位置都不能置换,必须满足方法构建的顺序
修饰符 + 返回类型 + 方法名(参数类型 参数名称…){}
main名称不一致, 编译通过,运行时发现找不到main方法,程序不能运行
main可以和后面()存在空格,jvm仍然理解成main方法
String类型发生改变,编译通过,运行时发现找不到main方法,程序不能运行
String类型大小写敏感.不能随意更改,编译不通过.
args名称可以发生改变,jvm仍然理解成main方法
[]位置可以发生改变,可以位于String后面或者args后面,但是不能不写
如果不写,编译通过.jvm找不到main方法
main方法在一个类中只能出现一次
4.package import public
class 的顺序
package最先并且只能有一个,但是可以不位于第一行
import必须紧跟package,可以有多个
java.lang包是默认导入的jar包,换言之这个包下面的所有类默认被导入.
public class必须位于package以及import之后,但是和其他class没有顺序
javac:将.java文件生产.class文件.如果.java中包含package
-d .选项可以将.java文件中制定的package内容生成对应
目录.e.g HelloWorld.java—>package com.briup.chap01;
-d . 可以在当前目录下生成com目录,com目录中在生成briup目录
briup目录中再生成chap01目录.此时chap01目录中包含生成好的
.class文件如果-d
bin选项,不在当前目录下生成对应的package制定目录.
而是在bin目录下生成对应的package制定目录
src目录存放.java文件
bin目录存放.class文件
8. 编码、编译以及运用Java应用程序;
补充:jar命令参数:
jar命令格式:jar {c t x u f }[ v m e 0 M i ][-C 目录]文件名...
其中{ctxu}这四个参数必须选其一。[v f m e 0 M i
]是可选参数,文件名也是必须的。
-c 创建一个jar包
-t 显示jar中的内容列表
-x 解压jar包
-u 添加文件到jar包中
-f 指定jar包的文件名
-v 生成详细的报造,并输出至标准设备
-m 指定manifest.mf文件.(manifest.mf文件中可以对jar包及其中的内容作一些一
设置)
-0 产生jar包时不对其中的内容进行压缩处理
-M 不产生所有文件的清单文件(Manifest.mf)。这个参数与忽略掉-m参数的设置
-i 为指定的jar文件创建索引文件
-C 表示转到相应的目录下执行jar命令,相当于cd到那个目录,然后不带-C执行jar命令