java是一种OOP(面向对象)语言,它假设我们只进行面向对象设计。在学习java过程中我们可以感受到,在java中(几乎)一切都是对象。
用引用操纵对象
尽管java一切都可看作对象,但实际上我们操纵的是对象的一个“引用”。它指向保存在内存中的对象,就像我们用遥控器可以操控电视机。在生成对象语句
Person a =new Person();
中,Person是我们编写的类,类是对象的模版,这一句就表示初始化一个对象并把该对象的引用赋给a,而不是把整一个保存在内存中的元素拿出来。
对象的创建
对象创建出来以后,会被存储在哪些地方呢?在java中有五个地方可以存储数据。
寄存器:速度最快,但你无法控制。
堆栈:速度仅次于寄存器,可以保存对象饮用,但不保存对象。
堆:用于存放所有java对象,当执行new时便会在堆里自动飞配空间。
常量存储:通常直接放在程序代码中。
非RAM存储:存活于程序之外,即程序结束也会存在,两个基本例子就是流对象和持久化对象。
上面说到对象存储于堆中,堆的速度比堆栈要慢,所以对于常见的比较小的变量就显得划不来。所以java采取C\C++的做法是用基本数据类型。在java中有八个基本数据类型,由于java的通用性每种类型的大小有固定规定。
| 基本类型 | 大小 | 最小值 | 最大值 | 默认值 | 包装器类型 |
|---|---|---|---|---|---|
| boolean | - | - | - | false | Boolean |
| char | 16-bit | Unicode 0 | Unicode 2^16-1 | ‘\uoooo’ | Character |
| byte | 8-bit | -128 | 127 | (byte)0 | Byte |
| short | 16-bit | -2^15 | 2^15-1 | (short)0 | Short |
| int | 32-bit | -2^31 | 2^31-1 | 0 | Integer |
| long | 64-bit | -2^63 | 2^63-1 | 0L | Long |
| float | 32-bit | IEEE754 | IEEE754 | 0.0f | Float |
| double | 64-bit | IEEE754 | IEEE754 | 0.0d | Double |
这里要注意,boolean类型时没有明确指定大小的!!!
当然了,如果遇到超过上述基本类型范围的数要怎么表示呢?java提供了BigInteger和BigDecimal可表示任意精度的整数和浮点数,付出的代价就是运算速度。
对象不需要销毁
对象需要占据存储空间,如果不断增加对象而不销毁,那么总有一刻内存空间会被填满。所以在C++中你必须记得销毁对象,但是在java中由于有垃圾回收器的存在会自动回收不需要的对象,免去了手动销毁的麻烦。
类,对象的模版
目前为止还没有说明什么东西可以决定对象的类型,这个答案就是类! 一个类一般包含数据成员和方法。在构造一个对象时如果那个类里没有为基本成员赋初始值,java就会赋默认值(见上表)。 方法即C\C++的“函数”,基本组成部分包括:名称、返回值、参数和方法体。 想要调用方法,只能通过对象调用,但是static方法除外。static方法不需要创建对象就能直接调用,这一点被用于main方法;就算一个类 创建了多个对象,static方法也只有一份存储空间。
java程序补充
在多人开发的情形下,如何防止两个模块名字相同产生冲突,java的方法是把程序员的Internet域名反过来是用,例如 com.example.xxx(全都是小写)。当要调用其他模块时就需要用import关键字(其中java.lang包为默认导入)。
注释
java有单行注释——用“//”引领 和多行注释——使用“/*”和“*/”,两者之间的内容会被编译器忽略。另外还有一种称为说明注释,开头使用“/**”而结束于“*/”,独立文档标签用“@”字符开头至于前面。例如:
/**
*该方法功能为传入一个参数,自加1并返回
* @param num 为传入的参数
* @return 返回自增1的num
* /
public int increment(int num){
return num = num + 1;
}
常见的javadoc标签还有以下几种:
| 标签 | 描述 |
|---|---|
| @author | 标识一个类的作者 |
| @param | 说明一个方法的参数 |
| @return | 说明返回值类型 |
| @exception | 标志抛出的异常 |
| @throw | 与exception一样 |
| @version | 指定类的版本 |