第一天SL275的学习

 昨天晚上去听了SCJP的第一次培训课,现在开始也就开始了正式的SCJP的学习,但愿不要和老师上课的进度拉开特别大的距离,因为自已只学了一丁点,要在这12天时间来最大努力的学习Java,尽最大努力取得最好的结果吧!也但愿能在这一学期有这样一个,很多人看来没有用的证书吧!言归正传,开始今天的学习吧,昨在的课件没有拷到,就按照这个盗版书(我是瞎说的,培训班的同学们都认为这个质量不好)的进度来吧,呵呵!

  那我就象记流水帐一样的开始吧:)

  一、什么是Java技术?

        Java技术是:

            1.一种编程语言:Java语言的语法与C++相似,而语义与SmallTalk相似,任何传统语言能给创建的应用程序,Java都能够实现;

            2.一种开发环境;作为一种开发环境,Java提供了一系列开发工具:编译器,解释器,文档生成器,类文件打包工具,等等;

            3.一种应用程序环境;教材上主要也就说了:Java是典型的通用程序不需要依赖浏览器,可以运行于,只要有JREJava运行时环境)的任何机器当中,我感觉有点矛盾;

         在这一块,书上还提到了,applet程序,是用Java编写,驻留在WEB服务器中,由HTML调用,下载到浏览器当中,由浏览器来运行,为了节约时间,Applet都小,这好象并不能说明,这是一种应用程序环境吧!

这里可能说的应用程序环境也就是说,因为CLASS文件要在Java环境下才能解释才能运行的的原因吧!

          4.一种部署环境:什么是部署环境,我不太清楚,部署?也说不清楚,他这里说讲了两种部署环境:

·         No.1JRE,由J2SDKJava 2 Software Development Kit)提供的,包含了一套完整的Java技术包的所有类文件,包括基本语言类和GUI组件类以及高级的集合API 等等。

·         No.2:就是浏览器,说了大多数浏览器都提供了Java技术解释器和运行时环境,可是事实上,我觉的现在浏览器对applet的支持,越来越不行了。

二、Java技术的主要目标:

1.提供一种易于编程的语言:

·   取消了其它语言的一些缺陷,如C/C++中的内存管理和指针,这些都会影响代码的健壮性(健壮?不完全清楚)。

·   是面向对象的,有助于用生活中的术语使程序形象化。

·   能够编写简洁的代码,提高执行效率。

      2.提供一种解释环境:可以代来两个好处:

·   a.缩短编译---->链接-------->安装----------->测试这样一个过程的周期。

·   b。代码可移值性,可以使编定的代码能够在大多数操作系统上运行(JVM)

3使用用户能够运行多个活动线程

       4允许程序下载代码模块,使得在程序在运行周期内,可以动态改变程序

        5.提供更好的安全性,通过检查加载的代码模块来确保安全性

下列特性实现了上述目标:

