第一章 java开始Word格式文档下载.docx
- 文档编号:16635890
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:14
- 大小:252.88KB
第一章 java开始Word格式文档下载.docx
《第一章 java开始Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《第一章 java开始Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
Java作为一门丰富而复杂的新技术,它由下列这些技术层面组成:
⏹Java编程语言:
定义变量、表达式、控制转移等基本规则。
⏹Java类库:
Java软件工具包(SDK)为程序员提供了几千个类,包括基本的数学函数、数组和字符串、窗口,GUI,I/O,网络等。
⏹Java运行环境:
包括Java字节代码的加载器、校验器以及Java虚拟机。
⏹Java虚拟机:
Java技术出于跨平台,可移植的考虑,没有将程序的原代码编译连接成CPU的指令序列,直接交给计算机执行。
Java技术在不同的硬件,不同的操作系统之上,定义了完全相同的支持Java程序运行的虚拟计算机。
Java原程序被编译成字节(byte)代码,在Java虚拟机上运行。
⏹Java工具:
编译器,注释器(interpreter),文档生成器等工具。
⏹Java小应用程序:
小应用程序(Applets)是一种贮存于WWW服务器上的用Java编写的程序,它通常由浏览器下载到客户系统中,并通过支持Java运行环境的浏览器运行。
它由超文本标识语言(HTML)的Web页来调用。
⏹Java应用程序:
JavaApplications是一种独立的程序,它不需要任何Web浏览器来执行。
它们是普通的应用程序;
可运行于任何具备Java运行环境的设备中。
⏹其它Java程序:
JavaBean,Servlet,JSP等。
Java虚拟机
Java虚拟机在Java运行环境中处于核心地位。
Java虚拟机使Java语言可以跨多种平台运行,保障了SUN提出的"
writeonce,runanywhere"
的特性,其组成为:
⏹指令集(中央处理器[CPU]
⏹寄存器
⏹类文件格式
⏹栈
⏹垃圾收集堆
⏹存储区
Java虚拟机隐藏了计算机硬件和操作系统的复杂性。
使我们只面对单一的支持Java的计算机。
当我们写好Java源程序后,使用编译器将源代码转换成JVM的指令序列(字节代码),保存为.class。
执行Java程序时,JVM负责解释字节代码,JVM的指令转换成真实的机器指令,并执行。
自动内存回收(垃圾收集)
垃圾回收就是将程序不再使用的内存块释放出来,以提供给其它程序使用。
程序运行时需要占用一定内存空间,当程序退出后应该把占用的内存释放,在c,c++语言中由程序保证内存的释放,但如果程序员忘记释放内存,就会在内存中“垃圾”增多,影响其它程序运行;
Java语言实现自动垃圾回收处理,减轻了程序员的负担,杜绝了因内存管理而导致的程序中的问题。
程序员可以建议垃圾回收,通过调用System.gc()实现。
常见垃圾收集机制介绍
JVM中内存划分为:
堆栈(Stack)、堆(Heap)、静态存储(Static)
大多数垃圾收集使用了根集(rootset)这个概念;
所谓根集就量正在执行的Java程序可以访问的引用变量的集合(包括局部变量、参数、类变量),程序可以使用引用变量访问对象的属性和调用对象的方法。
垃圾收集首选需要确定从根开始哪些是可达的和哪些是不可达的,从根集可达的对象都是活动对象,它们不能作为垃圾被回收,这也包括从根集间接可达的对象。
而根集通过任意路径不可达的对象符合垃圾收集的条件,应该被回收。
引用计数法(ReferenceCountingCollector)
一般来说,堆中的每个对象对应一个引用计数器。
当每一次创建一个对象并赋给一个变量时,引用计数器置为1。
当对象被赋给任意变量时,引用计数器每次加1当对象出了作用域后(该对象丢弃不再使用),引用计数器减1,一旦引用计数器为0,对象就满足了垃圾收集的条件。
基于引用计数器的垃圾收集器运行较快,不会长时间中断程序执行,适宜地必须实时运行的程序。
但引用计数器增加了程序执行的开销,因为每次对象赋给新的变量,计数器加1,而每次现有对象出了作用域生,计数器减1。
Tracing算法(TracingCollector)
基于tracing算法的垃圾收集器从根集开始扫描,识别出哪些对象可达,哪些对象不可达,并用某种方式标记可达对象,例如对每个可达对象设置一个或多个位。
在扫描识别过程中,基于tracing算法的垃圾收集也称为标记和清除(mark-and-sweep)垃圾收集器。
compacting算法(CompactingCollector)
为了解决堆碎片问题,基于tracing的垃圾回收吸收了Compacting算法的思想,在清除的过程中,算法将所有的对象移到堆的一端,堆的另一端就变成了一个相邻的空闲内存区,收集器会对它移动的所有对象的所有引用进行更新,使得这些引用在新的位置能识别原来的对象。
在基于Compacting算法的收集器的实现中,一般增加句柄和句柄表。
垃圾回收的几个特点
垃圾收集发生的不可预知性:
由于实现了不同的垃圾收集算法和采用了不同的收集机制,所以它有可能是定时发生,有可能是当出现系统空闲CPU资源时发生,也有可能是和原始的垃圾收集一样,等到内存消耗出现极限时发生,这与垃圾收集器的选择和具体的设置都有关系。
垃圾收集的精确性:
(a)垃圾收集器能够精确标记活着的对象;
(b)垃圾收集器能够精确地定位对象之间的引用关系。
前者是完全地回收所有废弃对象的前提,否则就可能造成内存泄漏。
而后者则是实现归并和复制等算法的必要条件。
所有不可达对象都能够可靠地得到回收,所有对象都能够重新分配,允许对象的复制和对象内存的缩并,这样就有效地防止内存的支离破碎。
垃圾收集的实现和具体的JVM以及JVM的内存模型有非常紧密的关系。
不同的JVM可能采用不同的垃圾收集,而JVM的内存模型决定着该JVM可以采用哪些类型垃圾收集。
现在,HotSpot系列JVM中的内存系统都采用先进的面向对象的框架设计,这使得该系列JVM都可以采用最先进的垃圾收集。
代码运行过程
Java源程序通过"
编译"
,转换成字节码。
字节码被存储在.class文件中。
构成Java软件程序的字节代码在运行时被加载、校验并在解释器中运行。
当运行Applets时,字节码可被下载,然后由浏览器中的JVM进行解释。
解释器具备两种功能,一是执行字节代码,二是对底层硬件做适当调用。
在一些使用Java技术的运行环境中,部分校验过的字节码被编译成原始机器码并直接运行于硬件平台。
这就使Java软件代码能够以接近C或C++的速度运行,只是在加载时,因为要编译成原始机器码而略有延迟。
Java技术运行字节代码包含如下三大步骤:
⏹加载代码-由类加载器执行
⏹校验代码-由字节码校验器执行
⏹执行代码-由运行时的解释器执行
(Java程序运行的三大步骤)
类加载器
类加载器为程序的执行,加载所需要的类。
类加载器将本地文件系统的类名空间,与来自网络的类名空间相分离,以增加安全性。
当全部类被加载后,可执行文件的存储器格式被确定。
这时,特定的存储器地址被分配给变量并创建检索表格。
由于存储器格式在运行时出现,因而Java技术解释器增加了保护以防止对限制代码区的非法访问。
JVM中有四种类加载器,分别为(本节以下内容可以在以后再理解):
⏹BootStrapClassLoader:
启动类加载器:
虚拟机启动时最先加载系统加载关键的运行类的加载器。
⏹ExtClassLoader:
扩展类加载器,专门用来加载所有java.ext.dirs下的.jar文件。
开发者可以通过把自己的.jar文件或库文件加入到扩展目录的classpath,使其可以被扩展类加载器读取。
⏹AppClassLoader:
应用(系统)类加载器,用来读取所有的对应在java.class.path系统属性的路径下的类
以上三个类在JDK中不能查到,他们是JVM底层使用的,我们可以认为这三者关系如下:
BootStrapClassLoader<
-ExtClassLoader<
-AppClassLoader
JDK中定义了一些ClassLoader类,我们可以观察到继承关系如下:
ClassLoader<
-SecureClassLoader<
-URLClassLoader<
我们也可以继承ClassLoader类制作自己的ClassLoader(用户定义的类加载器)。
一些关于ClassLoader的常用方法:
⏹sun.misc.Launcher.getBootstrapClassPath().getURLs();
//根据以上叙述,应该是先获取启动类路径再转成路径的数组。
⏹MyClass.class.getClassLoader();
//MyClass是类名
⏹ClassLoader.getSystemClassLoader();
//获得系统(应用)级类加载器
⏹ClassLoader.getSystemClassLoader().getClass();
//可以知道这个类加载器的名字等了
⏹java.lang.Thread.getContextClassLoader();
//获取当前线程的上下文类加载器。
字节代码校验器
所有来源于网络的class文件都要经过字节码校验器。
字节码校验器主要测试以下内容:
⏹代码段语法格式是否正确?
⏹有无违反规则的非法代码?
⏹是否违反对象访问权限?
⏹是否试图改变对象类型?
字节码校验器对程序代码进行四遍校验,这可以保证代码符合JVM规范并且不破坏系统的完整性。
如果校验器在完成四遍校验后未返回出错信息,则下列各项要求会得到保证:
⏹程序代码所在的类,符合JVM规范的类文件格式。
⏹无访问限制违例。
⏹代码未引起操作数栈上溢或下溢。
⏹所有操作代码的参数类型将总是正确的。
⏹无非法数据转换发生,例如:
将整数转换为对象引用。
Java安装配置
各平台安装程序可以到SUN的网站()下载,在安装完成后应该进行配置,通常集成开发环境(IDE)自带JDK或进行了自动配置,如果我们通过控制台编译或运行Java程序则必须手动配置。
JDK:
是Java开发工具包(J2SESoftwareDevelopmentKit)的缩写,用Java语言编写applet小程序和应用程序的软件开发环境,Java开发者应该安装JDK,并且通常JDK中已包含一个JRE拷贝。
JRE:
是Java运行环境(JavaRuntimeEnviroment)的缩写。
它基本上就和Java虚拟机是同一个概念,运行Java程序的应该安装JRE。
(JDK安装目录示例)
⏹bin:
java常用开发工具目录,例如javac,java,jar等工具。
⏹demo:
sun提供的一些用于java开发的示范,如有关applets,jfc,plugin等。
⏹include:
Java提供用于c/c++调用的.h文件;
⏹jre:
对应版本的java运行环境文件
⏹sample:
java案例。
⏹lib:
java类库目录
Windows环境变量
应设置的环境变量包括:
JAVA_HOME,PATH,CLASSPATH。
假设J2DK安装在“C:
\JDK1.5”,环境变量可设置为:
⏹JAVA_HOME=C:
\JDK1.5
⏹CLASSPATH=.
⏹PATH=%JAVA_HOME%\BIN;
%PATH%
(Windows下环境变量的设置)
Linux下环境变量
假设jdk安装在/home/jdk1.5目录下,修改配置文件/etc/profiles,在文件的尾部加入如下信息:
JAVA_HOME=/home/jdk1.5
CLASSPATH=.
PATH=$JAVA_HOME/bin:
$PATH
Java技术的优点
Java技术取得今天这样的成就,依赖于这门技术的先进性,Java技术具有下列优点:
⏹简单、健壮:
java=(c++)--++;
许多高级语言都要由程序员进行指针运算和存储器管理。
这项工作即复杂又容易出错。
Java不需要程序员进行指针运算和存储器管理,简化了设计,减少了出错的可能性。
⏹面向对象:
Java是面向对象的程序设计语言。
与面向过程的语言相比,面向对象的语言更能反映人类对世界的认识和处理模式,具有良好的代码重用性。
处理复杂、庞大而且不断变化的信息系统,必须使用面向对象的程序设计语言。
⏹分布式:
目前,在所有软件产品中,仅供单个计算机使用的单机版软件所占的比例越来越小。
大多数软件都可以运行在网络环境中。
Java拥有一个网络协议对象库(TCP/IP,HTTP,FTP等),可以象访问当地文件一样访问Internet上的对象。
⏹改进的解释性:
为弥补解释语言速度较慢的不足,Java采用预编译的办法,将原程序生成字节代码,减轻运行时的解释工作。
另一方面,有些Java运行环境采用Just-In-Time(JIT)编译器将字节代码编译成机器码直接运行,这种运行环境对于重复执行的服务器端软件特别有效,可以达到C语言的速度。
⏹安全:
Java语言在编译时删除了指针和内存分配,在运行时检查字节代码,拒绝执行非法的内存访问,超越权限的访问等。
可以防御黑客攻击。
⏹平台无关:
Java通过采用虚拟机技术真正实现了与平台无关。
Java软件是真正跨平台可移植的。
⏹多线程:
允许一个应用程序同时做多个任务。
⏹动态性:
Java允许下载代码模块,因此,当程序运行时也能动态升级。
⏹高性能:
经过实际的综合评测得出结论,Java是高性能的。
第一个Java程序
编写一个程序,输出一行文本信息:
"
WelcometoJavaProgramming"
编辑器的使用
Java代码的开发可以使用常见的编辑器,如:
写字板,Editplus,UltraEdit,也可以使用专用的开发工具,如:
JBuilder,Eclipse,NetBeans,JCreator等。
在开始学习时,建议先学习使用带有关键字颜色提示的EditPlus开发Java代码。
Editplus下的Java程序显示
编写程序
1//这是一行注释
2publicclassWelcome{
3
4publicstaticvoidmain(String[]args){
5System.out.println("
WelcometoJavaProgramming!
);
6}//main方法结束
7
8}//类结束
行1:
注释:
用来说明程序的作用
行2:
开始声明一个类,类名为Welcome,class是JAVA的关键字,用来定义类,public为访问说明。
在这里我们声明了一个类,类的名字为Welcome.
行3,7:
空行,用来增加程序的可读性
行4:
是JAVA应用程序必须包含的方法,被称为入口方法:
程序运行时从这里开始执行,其形式必须是:
publicstaticvoidmain(String[]args)或者
staticpublicvoidmain(String[]args)
上面的语句里,只能修改args这个字符串数组的名字。
static表示直接能够加载该方法运行。
void是方法的返回类型,每个方法必须有返回类型(除了构造方法)。
main是方法的名字,是程序的入口调用的方法。
String[]是方法的参数,必须是String数组类型的。
行5:
System.out.println("
就是输出字符串的,双引号中的字符串会在控制台输出。
也可以使用以下语句输出一个对话框显示信息:
JOptionPane.showMessageDialog(null,"
Welcome\nto\nJava\nProgramming!
);
程序的开头要加入以下语句:
importjavax.swing.JOptionPane;
行6:
}"
表示方法的结束。
行8:
表示类的结束。
编写完成后,以Welcome.java文件名保存到指定目录中。
配置环境和编译
在控制台使用如下命令编译刚才保存的文件Welcome.java
将会生成对应类名的.class文件:
Welcome.class,如下图:
在Editplus下也可以直接编译并运行JAVA代码,配置如下:
打开用户工具栏:
视图/工具栏/窗口/用户工具栏
选择配置工具栏
配置相应的内容
运行JAVA程序
在控制台使用如下命令运行刚才生成的文件Welcome.class
注意:
运行时,不可以加文件的扩展名.class
内容总结
JAVA是一门丰富而且复杂的技术;
JAVA虚拟机处于核心地位,保障了JAVA的平台独立性;
虚拟机可以进行自动内存管理,并且进行安全检查;
JAVA包含三个版本,分别适用于不同的应用需求;
开发JAVA程序的三大步骤:
编写JAVA源程序,编译源程序,运行程序。
独立实践
实践1:
编写程序,实现在控制台输出一行文本"
ILOVEJAVA!
。
实践2:
编写程序,实现在对话框输出文本"
实践3:
假设:
Welcome.java在d:
\study,编译后生成Welcome.class.
如何可以在任意路径运行此程序?
此教程出自ITjob软件开发教程网,如有转载请注明出处,更多教程请访问ITjob教程网
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第一章 java开始 java 开始