[Java] Introduction to Java Programming 笔记 Chapter 9. 对象和类

如果一个文件含有两个类,只有一个类可以为public,public 类和文件名同名,但此文件编译后,将生成两个.class 文件,一个类对应一个class文件。


匿名对象:创建一个对象,但是并不将其引用赋给变量

new Circle();
// or
System.out.println("Area is " + new Circle(5).getArea());

数据域的默认值:

  • 引用类型:null
  • 数值类型:0
  • boolean类型:false
  • char:\u0000

局部变量没有默认值。


可见性修饰符:
public: 对任意类可见,使用时仍要加 import
省略:对当前package可见
private:私有, 同C++


为防止对数据域的直接修改,数据域应声明为私有,称为数据域封装。同时,为了能访问它们,必须提供getter(accessor) 和 setter(mutator)), 约定签名如下:

// getter
public returnType getPropertyName()
// getter, 因为是返回boolean类型,get变成is
public boolean isPropertyName()
// setter
public void setPropertyName(dataType propertyValue)

对象数组的声明和创建:

   Circle[] circleArray = new Circle[10];

初始化:

for (int i = 0; i < circleArray.length; i++) {
    circleArray[i] = new Circle();
}

对象数组作为参数传递的例子:

public class TotalArea {
    /** Main method */
    public static void main(String[] args) {
        // Declare circleArray
        CircleWithPrivateDataFields[] circleArray;

        // Create circleArray
        circleArray = createCircleArray();

        // Print circleArray and total areas of the circles
        printCircleArray(circleArray);
    }

    /** Create an array of Circle objects */
    public static CircleWithPrivateDataFields[] createCircleArray() {

        CircleWithPrivateDataFields[] circleArray = new CircleWithPrivateDataFields[5];
        for (int i = 0; i < circleArray.length; i++) {
            circleArray[i] = new CircleWithPrivateDataFields(Math.random() * 100);
        }

        // Return Circle array
        return circleArray;
    }

    /** Print an array of circles and their total area */
    public static void printCircleArray(
    CircleWithPrivateDataFields[] circleArray) {
        System.out.printf("%-30s%-15s\n", "Radius", "Area");
        for (int i = 0; i < circleArray.length; i++) {
            System.out.printf("%-30f%-15f\n", circleArray[i].getRadius(),
            circleArray[i].getArea());
        }

        System.out.println("—————————————————————————————————————————-");

        // Compute and display the result
        System.out.printf("%-30s%-15f\n", "The total area of circles is", sum(circleArray));
    }

    /** Add circle areas */
    public static double sum(CircleWithPrivateDataFields[] circleArray) {
        // Initialize sum
        double sum = 0;

        // Add areas to sum
        for (int i = 0; i < circleArray.length; i++)
            sum += circleArray[i].getArea();

        return sum;
    }
}

输出结果:

Radius                        Area           
89.893550                     25386.740016   
97.250042                     29711.834270   
62.785025                     12384.030480   
29.297762                     2696.613926    
2.639443                      21.886411      
—————————————————————————————————————————
The total area of circles is  70201.105103   

以下4段代码:
A.

import java.util.Date;
public class Test {
    public static void main(String[] args) {
        Date date = null;
        m1(date);
        System.out.println(date);
    }
    public static void m1(Date date) {
        date = new Date();
    }
}

输出:

null

B.

import java.util.Date;
public class Test {
    public static void main(String[] args) {
        Date date = new Date(1234567);
        m1(date);
        System.out.println(date.getTime());
    }
    public static void m1(Date date) {
        date = new Date(7654321);
    }
}

输出:

1234567

C.

import java.util.Date;
public class Test {
    public static void main(String[] args) {
        Date date = new Date(1234567);
        m1(date);
        System.out.println(date.getTime());
    }
    public static void m1(Date date) {
        date.setTime(7654321);
    }
}

输出:

7654321

D.

import java.util.Date;
public class Test {
    public static void main(String[] args) {
        Date date = new Date(1234567);
        m1(date);
        System.out.println(date.getTime());
    }
    public static void m1(Date date) {
        date = null;
    }
}

输出:

1234567

下列代码有何错误?

public class TestClass {
    public static void main(String[] args) {
        java.util.Date[] dates = new java.util.Date[10]; // 未初始化,初值为null
        System.out.println(dates[0]);

        // ERROR! java.lang.NullPointerException
        System.out.println(dates[0].toString()); 
    }
}

当使用new操作符创建对象数组时,数组中的每一个元素都是一个引用变量,具有默认值null


如果一个对象一旦创建,其内容不可变,那么这个对象称为不可变对象,对应的类称为不可变类。不可变对象和类必须满足的条件:

  • 所有的数据域必须为私有
  • 不能有setter
  • getter不允许返回可变数据域的引用。

Introduction to Java Programming 10th.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值