@

一.Introduction

第一篇博客发布,渴望做好 Java后端开发 ,希望大家可以多多指教!

1.抽象过程

人解决问题的复杂性取决于抽象的类型和质量。

(1)汇编语言 是对 底层机器 的轻微抽象。

(2)C 等语言是对 汇编语言 的抽象。

以上语言的所做的抽象在解决问题时,要基于计算机的结构(移植性不好,维护成本较高)。

(3)Java 是针对解问题建模,以虚拟机作为中间层,方便移植,跨平台性极好。

2.面向对象语言(包括Java)的五个基本特性

(1)万物皆为对象

(2)程序是对象的集合,他们通过发送消息来告诉彼此想要做的

(3)每个对象都有自己的由其他对象所构成的存储(所有的类都有同一个基类)。

(4)每个对象都有类。(每个对象都是某个类的一个实例)

(5)某一特定类型的所有对象都可以接受同样的消息(例:后面一个"圆形"类型的对象能够接受所有发送给"几何型"对象的消息)

3.每个对象都提供服务

将对象看做服务,有助于提高对象的内聚性。(问题一般将过多的功能集中在一个对象中。)高内聚即将对象各个功能" 组合 "的很好。良好的面向对象的设计中,每个对象很好的完成一项任务,但不去做更多的事情。

(1)第一个对象提供支票排版的目录的服务

(2)第二个对象是通用的打印接口(打印服务)

(3)第三个对象调用另外两个对象的服务完成最终的打印

4.public、private、protected三者的区别

(1)public后面的元素对任何对象都是可用的。

(2)private除类型创建者和类型的内部方法之外任何人都不能访问。

(3)protected与private的作用相当,差别在于继承的类可以访问protected成员,但是不能访问private成员。

5.Java的默认访问权限(包访问权限)

类可以访问同一个包(库构件)中的其他类的成员,包之外这些成员相当于指定了private。

6.组合与继承

(1)组合:利用现有的类合成新类(如果组合是动态发生的,组合被称为聚合)

新类的成员对象常被声明为private,不干扰客户端代码的情况下,在运行时修改这些成员对象,来动态修改程序。

(2)继承:源类(基类、超类或父类)发生变动后,被修改的副本(导出类、继承类或子类)

(例:几何形——圆形、正方形、三角形(每种都具有额外的特性和行为))

思考---

1°:导出类+新方法——基类需不需要此方法

