对象与类

《The Unified Modeling Language User Guide》

 

Java对类的定义,结尾不用加【;】

 

Java中的对象变量类似于C++中的对象指针:

Date deadline; 定义了一个对象变量deadline,但是不能直接调用类的方法,因为它没有引用对象。首先比如初始化变量deadline。有两种方法:

    1) deadline = new Date();//Java中new返回的是对象的引用

    2) deadline = birthday;//birthday是一个已经初始化的对象变量,现在deadline和birhday引用同一个对象。

    一个对象变量并没有实际包含一个对象,而仅仅引用一个对象,就像C++中的对象指针,指向对象。

有几点区别要注意:Java中的对象变量虽然是引用,但是它可以为空(null);C++中可以用拷贝的构造函数和赋值操作符来实现对象的拷贝,但Java中必须使用clone方法来活儿对象的完整拷贝。

 

在一个源文件中,只能有一个public类,但可以有任意数目的非public类。源文件名必须与public类名相匹配。main函数在public类中定义。

习惯上一个类放在一个源文件中,在编译的时候,只要编译public类的文件,编译器会自动查找它所依赖的.class文件,如果没有找到,它会自动搜索.java文件,然后编译。类似于Unix的make工具。

 

Java的构造函数总是伴随new操作符一起使用。

 

Java中,所有的方法必须在类的内部定义,至于是否将某方法设置成内联方法,是Java虚拟机的任务。

 

Java中的静态域与静态方法在功能上与C++相同,但是语法书写上稍有不同。在C++中,使用 :: 操作符访问自身作用域之外的静态域和静态方法。Java中使用 . 操作符。

 

Java使用传值的方式传递参数,即形参是实参的copy。在C++中,传值和传引用都是可以的。

一个方法不能修改一个基本数据类型的参数(因为是copy)

一个方法可以改变一个对象参数的状态(在前面提到,Java中的对象变量并不拥有对象,而只是引用对象,就像C++中的对象指针。因此形参与实参引用同一对象,形参改变对象的状态,实参所引用的对象就被改变了)

一个方法不能让对象参数引用一个新的对象。(因为是copy)

 

Java中成员变量的初始化不一定要在构造函数中进行。可以在类的定义中,简单地将一个值赋给成员变量。在执行构造函数前,先执行赋值。当一个类的所有构造函数都希望将相同的值赋予某个特定的成员变量时,这种方式特别有用。这一点与C++不同,除了static成员变量,所有的成员变量都需要在构造函数或者初始化列表中初始化。

 

Java中可以在一个构造函数中调用另一个构造函数,C++不行。方法是this(...)

public Employee(double s)

{

    //calls Employee (String, double)

    this("Employee #" + nextId, s);

    nextId++;

}

 

C++中的namespace和using与Java中的import和package类似。

引入包和打包:

import com.horstmann.corejava;

package com.horstmann.corejava; //打包是将一个类放入包中。

将包中的文件放到与完整的包名匹配的子目录中。例如,com.horstmann.corejava包中的所有类文件应该被放置在子目录com/horstmann/corejava中。

 

既没有声明为public也没有声明为private的成员方法,可以被同一个包中的所有类引用。

成员变量应该全部声明为private,以维持封装性。

posted @ 2014-10-23 11:17  米其林轮船  阅读(155)  评论(0编辑  收藏  举报