一、Java虚拟机(JVM

Java虚拟机规范定义JVM如下:在真实的机器中(硬件)用软件模拟实现的一种虚拟的机器。JVM运行的代码存储在.class文件中,每个文件最多只能含有一个public类的代码。

“JVM规范提供了编译所有JAVA技术代码的硬件平台规范。这个规范使JAVA软件能够独立于平台,因为编译是针对被称为JVM通用机器而运行的。可用软件模拟在各种不同的计算机系统上运行通用机器,也可用硬件来实现这个虚拟机

编译器取得java源代码并生成字节码,字节码是能够被JVM解释的机器指令代码,每个JAVA技术解释器,不论是JAVA技术开发工具,还是能够运行APPLETWEB浏览器,都有一个JVM的实现,可能也就是说能是基于JVM而运行的吧。

JVM规范为下列概念提供了具体的定义:1.一套指令系统(相当于中央处理器(CPU))。2.一组寄存器。3.类定义规范。4.运行时堆栈(有点含糊)。5.垃圾收集堆。6.一个内存区。

JVM的代码格式由简法,高效的字节码构成。由JVM字节码表示的程序,必须保持正确的类型约定。大部分类型检查在编译时完成。

所有符合Java技术的解释器,必须能够运行:符合JVM规范中所指定的类文件格式的类文件。

     二、垃圾收集

许多语言允许在程序运行时动态分配内存,分配内存的过程根据语言的语法不同而不同,但总要涉及一个问题:返回一个指针指向一个内存块的起始位置。如果不再需要已分配的内存(引用该内存块的指针已经溢出),程序或运行环境该释放内存。

C/C++等语言中,内存的释放由程序员负表,因为不总是知道该何时释放内存,所以有时候,这是一件很痛苦的程序。不释放内存的程序会有可能最终崩溃(当系统中没有剩余内存可供分配时),这些程序被称为具有内存漏洞。

Java语言把程序员解脱出来,而不用再负表内存的释放。它提供了一个系统级的线程来跟踪每个内存的分配,在JVM的空闲周期,垃圾收集线程检查并释放那些可以释放的内存。垃圾收集在Java技术程序的生命周期中自动进行,它消除了释放内存的必要和产生内存漏洞的可能。然而在各种JVM实现中,垃圾收集机制会存在较大的差异。

三、Java运行时环境(JRE)

书上用了一副图来介绍了JRE的运行环境,我这里就用文字,他分了两个大模块。第一个就是编译(编译的意思:Java软件源代码从编写他们的文本格式转换为一套字节码,这些字节码存储在.class文件中):将编写好的.java文件用Javac编译成为.class文件。每二部分是运行时:用javaa命令调用类加载器加载,将。Class文件也就是字节码加载,后用字节码检验器检验合格后,送往解释器(有两个功能:执行字节码和正确调用底层硬件),再送往运行时,最后送到硬件(不知道是显示器之类的,还是送往机器内部运行)。而APPLET程序运行时,先下载那些字节代码,然后由内建于浏览器的JVM来解释该代码。

另外还有一幅图,是说有些java技术的运行时环境,将校验过的字节码直接编译成本地机器代码,并且直接在该硬件平台上运行。这样使得Java软件代码的执行速度接近C/C++,但是会有少量的时间延迟以使该代码被编译成为本地机器代码。

最后注:通过增加新的特性开放技术,SUN Microsystem增强了JVM,这些技术之一被称为Java Hotspot虚拟机,这得JAVA编程语言有和C++编译后的代码运行速度一样快的潜力。

JRE可以运行JVM编译的的代码并执行三个主要任务:

l     由类加载器加载代码,

l     由字节码校验器检验代码。

l     由运行时解释器执行代码。

类加载器:

加载程序执行的全部类,并使用“命名空间”保持本地文件系统的类分离(将本地文件系统的类的命名空间与从网络源导入的类分隔开),以增加安全性,由于总是先加载本地类,可限制任何“特洛伊木马”程序。当全部类被加载后,可执行文件的内存布局也就确定了下来。这时,符号引用被赋值为具体的内存地址,并创建了查询表格。由于内存布局在运行时发生,JAVA技术解释器增加了保护功能,以防止对受限代码区的未授权访问。

字节码校验器

Java软件代码在计算机中运行之前要经过几次测试。JVM将代码输入到一个字节码校验器,测试代码的段格式并检查那些非法代码,如:伪指针,违反对象访问权限、试图改变对象类型的。。等等。

书上还注了一点:所有通过网络导入的类文件都要经过字节码校验器。但不知道这句话是不是意味着,有些不是通过网络导入的类文件,是不是可以不经过字节码校验器???晕。。。。。。。。。。

校验过程:字节码校验器将对程序代码进行四次校验,可以保证代码符合JVM规范并且不违反系统的完整性,若校验器完成四次校验都没有返回错误信息,则可以保证:

*   代码符合JVM规范,类文件符合JVM规范指定的类文件格式

*   没有违反系统的完整性,没有访问限制违列

*   代码没有引起操作数堆栈的上溢或下溢

*   所有操作代码的参数类型都是正确的

*   无非法数据转换的发生,如:整型转换成指针型(对象引用)

后边还有第一个程序HelloJava.java程序的学习,这里时间原因就不写了,改天补上吧!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值