用reference操作对象
l 虽然抽象概念上你可以把所有东西都“视为”物件,但用以操作对象的识别字,实际上却只是其“reference”(引用、参照、指引)而已
l 安全的做法是在每次产生reference的同时便对其进行初始化,比如:
String s = “strings”
所有对象都必须由你建立
l 使用new关键字来建立,比如上例:String s = new String(“strings”)
l java提供了许多地已有类,但是最重要的环节是能创建自己的class
储存在哪里
l 寄存器(Registers)位于处理器中,数量有限,编译器分配
l 栈(Stack)位于RAM(随机寄存器)中,处理器通过栈指针(Stack Pointer)对它进行直接访问,存储在栈中的数据大小和生命周期必须是已知的,java把对象的reference放到栈中,但对象不在
l 堆(Heap)位于通用存储器,也在内存RAM中,用于放置对象,同栈不同,堆的优点是在分配空间的时候,编译器无需知道该分配多少空间,用new就可以分配到,分配堆的存储空间比分配栈的要慢一些
l 静态存储(Static Storage)意思是“固定的位置”(仍然在内存RAM中),静态存储里面的数据在整个程序的运行期间都能访问到,采用static关键字声明,java对象本身是不能放到静态存储器里的
l 固定存储(Constant Storage)存放常量值,这部分位于唯一寄存器(ROM),常量能为自己设置界限,在嵌入式系统中,就能选择是否把它们放入到ROM中
l 非内存的存储(Non-RAM Storage)程序如果不运行,它也还存在,两个最重要的例子是“流对象(streamed object)”和“永久性对象(presistent object)”,前者是一种会被送往另一台机器的,由对象转化成字节流;后者是保存在磁盘上的,能在程序中止后仍保存对象状态的文件,java提供了“轻量级永久性(lightweight persistence)”支持
特例:基本类型(Primitive Types)
l 这类不用new来创建,并且放置于stack中,并且每种类型所占的空间大小在java中是不变的,这也是java具有很高的可移植性的原因之一
l 所有数值类型(numberic types)都带有正负号
l 基本类型所谓的“外部类型”,允许在堆里创建一个表示这个基本类型的对象,这个对象不是基本类型,比如:
char c = ‘x’;
Character C = new Character(c);
或 Character C = new Character(‘x’);
l 高精度数值(High-precision numbers)java提供了两个用来进行高精度计算的classes:BigInteger和BigDecimal,虽然可以勉强说是外部类型,但它们却没有对应的基本类型,所有可以在Int和Float上的事情,都可以实施于它们,只不过是用“函数调用”取代基本类型的运算符(operators),以速度换取精度。
BigInteger所提供的整数支持任意精度
BigDecimal提供任意精度的定点数(fixed-point numbers)
Java中的数组(array)
不用再关心何时销毁对象,只需关心产生即可
生存空间(Scoping)- 作用域
对象的生存空间(Scope of Object)
l 垃圾回收器(garbage collector),不会造成内存溢出
数据成员(field)和成员函数(method)
l 在java中需要做的事情就是:定义classes、产生对象、将信息发送给对象
l 每一个对象都有用来存储数据成员的空间,不同的对象彼此之间并不共享数据成员
l 引用对象的数据成员 ObjectReference.member
l 数据成员属于基本类型时(primitive members)的缺省直(default values),如果是非类数据成员变量无法给缺省值
函数(method)、参数(arguments)、返回值(return values)
l java函数决定了某个对象究竟能接收到什么样的信息
l 函数包含:名称,参数,返回类型,函数体
returnType methodName ( /*arguments list*/ )
{
/*Method body*/
}
l 函数的调用: ObjectName.methodName(arg1,arg2,arg3)
l java中传递的都是物体对象的reference,其类型必须正确
l 函数可以接受其他物体对象作为参数,也可以发送信息给其他对象
名称的可视性(Name Visibility)
l 命名空间,用package包命名区分相同的变量名
l 关键字import可以明确告诉java编译器要使用的class究竟是哪一个,引入的是哪一个package(classes组成的一个程序库)
关键字static
l static可以完成两种情况:
不论产生了多少个对象,或根本就不存在对象,那些特定数据的存储空间都只有一份
希望某个函数不要和class object绑在一起,就是说可以不通过该类对象调用
l static数据成员调用方法 ObjectName.member 和 ClassName.member
l static成员函数调用方法 ObjectName.method()、ClassName.method()
l static函数的最重要用途之一是可以在不建立任何物体对象时调用其函数
l 有一组classes会被自动包含于每个JAVA程序中,java.lang
l class名称必须和文件名相同,该class必须要有main(),其标记格式为:
public static void main (String[] args){ }
用args.length来表示参数个数,用args[0]表示第一个参数,
args[1]表示第二个参数…..
args用来存储“命令行(command line)参数”
l static方法的调用不是通过对象,而是通过类
编译与执行(Compiling and Running)
l 使用javac进行编译 javac Test.java
l 使用java执行程序 java Test
程序的注释
l 使用javadoc可以把注释行程HTML文档
两种做法:嵌入式的HTML和文档标记(doc tags)
独立的文档标记是一些由“@”打头的命令,它们会被放在注释行的开头
内嵌式文档标记则可以出现在任何地方,也是由“@”开始,但用花括号括起来
l 注释文档根据它所注释的内容分成三类:类,变量和方法。注释在其前面紧挨
l javadoc只会处理public和protected的成员注释,可以使用-private来包含
l 在程序中可以按照HTML的格式来写注释,然后用javadoc可以形成文档
l 注释中都可以含有@see标签,这个功能让你可以参考其他的class说明文件,javadoc会自动为@see标签产生一个超连接,格式如下
@see classname
@see fully-qualified-classname
@see fully-qualified-classname#method-name
类文件采用的标签
l @version 格式:@version version-information
l @author 格式:@author author-information
l @since
l 使用的时候用javadoc –author Class.java
javadoc –version Class.java
变量文件采用的标签
l 只能使用@see和内嵌式HTML
方法文件采用的标签
l @param 格式:@param parameter-name description
用于描述参数,parameter-name参数名称,description参数描述
l @return 格式:@return description 描述返回值信息,可以延续数行
l @throws 格式:@throws fully-qualified-class-name description
用于描述异常出现
l @deprecated 这个标签表示此方法已经被更新,建议不要再使用
第二章 万事万物皆物件(Everything is an Object)
最新推荐文章于 2022-11-04 10:54:33 发布