第2章一切都是对象
1. 用引用操纵对象
String s;
s是一个引用变量;它可以引用一个String对象;
String s = new String(“abc”);
s 引用了一个String对象,该对象的初始值为"abc”;
2. 所有的对象都存储到”堆(heap)“里;对象的引用变量存储到”堆栈(stack)“里;基本类型(boolen, char, byte, short, int, long, float, double, void)存储到“堆栈”里;
3. Java中的数组:当创建一个数组对象时,实际上是创建了一个引用数组,并且每个引用都会自动被初始化为null。在使用任何引用前,必须为其指定一个对象。
4.对象的作用域
{
String s = new String(“abc”);
}
引用s在作用域的终点(右花括号)消失了。但是String对象仍然继续占据内存空间;垃圾回收器会监视用new创建的内存空间,并辨别那些不会再被引用的对象。随后,释放这些对象的内存空间,以便其他新的对象使用。
5. 类
class Dog {
private int weight;
private int color;
private boolean sex;
private final female = 0;
private final male = 1;
public void run() {return;}
public void bite() {return;}
public boolean getSex() { return sex = female;}
}
class是定义类的关键字;类结构主要由两部分构成:数据成员,方法成员。
方法成员的基本组成部分包括:名称,参数,返回值和方法体。方法名和参数列表唯一地标识出某个方法。JAVA中的方法只能作为类的一部分来创建。方法只有通过对象才能被调用,且这个对象必须能执行这个方法调用。这种调用方法的行为称为“发送消息给对象”。
参数列表中的每个参数传递的是对象的引用。
6. 构建JAVA程序
名字可见性:为了保证一个类库生成不会与其他类库名字混淆,JAVA设计者希望程序员反过来用自己的Internet域名。如果你没有,你自己可以杜撰一个,当然确保它的唯一性。例如,我的博客域名是feichai.cublog.cn,那么我可以使用cn.cublog.feichai作为我自己创建的类库名的前缀。
import关键字指示编译器导入一个包,也就是一个类库。
Import java.util.ArrayList;
这行代码告诉编译器,你想使用JAVA的ArrayList类。但是util包含了数量众多的类,有时你想使用其中的几个,同时又不想明确地逐一声明,那么使用通配符"*”来达到目的:
import java.util.*;
7. static关键字
当声明一个事物是static时,就意味着这个域(数据成员)或者方法不会与包含它的那个类的任何对象实例关联在一起。所以,即使从未创建某个类的任何对象,也可以调用其static方法或者访问其static域。
调用static域有两种方法:可以通过一个对象去调用它;也可以直接通过其类名去调用。非静态域则只能通过对象实例去调用。
8. 第一个JAVA程序
// HelloDate.java
import java.util.*;
public class HelloDate {
public static void main(String[] args)
{
System.out.println("Hello, it's: ");
System.out.println(new Date());
}
}
有一个特定类库自动导入到每个JAVA程序:java.lang;
使用import关键字,导入JAVA程序所需要的类库;这里导入了java.util.*,是因为程序里使用了Date类,属于java.util类库。
main方法是程序的入口,形式如下所示:
public static void main(String[] args)
编译和运行程序:
javac HelloDate.java
java HelloDate
运行结果:
Hello, it's:
Wed Nov 26 21:32:49 CST 2008
9. 注释和javadoc
注释有两种:
/* ... */
//
javadoc可以将注释提取自动生成文档。
javadoc所需的注释的格式:/** ... */
javadoc只能为public和protected域进行文档注释。
javadoc的输出结果是HTML文档。
javadoc文档示例
// HelloDate.java
/** The first Thinking in Java example program.
* Display a string and today's date.
* @author Bruce Eckel
* @version 4.0
*/
import java.util.*;
public class HelloDate {
/** Entry point to class & application.
* @param args array of String arguments
* @throws exceptions NO exceptions thrown
*/
public static void main(String[] args)
{
System.out.println("Hello, it's: ");
System.out.println(new Date());
}
}