1. 引用操纵对象
-
String s;
这里只是创建了引用而不是对象,此时向s发送消息会返回一个运行时错误,
String s = new String('asdf'); or String s = 'asdf';
- 创建引用的同时与一个新的对象相关联,new关键字的意思是“给我一个新对象”。
2. 对象存到哪儿
- 寄存器
最快,按需求分配,不能直接控制
- 堆栈
存储灵活性差,存的是引用
- 堆
存放所有对象,进行存储分配和清理用的时间比堆栈长
- 常量存储
常量值存到代码内部
- 非RAM存储
数据存活于程序之外
3. 特例:基本类型
对于基本类型,将对象存在堆中,不用new来创建对象,而是创建一个并非引用的“自动”变量。这个变量直接存值,并置于堆栈中。
| 基本类型 | 大小 | 最小值 | 最大值 | 包装器类型 |
| -----|----| ----|
| boolean | - | - | - | Boolean |
|char|16-bit|...|...|Character|
|byte|8 bits|...|...|Byte|
|short|16 bits|...|...|Short|
|int|38 bits|...|...|Integer|
|long|64 bits|...|...|Long|
|float|32 bits|...|...|Float|
|double|64 bits|...|...|Double|
|void|-|-|-|Void|
用包装器类创建非基本对象,例如
char c = 'a'; char ch = new Character('a'); 或 char ch = new Character(c);
自动包装功能
Character ch = 'a'; 并且可以反向转换 char c = ch;
高精度数字
BigInteger 整数 能准确表示任何精度的整数值;
BigDecimal 定点数 进行精确的货币计算。
4. 永远不需要销毁对象
-
对象的作用域
new 创建一个Java对象时,可以存活于作用域之外
{ String s = new String('a String'); }
引用s在作用域终点就消失了,然而s指向的String对象仍继续占据内存空间。
为防止这些对象占满内存空间,Java有一个垃圾回收器,监视new创建的所有对象,并辨别不会再被引用的对象删除。
5. 创建新的数据类型: 类
- class 某一类对象
在java中所做的全部工作就是定义类,产生那些类的对象,以及给这些对象发送消息 - 类的元素:字段和方法
字段可以是任何类型的对象,可以通过其引用与其通信;也可以是基本类型中的一种。如果字段是对某个对象的引用,该引用必须初始化。若类的某个成员是基本数据类型,即使没有初始化,java也会确保它获得一个默认值。但如果在某个方法中定义基本数据类型 int x; x会是任意值,不会自动初始化为0,会返回一个错误。
如下表
基本类型 | 默认值 |
---|---|
boolean | false |
char | null |
byte | 0 |
short | 0 |
int | 0 |
long | 0l |
flaot | 0.0f |
double | 0.0d |
6. 方法参数和返回值
- 方法的基本组成部分包括:名称,参数,返回值和方法体。如下
ReturnType methodName( /* Argument list */){ /* methodBody */ }
方法名和参数列表是合起来称方法签名,唯一地标识出某个方法。
通过对象调用方法:ObjectName.methodName(arg1,arg2,arg3);
调用方法的行为通常被称为发送消息给对象。如 int x = a.f(); 就是发送消息f() 给对象x。
- 参数列表
方法的参数列表指定要传送给方法什么样的信息,信息采用的都是对象的形式。传递对象实际上也是引用。
- return 关键字的使用
若返回类型为void,return的作用只是退出方法,可以在任意地方返回;如果返回类型不是void,无论在何处返回,编译器都会强制返回一个正确类型的返回值。
7. 构建一个java程序
- 名字可见性
为了使类库的名字不与其他名字混淆,java设计者希望程序员使用自己的internet域名。
import 指示编译器导入一个包,也就是一个类库。 import java.unit.*; * 是通配符,指unit里的所有类。
- static 关键字
当声明一个事物是static时,就意味着这个域或方法不会与包含它的那个类的任何对象实例联系在一起,该事物属于类,而不属于任何对象实例。
对于静态方法,不能通过简单地调用其他非static域或方法而没有指定某个命名对象,来直接访问非static域或方法,因为非static域或方法必须与某个特定对象关联。
8. 第一个java程序
在每个程序的开头都声明import语句,引入文件代码所需要的额外类,“额外”是因为有一个特定类会自动被导入到每个java文件中:java.lang
9. 注释和嵌入式文档
/* 注释内容 */ 和 //注释内容
注释文档
文档和代码在同一个文件里,有一种特殊的注释语法标记文档,还有一个工具提取注释javadoc,javadoc输出的是一个HTML文件。语法
/** javadoc命令 */
使用javadoc主要有两种方式,嵌入HTML和使用文档标签。独立文档标签一@字符开头,在注释行的最前面。而行内文档标签可以出现在javadoc注释中的任何地方,也以@开头,但要置于花括号内。
有三种类型的注释文档,分别对应类,域和方法。如:
/** A class comment */ public class Documentation1{ /** A field comment */ public int i; /** A method comment */ public void f(){} }
注意javadoc只能为public,proteced成员进行文档注释。