chapter_01 对象导论

1.1  Java语言基础Smalltalk的特性:

  1. 万物皆对象  可以将对象视为一种奇特的变量,它可以存储数据(成员变量),也可以在自身上执行操作(方法)。
  2. 程序对象的集合  它们通过发送消息告知彼此要做的事情。可以将消息视为对某个特定对象的方法的调用。
  3. 每个对象都拥有类型  每个对象都是某个类(class)的一个实例。类与类之间最大的区别在于“可以发送什么样的消息给他”。
  4. 某个特定类型的所有对象都可以接收同样的消息  这是继承的基础,能够发送给父类对象的消息一定可以发送给子类对象。

  对象的描述:对象具有状态(内部数据)、行为(方法)和标识(内存中的唯一地址值)。

1.2  每个对象都有一个接口

  类(class)描述了具有相同特性(数据元素/域)和行为(功能/方法)的对象集合。

  每个对象都只能满足某些请求,这些请求由对象的接口所定义,决定接口的接口类型。接口定义了对象所能发出的请求和能接收的消息。

1.5  复用具体实现

  一旦类被创建并测试完成,它就代表一个有用的代码单元。

  代码复用是面向对象程序设计语言最了不起的优点之一。

1.6  继承

  继承的简单描述:以现有类为基础,复制它,通过在副本中添加或修改来创建新类。子类复制了父类的接口,那么发送给父类对象的消息同样可以发送给子类对象。当对象接收特定的消息时,必须有某些代码被执行(对象方法处理消息请求)。

  使子父类之间产生差异的方法:

  1. 在子类中添加新的方法
  2. 改变继承自父类的方法(重写/覆盖 overriding)

1.7 伴随多态的可互换对象

  在处理类型层次的时候,常把对象不当作其所属的特定类型,而是将其作为基类对象来对待,这样可以编写不依赖特定对象类型的代码。但这存在一个问题,当向这些对象发送消息时,编译器无法确定到底执行哪段代码。

  在OOP中,程序直到运行时才能确定代码的地址。面向对象都是采取后期绑定的机制(第8章细讲。。。)

1.9  容器

  有时只有在程序运行时才能获知解决特定问题需要多少对象。

  面向对象程序设计创建一种新的容器(也成集合Collection)对象,该对象持有其他对象的引用,在需要的时候可以扩充自己的容量。

  参数化机制:

  Java SE5之前的容器只能存储Object类型,当将对象引用置于容器中时必须向上转型为Object类型。而取出时就要向下转型,但是向下转型不一定是安全的。Java SE5 引入参数化机制,可以创建只允许存储特定类型的对象引用的容器(第15章 泛型)。


chapter_02  一切都是对象

2.1 用引用操纵对象

  Java中一切都被视为对象,但操作的标识符实际上是对象的一个“引用”(reference)。

  可以拥有一个引用,但不一定要与一个具体对象相关联,例如 String s ,但如果此时向s发送消息,编译器会报错。

2.2 创建对象

  一旦创建了一个引用,就希望与一个新的对象相关联。关键字 new 的意思是“给我一个新对象!” (汪汪。。。)String s = new String("asdf");

  Java中的存储

  1. 寄存器  位于cpu中,数量极少,程序不能直接控制
  2. 堆栈  位于RAM中,堆栈指针向下移动,分配新内存;向上移动,释放内存。Java系统中存储于堆栈内的所有相必须有确切的生命周期,以便及时释放内存资源。Java中对象引用存储在这里。
  3. 堆  也位于RAM区,存放所有Java对象,编译器不需要知道存储在堆中数据需要存活多长时间。
  4. 常量存储  存储在常量池里

2.3 永远不要销毁对象

  1. 作用域(scope)决定了在其内定义的变量的可见性和生命周期,Java中作用域由花括号的位置决定。

{
  int x = 12;
  {
      int q = 20;
      // 此处 x 和 q 都可见
   }
   // 此处只有 x 可见, q在作用域之外
}

  2. 对象的作用域  对象引用在在作用域之外就消失了(堆栈释放内存资源),但new的对象仍然存在于堆中,但是无法访问。Java用垃圾回收器来监控不会再被引用的对象。

2.4 创建新的数据类型:类

  关键字class表示“我准备告诉你一种新类型的对象看起来像什么样子”。

  类中可以设置两种元素:成员数据(field)和方法(method)。成员数据可以是任意类型的对象,可以通过其引用与其通信。如果成员数据是某个对象的引用,那么必须初始化该引用,以便使其与一个实际的对象相关联。

