第二章 万事万皆对象(Java语言基础)

一、对象引用(Reference)

二、新建对象

  1. 既存型别
  2. 自定义型别

三、存储

  1. 寄存器:速度最快,位于处理器内部。但寄存器个数有限,由编译器根据本身的需求适当的分配使用,(对一个程序员来说)基本是一个感觉不到的存在。
  2. Stack(栈):位于一般的RAM(random-access memory,随机访问内存)中。处理器经由其指针提供直接的支持,分配新内存时指针后后移,释放内存时,指针前移。效率仅次于寄存器。Java编译器负责产生"控制指针移动"的程序代码,所以它必须能够完全掌握它所编译的程序中"存在stack里所有数据的实际大小和存活时间"。如此便限制了程序的弹性,也因此,我们只能将对象的reference存储于stack内,但却不能将一般的Java对象也置于其上。
  3. Heap(堆):Heap是一种通用性质的内存存储空间(存在RAM中),用来放置所有的Java对象,使用关键词new,便会自Heap分配空间。Heap分配的空间具有高度的弹性。但是从Heap分配空间比从stack分配所花费的时间多了不少。
  4. 静态存储空间(Static storage):存在于RAM里,该空间存放着"程序执行期间"一直存在的数据。使用关键词static,可以将某个对象内的特定成员设为静态,但Java对象本身绝无肯能置于静态存储空间中。
  5. 常量存储空间(Constant storage):常量值常会被直接置于程序代码里,也可以放到唯读内存(read-only memory,ROM)中。
  6. Non-RAM存储空间:若数据完全存活于程序之外,那么即使程序不执行,数据也能够继续存在,脱离程序的控制。streamed objects(串流化对象)和persistent objects(持久化对象)便是主要的两个例子。它们能够将对象转换为可存储与其他媒介的形式,并在必要时将所存储的数据还原成可存储与RAM中的一般对象。

四、基本型别(基本数据类型)

  1. 不使用new分配空间,产生一种变量(automatic),不是reference形式,此类变量直接存放数据值,并置于stack
  2. 每种基本型别都有其对应的外覆型别(包装类),用来操作由基本型别产生的对象,或用在Heap内产生代表该基本型别的非原始对象

五、高精度数值

  1. java.math.BigInteger:支持任意精度的整数
  2. java.math.BigDecimal:提供任意精度的定点数

六、Java中的数组

  1. Java语言的数组其实就是一块内存而已。Java保证数组一定会被初始化,而且程序员对数组的访问无法逾越范围(代价:每个数组得额外多出一点空间,并且得在执行时期对数组索引值进行检查)
  2. 当你产生某个存储对象的数组时,真实产生的其实是个存储references的数组。此数组建立后,其中每一个references皆会被自动设为某个特殊值。该值以关键字null表示。当Java看到null值时,便将这个referebnces视为"不指向任何对象"。使用任何reference之前,必须将某个对象指派给它,若某个reference的值为null,便会在执行期发生错误。数组也可以存储基本型别,编译器一样保证初始化动作的必然进行:这次它会将数组所占的内存全部清为零。

七、作用域(scope)

八、对象的生存周期

  1. 使用new来产生一个Java对象,即便离开了作用域(生存空间),该对象依然存在。
{
  String s=new String(" a string");
}/*end of scope*/

  2. s这个reference将在作用域之外消失,但是,s先前所指的那个String对象,仍然会继续占用内存。

  3. 不过Java有所谓的"垃圾回收器(garbage collector)"机制,它会逐一检视所有通过new所产生的对象,并在这些对象不再被引用时,"垃圾回收器"便释放这些对象的内存。因此你

    不必关心内存回收问题,只要关心对象的产生就好。所有对象,在你不需要的时候就会自动消失。

九、建立新的数据型别(class)

  1. 使用class关键字定义类
  2. 使用new关键字产生此类对象

十、数据成员(fields)和函数(methods)

  1. 数据成员可以是任何类型的对象,只要你通过reference来和它沟通就行。数据成员也可以是基本型别(不具备reference者)
  2. 每一个对象都持有用来存储数据成的空间;不同的对象彼此之间并不共享数据成员
  3. 基本成员(boolean,int...等基本型别)的缺省值

十一、方法,参数,返回值

十二、static关键字

  1. 无论产生了多少个对象,或不存在任何对象的情形下,那些特定数据的存储空间都只有一份(例:Java中的mian方法)
  2. 某个函数不要和class object绑在一起
  3. 可以通过对象来调用静态变量/方法
  4. 可以通过类名来调用静态变量/方法
class StaticTest{
  static int i=0;   public static void main(Stringp[] args){    StaticTest st_1=new StaticTest();     StaticTest st_2=new StaticTest(); System.out.println(st_1.i==st_2.i);  //true    System.out.println(st_1.i==StaticTest.i);    //true  }
}

十三、编译与执行

十四、注解及内嵌式文档

十五、javadoc

