《Java开发手册》学习进程之第6章对象和类

传统的过程化程序设计通过设计一系列的过程——算法来求解问题。这些过程一旦被确定,下一步就要开始寻找存储数据的方式,即“程序 = 算法 + 数据结构”。而面向对象的程序设计(即OOP,Object Oriented Programming)调换了这个次序,将数据放在第一位,之后再考虑操纵数据的算法。

在OOP中,程序被看作是相互协作的对象集合,每个对象都是某个类的实例。所有类构成了一个通过继承关系相联系的层次结构。

由于面向过程的编程模式是先将一系列过程(即函数)设计好再通过参数输入求解的,所以对于软件维护人员来说,无论是函数还是数据结构的改动,都会使整个程序受到干扰,进而可能引发软件系统的崩溃。

面向过程更接近计算机世界的物理实现,而面向对象的思想则更符合人们的认识习惯。

类声明是用来创建对象的模板的抽象规格说明。

对象中的数据称为实例域,操纵数据的过程称为方法。

定义了类之后,就可以在类体中声明两种类的成员:成员变量和成员方法。

成员变量(又称实例变量)即类的属性。每个对象的属性都有自己的值。

通过new创建对象后将返回其引用值,并将其赋给一个引用,也就是让引用指向创建的对象。如果只是用new创建对象但不让某个引用指向它,则对象创建后就不能对其进行访问了。因为在Java中,对象只能通过指向对象的引用来访问。

注意第111页中有关返回值类型的有关问题。

局部变量:

局部变量也就只能在语句块中有效。

除了类体外,诸如方法体、循环体、if或else后的一对花括号等都是语句块

因为语句块可以嵌套,所以在“外语句块”里定义的局部变量如果发现在“内语句块”中也有同名的局部变量(即又定义了一个同名的局部变量),则编译报错。

局部变量与成员变量不同,在声明之后如果不初始化,则系统不会自动为其分配初始值。若使用未初始化的局部变量,则编译报错。

public class Sample6_11
{

    public static void main(String[] args)
    {
        int i, x = 90, y = 50;
        if (x > y)
        {
            i = 10;
        }
        int j = i;

    }

}

由上面的代码可知,编译时编译器不能断定执行的具体情况。虽然代码中条件语句的条件表达式肯定返回true,将执行到初始化语句,但是这些只能在真正运行时才会知道。编译器作为运行前的代码检查工具,它必须在运行前保证代码尽可能不存在错误。对于条件判断语句x > y,编译器本身是不知道具体的返回值的,它也就不能保证条件语句块里的语句能够执行。若返回true还好,但如果返回的是false呢?

Java中,编译和运行所做的工作是不同的。

可变的参数个数:

定义一个方法sortAndPrint,它能对任意个整数排序及输出。

public static void sortAndPrint(int... entrys)
{
    Arrays.sort(entrys);
    int size = entrys.length;
    System.out.println("捐弃结果为:");
    for (int i = 0; i < size; i++)
    {
        System.out.print(entrys[i] + ", ");
    }
}

在该例子中,entrys仍可认为是一个数组,但在int…的声明下成为了可变长的数组参数。

注意:

一个方法中最多只能有一个可变长的参数;

如果方法的参数不止一个,可变长的参数必须为最后一个。

this 对象引用:

假如有一个Person类,它有一个成员方法showAga(),如果某个Person对象只访问一次,那么可以直接new Person().showAge()而不用先初始化一个Person类的对象引用再调用showAge()方法。因为new的返回值就是所创建的对象引用,这与使用明确声明的引用来进行调用是一样的。

在方法中的局部变量与成员变量同名时,系统将调用局部变量。在这种情况下,要使系统访问成员变量,需在变量面前使用预定义对象引用this。

posted @ 2014-11-14 20:34  WeekeyJanelan  阅读(185)  评论(0编辑  收藏  举报