


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1继承(Inheritance):在既有的class的基础上,使用extends关键字,构造出新的class。(可以理解为把parent class作为成员“放”入了新class) 2Thinking in Java learning notes 着Java程序的执行速率会有不一致的现象(因此无法在极其重视程序执行速率的场合,此类程序通常称为即时(real time)程序虽然并非所有的real time 程序设计问题都如此严峻)。 异常处理:面对错误的发生 错误处理始终是程序语言最困难的问题之一。由于良好的错误处理系统很难设计,导致许多程序语言干错直接略去此议题,直接留给程序库设计者。当然,这样做十分依赖程序员自身的警觉性,而非语言本身的法制性。如果程序员不够警觉,则这些问题很有可能被忽略。 “异常处理机制”将错误处理直接内嵌于程序语言中,有时甚至内嵌于OS中,所谓exception是一种对象,可在错误发生点被throw,并在适当的处理程序中被catch,介意处理特定类型的错误。当错误发生时,已成处理机制会采取一条截然不同的执行路径。因此,它不会干扰程序代码的正常执行,也使代码的撰写更加单纯。 Java的异常处理机制在众多程序语言中格外引人注目,因为Java一开始就将异常处理机制内嵌进来,强迫你使用。如果没有撰写适当的处理异常代码,便会发生编译错误。 多线程 程序设计有一个基础的概念,就是必须能够同时处理多个task。 处理此问题的办法: 中断服务常式(interrupt service routine):通过硬件触发,暂停主进程执行。(难度高,不具可携性) 多线程(multithreading):将问题切割为多个可独立执行的片段,让程序更具反应力,这些片段即所谓的线程。 通常,线程只是一种用来分配单一处理器执行时间的机制。但如果OS支持多处理器的话,不同的线程可以被指派到不同的处理器进行,真正做并行(parallel)。在程序语言这个层次上提供多线程,所能达到的便利之一便是,让程序设计者不需考虑及其上究竟有多少个处理器,把程序在逻辑上划分为多个线程。当然,如果有多个CPU,不需特别的调整,程序就能执行的更快一些。 在发生资源共享时,会出现隐约的问题,则需要锁的机制来解决。 Java在程序语言中内置了线程功能,让这一个复杂问题变得单纯。一个线程以一个对象表示。同时也提供邮箱的资源锁定功能,用来锁定任何对性所用的内存,使同一时间内一个线程“独占”一个对象。(可使用关键字synchronized实现) 现在,想象你正在位于某个函数之内,你想取得当前对象的reference。由于该reference是由编译器偷偷传入,所以并不存在其识别名称。为此,关键字this诞生。这个关键字仅用于函数之内,能取得“唤起此函数”的那个对象之reference。你可以采用你面对任何object reference一样的处理方式来处理这个this。你可以: 在构造函数中使用this 在成员方法中使用this 在数据成员上使用this 1.static的含义(P145) static函数即是指:对于这个函数,没有所谓的this,你无法在static函数中直接(传入一个对象的reference给静态函数间接调用也可,但不如nonstatic来的方便)调用nonstatic函数(反之可行)。这很像C中的全局函数,而Java中没有全局函数,你只能通过将static函数置于class之中,以提供对其他static函数和static数据成员的访问,实现类似于C的全局函数。 当然,在你的程序中出现static函数对于解决某些问题是高效的,但是如果你的程序出现了大量的static函数,也许你的思想已经和OO思想背道而驰,你这时就应该考虑你的设计了。 清理(cleanup)、终结(finalization)与GC(P146) Java提供的GC会在程序运行时回收那些不再使用的对象内存空间,但是如果你的对象是以某种特殊(不是用new产生对象,而是使用Java native interface,JNI调用其他语言函数(如C中的malloc()函数族系)的方式产生对象,则GC就不知道如何释放这个“特殊”内存。为了因应这种情况,Java提供一个finalize()函数,你可以为你的class定义此函数,当GC打算开始释放你的对象所占用的内存空间时,会先调用其finalize(),并在下一次GC回收动作发生时才回收该对象所占用的内存。但是,你必须注意以下几点: 垃圾回收和C+中的析构函数(destruction)不等价:即,在你永远不需要某个对象前,如果某些动作要执行,你必须撰写一个函数来执行清理动作。而 15 Thinking in Java learning notes 在C+中是通过析构函数的机制来解决的。 你的对象可能不会被回收:即,GC有可能在你的程序中完全没有启动(因为你的程序可能永远不会逼近内存用完之时,那些内存在程序终止时一次性归还给OS。)。当然,GC没有启动也就意味着在运行时不需要付出额外代价。 垃圾回收动作只回收内存:GC存在的唯一理由就是回收那些在程序中再也用不到的内存空间(这里指对象内存)。当你以“对象生成”之外的方式(如JNI)分配了某种存储空间,就需要在finalize()中以适当的方式加以处理(如调用原生函数)以防止memory leaks发生。 至此,你必须明白:你不应该过度的使用finalized()函数,它不是摆放正常清理动作的合适地点。那么,哪里才是正常清理动作的场所呢?答案很简单,你必须在打算进行清理时调用自己撰写的清理函数。 综上所述:GC的存在无法消除对析构函数的需求,也无法取代它的功用(而且你决不应该直接调用finalize(),所以这不是解决此问题的合适手段)。除了空间的释放,如果你需要执行其他清理动作,你仍然需要自己调用合适的函数,这个函数和C+的析构函数等效,仅仅是少了点便利性。 关键字final 关键字final:基本意思是“这是不能被改变的”。 不变的数据很有用,因为它可以是永远不变的“编译期(compiletime constant)”常量(注:编译期间可以执行某些运算以减少执行起的负担),也可以在“执行期(runtime)”被初始化,而你不想改变它。 可以使用final的三个地方:data,method,class。 final data: 当final用于基本数据类型时,final让其值(value)保持不变,但是当用于object reference时,final仅让reference保持不变。也就是说当reference一旦被初始化用于代表某个对象时,便再也不能改变指向另一个对象,但对象本身的内容确实可以改变的。final对array的作用和对reference的作用一样。 如果一个数据既是static又是final,那么他会拥有一块
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑工程施工技术创新与应用方案
- 2025年维修电工面试问题及答案
- 浙教版科学七年级下册《重力》听评课记录
- 水库上下游协调调度方案
- 静脉输液考试题及答案2025
- 2025谈判响应声明
- 人教版一年级下册数学听评课记录《5 认识人民币 第1课时 认识人民币及元、角、分》
- 部编版语文七年级上册第19课《动物笑谈》听评课记录3
- 初中美术《中国民间美术-剪纸》单元听评课记录以及思维导图
- 2025-2030年中国砷化镓太阳能电池市场调研分析及投资前景研究预测报告 - 副本
- 温硝化制硝基苯装置的改进
- GB/T 43137-2023土方机械液压破碎锤术语和商业规格
- 京东集团员工手册-京东
- 2023年苏州市星海实验中学小升初分班考试数学模拟试卷及答案解析
- GB/T 37915-2019社区商业设施设置与功能要求
- GB/T 31298-2014TC4钛合金厚板
- GB/T 27746-2011低压电器用金属氧化物压敏电阻器(MOV)技术规范
- GB/T 22237-2008表面活性剂表面张力的测定
- GB/T 13667.3-2003手动密集书架技术条件
- 导轨及线槽项目投资方案报告模板
- 复旦大学<比较财政学>课程教学大纲
评论
0/150
提交评论