2°:导出类可使用与基类同名的方法来覆盖基类中同名的方法(即使用相同的接口方法,在新类中做些不同的事情

3°:前期绑定:非面向对象的编译器产生的函数调用会引起所谓的前期绑定,编译器产生一个具体函数名字的调用,而运行时将这个调用解析到被执行的代码的绝对地址。

4°:后期绑定:面向对象编程时,程序直到运行时才能确定代码的地址,故采用后期绑定。

7.多态

编译器编译doSomething()的代码时,不确定doSomething()的确切类型。如果期望它的编译结果是调用基类Shape的erase()和draw()版本,而不是具体的Circle、Square或Line的相应版本。多态使得事情总是正确被处理。

1.定义:多态—不同类的对象对同一消息做出响应,同一消息根据对象的不同采用不同的行为方式。

2.实现方式:通过动态绑定实现多态,执行期间根据对象的实际类型,调用其相应的方法。

3.条件

(1)继承

(2)覆盖(方法重写)

(3)父类引用指向子类对象

8.容器(自己最浅显的理解)

容器的基本理解:不知道解决某个特定问题需要多少个对象,或者他们将存活多久,就不知道如何存储这些对象,去找容器。被称为容器的新对象,在任何时候都可以扩充自己来容纳要置于其中的所有东西。因此不需要知道将来有多少对象置于容器中,只要自己创建一个容器对象,然后让它处理所有细节。

9.参数化类型

容器 存储Java中的通用类型:Object单根继承结构意味着所有的东西都是Object类型,可以存储Object的容易可以存储任何东西,因而很容易被复用。使用这样的容器,在其内置入对象引用,稍后将其取回。

(1)将对象置入容器时,它必须被向上转型为Object,因此会丢失身份(向上转型:子类转向基类或称父类

(2)将它取出时,获取对Object对象的引用,不是置入时的那个类型的对象的引用。需要向下转型为置入时那个类型的对象的引用。(向下转型:父类或称基类转向子类)但是向下转型有很大的危险性,如果出现错误会引发异常。

通过参数化机制编译器可以定制一个只收纳和取出Shape对象的容器,则能较为安全快捷的实现向上转型向下转型

10.并发编程

一个处理器在同一时刻可以执行多个任务。即程序能够停下当前的工作,转而去处理某个其他问题,然后返回主进程。上述概念在java中成为并发,并发中有一个隐患:共享资源。多个并行任务都要访问同一资源,那么就会出问题。原因:以两个进程同时向一台打印机发送信息为例,一个进程执行中,另一个进程进来,前一个进程需要保护现场,相当于保护罪犯现场,别的人不能进来,因此会出现问题。解决这个问题,对访问共享资源的多个任务,有一个进程在访问共享资源时上锁,其他进程不能进来,访问结束后,释放资源锁,其他任务可以使用共享资源。

二.Everything Is an Object

1.用引用操纵对象

Java尽管将一切都看作对象,但操作的标识符实际上是对象的一个“引用”。可以想象成遥控器(引用)来操纵电视机(对象)。

(1)遥控器(引用)可以在房间的不同位置,仍能调控电视机(对象)。

(2)没有电视机,遥控器也可以独立存在。

2.存储位置

(1) 寄存器。寄存器是最快的存储区,位于不同与其他存储区的地方—处理器内部。

(2) 堆栈。对象的引用放在堆栈中。

(3) 堆。Java的所有对象存放在堆中。

(4) 常量存储。常量值直接放在代码内部,在嵌入式系统中,常量会放在ROM中(只读存储器)。

(5) 非RAM存储。数据活在程序之外,完全不受程序的控制。两个基本的例子是流对象持久化对象

  1°:流对象:对象转化成字节流,通常被发送给另一台机器。

  2°:持久化对象:它被放在磁盘上,即便程序终止,他们仍可以保持自己的状态。这种技巧:对象可以转化为其他媒介上的事物,需要时可以恢复成常规的、基于RAM的对象。

3.基本类型(无需使用new即可创建)

一般使用new创建一个对象,将其放在堆里,但这种方法对创建特别小的、简单的变量往往不是很有效。而基本类型所具有的包装类,使得可以在堆中创建一个非基本对象,用来表示对应的基本类型。(无需使用new)

(1)char c = ‘x’;

(2)Character ch = new Character(‘x’); //这个有new

(3)Character ch = ‘x’; //Java的自动包装功能可以自动将基本类型转为包装器类型。

   char ch = new Character(‘x’);

4.new创建对象的作用域

new创建的对象在执行过程中可能一直存在,只是对象的引用可能会因超出作用域范围而不可用。好像遥控器在电视机的屋子里可以使用,但是拿到另一个屋子里面就不能控制电视机了,但是电视机仍然存在。

5.static的作用

通常情况下,创建类时,就是在描述那个类的对象的外观和行为。除非用new创建那个类的对象,才能分配数据空间,方法才可以被调用。当时有两种情形是无法解决的。

(1)只想为某特定区域分配单一存储空间,不考虑要创建多少个对象,甚至不考虑创建对象。

(2)希望某个方法不与包含它的类的任何对象实例关联在一起。即没有创建对象,也可以通过类调用这个方法。

在此情形下诞生了static:

class StaticTest{
static int i=47;
}
//调用方法:
StaticTest.i++;
StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();
st1.i++;
st2.i++;
//在此情形下i的数值增加了3次,此时i==50.
class Incremental(){
static void increment(){
StaticTest.i++;
}
}
Incremental.increment();
Incremental sf = new Incremental();
sf.increment();
//在此情形下,i增加了两次。

6.javadoc注释(未详细查看,暂时认识不到它的重要性)

希望有心人可以补充一下!!!!

7.《Thinking in Java》第四版课后习题答案链接:

http://greggordon.org/java/tij4/solutions.htm

链接来自网络,如有违权,联系后即刻删除!!!!!

三.疑惑点

1.对象引用和对象引用的区别

1°:使用文字的形式说明

eg:Vehicle veh1 = new Vehicle();

这个语句的目的是创建一个对象,其实包含了四个动作。

(1)右面的 ”new Vehicle“ ,以Vehicle为模板,在堆里面创建了一个Vehicle类对象。

(2)末尾的“ () ”意味着,对象创建后,立即调用Vehicle类的构造函数,对刚生成的对象进行初始化。构造函数一定会存在,如果不存在,java默认生成一个构造函数。

(3)左边的“Vehicle veh1”是创建一个Vehicle类引用变量,放在栈里面,即以后用来指向Vehicle对象的对象引用

(4)“=”操作符,将对象引用指向创建的对象。

2°:使用图例加以说明

2.基本类型和其对应的包装容器类的区别

(1)基本类型直接存储在栈中

· 基本类型具有的包装容器,在堆中创建一个非基本对象,用来表示对应的基本类型

(2)基本类型与包装容器类对应如下

   boolean Boolearn

   byte Byte

   short Short

   char Character

   int Int

   float Float

   long Long

   double Double

(3)仅仅学习前两章节,涉及较少,后面回来补充!!!

《java编程思想(第四版)》第一二章学习笔记的更多相关文章

  1. 《Linux内核设计与实现》 第一二章学习笔记

    <Linux内核设计与实现> 第一二章学习笔记 第一章 Linux内核简介 1.1 Unix的历史 Unix的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆 ...

  2. 《Linux内核设计与实现》第一、二章学习笔记

    <Linux内核设计与实现>第一.二章学习笔记 姓名:王玮怡  学号:20135116 第一章 Linux内核简介 一.关于Unix ——一个支持抢占式多任务.多线程.虚拟内存.换页.动态 ...

  3. 《Linux内核设计与实现》第四周读书笔记——第五章

    <Linux内核设计与实现>第四周读书笔记--第五章 20135301张忻 估算学习时间:共1.5小时 读书:1.0 代码:0 作业:0 博客:0.5 实际学习时间:共2.0小时 读书:1 ...

  4. LINUX内核设计与实现第三周读书笔记

    LINUX内核设计与实现第三周读书笔记 第一章 LINUX内核简介 1.1 Unix的历史 1969年的夏天,贝尔实验室的程序员们在一台PDR-7型机上实现了Unix这个全新的操作系统. 1973年, ...

  5. 《Linux内核设计与实现》Chapter 3 读书笔记

    <Linux内核设计与实现>Chapter 3 读书笔记 进程管理是所有操作系统的心脏所在. 一.进程 1.进程就是处于执行期的程序以及它所包含的资源的总称. 2.线程是在进程中活动的对象 ...

  6. 《Linux内核设计与实现》Chapter 1 读书笔记

    <Linux内核设计与实现>Chapter 1 读书笔记 一.Unix的特点 Unix从Multics中产生,是一个强大.健壮和稳定的操作系统. 特点 1.很简洁 2.在Unix系统中,所 ...

  7. 《Linux内核设计与实现》Chapter 2 读书笔记

    <Linux内核设计与实现>Chapter 2 读书笔记 一.获取内核源码 1.使用Git 我们曾经在以前的学习中使用过Git方法 $ git clone git://git.kernel ...

  8. 《Linux内核设计与实现》Chapter 5 读书笔记

    <Linux内核设计与实现>Chapter 5 读书笔记 在现代操作系统中,内核提供了用户进程与内核进行交互的一组接口,这些接口的作用是: 使应用程序受限地访问硬件设备 提供创建新进程与已 ...

  9. 《Linux内核设计与实现》Chapter 18 读书笔记

    <Linux内核设计与实现>Chapter 18 读书笔记 一.准备开始 一个bug 一个藏匿bug的内核版本 知道这个bug最早出现在哪个内核版本中. 相关内核代码的知识和运气 想要成功 ...

随机推荐

  1. Python3 并发编程1

    目录 操作系统发展 穿孔卡片 批处理 多道技术(单核) 并发与并行 进程 程序与进程 进程调度 进程的三个状态 同步和异步 阻塞与非阻塞 僵尸进程与孤儿进程 守护进程 Python中的进程操作 Pro ...

  2. pyplot概述

            matplotlib.pyplot 是命令行风格的函数集,让matplotlib看起来像MATLAB.Each一样工作.pyplot函数能够对画布(figure)进行一些改变,例如:创 ...

  3. 小白的springboot之路(十)、全局异常处理

    0.前言 任何系统,我们不会傻傻的在每一个地方进行异常捕获和处理,整个系统一般我们会在一个的地方统一进行异常处理,spring boot全局异常处理很简单: 介绍前先说点题外话,我们现在开发系统,都是 ...

  4. 【Element UI】使用问题记录

    [Element UI]使用问题记录 转载:https://www.cnblogs.com/yangchongxing/p/10750994.html 下载地址: https://unpkg.com/ ...

  5. poj 2955 Brackets (区间dp基础题)

    We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a ...

  6. SQL- SQL插入与更新删除

    一 前言 经过之前的 [SQL]-SQL介绍, [SQL]- SQL检索阶段一, [SQL]-sql检索阶段二 的三篇文章你已经学会的sql的相关概念和如何查询数据库,这篇文章主要后续对数据库表的进入 ...

  7. 《Java基础知识》Java 泛型详解

    JDK 1.5 之后,Java 通过泛型解决了容器类型安全这一问题,而几乎所有人接触泛型也是通过Java的容器.那么泛型究竟是什么? 泛型的本质是参数化类型:也就是说,泛型就是将所操作的数据类型作为参 ...

  8. 在项目中在线使用Iconfont图标

    Iconfont真的很强大,图标数量惊人,基本任意的关键词都能搜索到你想要的结果.而且是国产的,网速会比较快,还可以改变图标颜色. 它提供svg.png.ai三种格式下载,之前我一直都是乖乖的一个个下 ...

  9. 一个类实现Java截屏并保存到指定文件夹

    不知小伙伴们有没有遇到过使用java来截屏的需求,截屏后保存到指定的目录,在桌面上没有任何体现,完全不知道已经被截屏了.至于截屏后怎么做,可能有的老铁只是好奇想知道某人在干啥?也有的老铁可能想进行文字 ...

  10. IT兄弟连 HTML5教程 CSS3属性特效 CSS3背景

    CSS3规范中对背景这一部分,新加入了一些有用的功能,如可以设置多个背景图片.可以指定背景大小.设置背景渐变等功能.CSS3规范中定义的背景属性新增了background-clip.backgroun ...