  1. Netbeans可以自动构建和官方文档相似的javadoc

十六、编码风格

时间: 2024-10-03 21:10:36

第二章 万事万皆对象(Java语言基础)的相关文章

第二章:一切皆对象。(一)

2.1.用引用操作对象. 1.一个形象的比喻:在java中,一切皆对象.但是操纵的标示符实际上是对象的一个“引用”(reference).可以想象成一个遥控器(引用)操纵电视机(对象). 想要换频道或者调整音量,实际操纵的是遥控器(引用),再由遥控器来操纵电视机(对象). 2.有5个不同的地方可以存储数据: 1.寄存器:这是最快的存储区.它位于处理器内部.寄存器的数量极其有限.根据需求进行分配,不能直接控制. 2.堆栈:位于通用RAM(随即访问存储器)中,堆栈指针若向下移动,则分配新的内存:若向

Thinking In Java笔记(第二章 一切都是对象)

第二章 一切都是对象 2.1 用引用操纵对象 每种语言都具有操纵内存中元素的方式,必须注意将要处理的是什么数据类型,是直接操纵元素还是基于某种特殊语法间接表示(例如C和C++里的指针)来操纵对象. java中一切都被视为对象,可以用单一固定的语法,但程序员所操纵的标识符实际上只是对象的一个"引用",引用可以独立于对象存在,也可以和实际的对象相关联.例如: String s1; String s2 = new String("hello world"); 上面的s1即

[Effective Java]第二章 创建和销毁对象

第一章      前言 略... 第二章      创建和销毁对象 1.            考虑用静态工厂方法代替构造器 创建对象方法:一是最常用的公有构造器,二是静态工厂方法.下面是一个Boolean的简单示例: public static Boolean valueOf(boolean b) { return (b ? Boolean.TRUE : Boolean.FALSE); } l  静态工厂方法与构造器不同的第一大优势在于,它们有名称. 作用不同的公有构造器只能通过参数来区别(因

『Java编程思想-第四版』第二章:一切都是对象

Java编程思想-第四版学习总结,此为第二章:一切都是对象. package com.w3cjava.second; @SuppressWarnings("all") public class Second { /** * Java编程思想(第四版) * 第2章 一切都是对象 * @param args */ public static void main(String[] args) { /** * 2.1 用引用操作对象 * 遥控器(引用)操作电视机(对象),改变音量,改变频道 *

Java图示(第二章 Java语言基础)

Java图示(第二章 Java语言基础) 三个基本部分:一个包声明(package语句).任意数量的引入(import语句).类和接口声明(class和interface语句) 1.包声明—package语句 1)包是类和接口的集合,即类库 2)用类库管理类,方便管理 3)Java类都在类库中 4)只有一条包声明,且为第一条 2.引入语句—import语句 1)import语句在包语句后,所有类或接口前 2)两种形式 (1)import 包名.类名: (2)import 包名*://编译器会识别

[Effective Java 读书笔记] 第二章 创建和销毁对象 第一条

第二章  创建和销毁对象 第一条 使用静态工厂方法替代构造器,原因: 静态工厂方法可以有不同的名字,也就是说,构造器只能通过参数的不同来区分不同的目的,静态工厂在名字上就能表达不同的目的 静态工厂方法不用每次调用的时候都创建新的对象(其实是因为它是static的,所以只能用static的,所以是一早就创建了,不需要重复创建吧..),比如书中 Boolean.valueOf(boolean) 1 public static final Boolean TRUE = new Boolean(true

第二章 java语言基础

2.1 java语言基础组成 关键字 标识符 注释 常量和变量 运算符 语句 函数 数组 2.1.1 标识符 1. 组成:由英文字母.数字._和$ 2. 规则: 不能以数字开头 不能使用关键字 3. java的命名规范 包名:所有字母都小写.xxyyy 类名:所有单词的首字母大写.XxxYy 变量名和函数名:第一个单词首字母小写,之后的每个单词首字母都大写.xxYyyZz 常量名:所有字母都大写,多个单词用下划线连接.XXX_YY 2.1.2 常量和变量 1. 常量:不能改变的数值 分类: 整数

第二十五节:Java语言基础-面向对象基础

面向对象 面向过程的代表主要是C语言,面向对象是相对面向过程而言,Java是面向对象的编程语言,面向过程是通过函数体现,面向过程主要是功能行为. 而对于面向对象而言,将功能封装到对象,所以面向对象是基于面向过程的.以前是主要以面向过程为思想,现在是将功能装进对象中,如果要用到功能时,就调用该对象即可. 面向对象是入门思想的进步,适用于人类的思考,将复杂的东西进行了简单化,将我们程序员从执行者变化成指挥者.由以前面向功能(面向过程)转变为面向对象(封装的功能). **** 面向对象设计思想 设计思

经典中的品味:第二章 C++基本的对象,类型和值(上)

经典中的品味:第二章 C++基本的对象,类型和值(上) 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 自律,是以积极而主动的态度,去解决人生的痛苦~ 上一章,我们大谈了Hello,World的一生.下面我们细细品味基础中的一些,从一个简单的案例开始,了解对象,类型等概念.我喜欢解释例子,让大家听着有味,不枯燥~ 2.1 一个简单问候的例子 最常见的就是keyBorad input(键盘输入).从HelloWorld