2.5 方法、参数和返回值

  Java的方法决定了一个对象可以接收什么样的消息。方法的基本组成:

  1. 方法名
  2. 参数列表  给出了要传递给方法的信息的类型和名称
  3. 返回值类型  方法调用后返回的值
  4. 方法体  方法的具体实现

  方法名和参数列表合称方法签名,可以唯一的标识出某个方法。方法只有通过对象才能调用,而且这个对象必须含有这个方法。

  参数列表指定要传递给方法的信息。参数列表必须指定每个传递对象的类型和名字,实际上传递的是对象的引用。

  return关键字的含义:首先表示方法已经结束,离开此方法;其次如果方法产生了一个值,该值就放到return后面。

2.6 构建Java程序

  1. 名称的唯一性  Java设计者希望程序员反用自己的域名,这样就能保证包名的唯一性,如com.znker.homepage 包名一律小写。

  2. import 指示编译器导包,使用通配符“ * ”可以导入整个包

  3. static 关键字 作用于两种情形:

    1) 只想为某个域分配单一的存储空间,即使不创建任何对象

    2) 希望某个方法不与包含它的类的任何对象相关联,即使不创建任何对象也能调用该方法

    所有,不创建任何对象的情况下也可以调用static修饰的域和static修饰的方法。

class StaticTest {
  static int i = 20;
}

    此时即使创建两个StaticTest对象,StaticTest.i 也只有一个存储空间,并且两个对象共享一个 i

    引用static修饰的变量的两种方法:1)通过一个对象去调用  2)使用类名调用 (推荐)。调用static修饰的方法也是这样,推荐通过类名直接调用 ClassName.method()

    static方法的重要作用就是在不创建任何对象的情况下调用,这对于mian()方法极为重要,因为这是运行程序的入口。

  

Thinking in Java 学习笔记(一)的更多相关文章

  1. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  2. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  3. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  4. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  5. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  6. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  7. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  8. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  9. Java学习笔记-多线程-创建线程的方式

    创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...

  10. 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类

    static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...

随机推荐

  1. LR12.53—第1课:构建Vuser脚本

    第1课:构建Vuser脚本 要生成系统上的负载,首先建立一个可以运行以模拟真实用户行为Vuser脚本.您使用VuGen创建和构建Vuser脚本. 在这一课中,你将涵盖以下主题: 介绍VuGen将 - ...

  2. C#有关数组内存的释放及动态数组问题

    一.数组内存释放问题 数组内存的释放可以按照如下语句实现: string [] aa=new string[2]; aa[0]="A"; aa[1]="B"; ...

  3. for 小曦

    安装GO 当前版本1.6.2 http://blog.163.com/hehaifeng1984@126/blog/static/690011362013101044011568/ 教程 https: ...

  4. redis高可用分布式集群

    一,高可用 高可用(High Availability),是当一台服务器停止服务后,对于业务及用户毫无影响. 停止服务的原因可能由于网卡.路由器.机房.CPU负载过高.内存溢出.自然灾害等不可预期的原 ...

  5. sql 时间(datetime)计算

    SELECT *FROM sc_sowu_orderreturnWHERE STATUS = '0'AND submit_time < DATE_ADD(now(), INTERVAL - 4 ...

  6. net命令

    net命令可以完成非常多的任务.通过键入 net /? 可以查看net命令的详细列表. 在所有的Windows机器上,net命令使用统一的命令集合,这对于网络管理员来说是非常方便的. 使用net命令可 ...

  7. Kolmogorov 的数学观与业绩

    https://www.douban.com/group/topic/11395706/ 作者:伊藤清 当我得知苏联伟大的数学家,84岁的 Andreyii Nikolaevich Kolmogoro ...

  8. Struts2和Spring的整合

    1.Struts和Spring之间的整合,还是配置问题. 2.最重要的是spring是个容器,原来所有的框架的使用是要注入到spring中的啊.... 怪不得,说它是个容器那,原来还真是个容器啊! 3 ...

  9. WinForm中WebBrowser的使用

    最近由于工作需要,研究了下Winform的WebBrowser控件,在这里给大家分享下. 1.WebBrowser导航 WebBrowser在进行导航的时候需要用到Navigate(string ur ...

  10. session和cookie工作原理说明

    session 第一次请求: session_start 1.第一次发送http请求,由于第一次未携带session_id ,首先自动生成一个session_id,初始化$_SESSION[]; 2. ...