您的位置:首页 > 其它

第8章 对象和类

2015-07-24 13:16 239 查看
Date类

java在java.util.Date类中还提供了与系统无关的对日期和时间的封装。

+Date()以当前时间构造一个Date对象
+Date(elapseTime:long)以从GMT时间1970年1月1日开始算起的毫秒数为给定时间的构造一个Date对象
+toString():String返回日期和时间的字符串表达式
+getTime():long返回从GMT时间1970年1月1日开始算起的毫秒数
+setTime(elapseTime:long):void在对象中设置新的流逝时间
import java.util.Scanner;
public class Test{
public static void main(String[] args){
java.util.Date date = new java.util.Date();
System.out.println("The elapsed time since Jan 1, 1970 is " +
date.getTime() + " milliseconds");
System.out.println(date.toString());
}
}
The elapsed time since Jan 1, 1970 is 1437709903295 milliseconds
Fri Jul 24 11:51:43 CST 2015


*8.3(使用日期类Date)编写程序创建一个Date对象,设置它的流逝时间分别为10000、100000、1000000、10000000、100000000、1000000000、10000000000、10000000000、100000000000,然后使用toString()方法显示日期。

public class Test{
public static void main(String[] args){
java.util.Date date = new java.util.Date();
int count = 0;
for(long i = 10000; count < 8; count++,i*=10)
{
date.setTime(i);
System.out.println(date.toString());
}
}
}
Thu Jan 01 08:00:10 CST 1970
Thu Jan 01 08:01:40 CST 1970
Thu Jan 01 08:16:40 CST 1970
Thu Jan 01 10:46:40 CST 1970
Fri Jan 02 11:46:40 CST 1970
Mon Jan 12 21:46:40 CST 1970
Mon Apr 27 01:46:40 CST 1970
Sat Mar 03 17:46:40 CST 1973
Random类

可以使用Math.random()获取一个0.0到1.0(不包括1.0)之间的随机double型值。另一种产生随机数的方法是使用java.util.Random类,它可以产生一个int、long、double、float和boolean型值。

+Random()以当前时间作为种子构造Random对象
+Random(seed:long)以特定种子构造Random对象
+nextInt():int返回一个随机整型值
+nextInt(n:int):int返回一个在0到n之间(不包括0和n)的随机整型值
+nextLong():long返回一个随机的long型值
+nextDouble():double返回一个在0.0到1.0之间(不包括0.0和1.0)的随机double型值
+nextFloat():float返回一个在0.0F到1.0F之间(不包括0.0F和1.0F)的随机float型值
+nextBoolean():boolean返回一个随机布尔值
创建一个Random对象时,必须指定一个种子或者使用默认的种子。无参构造方法是用当前已经逝去的时间作为种子,创建一个Random对象。如果这两个Random对象有相同的种子,那它们将产生相同的数列。

import java.util.Random;
public class Test{
public static void main(String[] args){
Random random1 = new Random(3);
System.out.print("From random1:");
for(int i = 0; i < 10; i++)
System.out.print(random1.nextInt(1000) + " ");
Random random2 = new Random(3);
System.out.print("\nFrom random2:");
for(int i = 0; i < 10; i++)
System.out.print(random2.nextInt(1000) + " ");
}
}
From random1:734 660 210 581 128 202 549 564 459 961
From random2:734 660 210 581 128 202 549 564 459 961


*8.4 (使用随机类Random)编写一个程序,创建种子是1000的Rnadom对象,然后使用nextInt(100)方法显示0到100之间前50个随机整数。

public class Test{
public static void main(String[] args){
java.util.Random random = new java.util.Random(1000);
for(int i = 0; i < 50; i++)
System.out.print(random.nextInt(100) + " ");
System.out.print("\n");
}
}
87 35 76 24 92 49 41 45 64 50 79 59 72 83 36 75 46 2 23 41 22 71 89 2 93 42 49 42 35 76 32 0 52 95 87 31 99 18 79 2 91 5 55 84 71 95 58 87 77 38


8.2 定义对象的类

面向对象程序设计(OOP)就是使用对象进行程序设计。对象(object)代表现实世界中可以明确标识的一个实体。例如:一个学生、一张桌子、一个圆、一个按钮甚至一笔贷款都可以看作是一个对象。每个对象都有自己独特的标识、状态和行为。

一个对象的状态(state,也称之为特征(property)或属性(attribute))是指那些具有它们当前值得数据域。例如:圆对象具有一个数据域radius,它是标识圆的属性。一个矩形对象具有数据域width和height,它们都是标识矩形的属性。

一个对象的行为(behavior,也想、称之为动作(action))是由方法定义的。调用对象的一个方法就是要求对象完成一个动作。例如:可以为圆对象定义一个名为getArea()的方法。圆对象可以调用getArea()返回圆的面积。

使用一个通用类来定义同一类型的对象。类是一个模板、蓝本或者说是合约,用来定义对象的数据域是什么以及方法是做什么的。一个对象是类的一个实例。可以从一个类中创建多个实例。创建实例的过程称为实例化(instantiation)。术语对象(object)和实例(instance)经常是可以互换的。类和对象之间的关系类似于苹果派配方和苹果派之间的关系。可以用一种配方做出任意多的苹果派来。

8.4 使用构造方法创建创造对象

构造方法是一种特殊的方法。它们有以下三个特殊性:

1)构造方法必须具备和所有类相同的名字。

2)构造方法没有返回类型,甚至连void也没有。

3)构造方法是在创建一个对象使用new操作符时调用的。构造方法的作用是初始化对象。

构造方法具有和定义它的类完全相同的名字。和所有其他方法一样,构造方法也可以重载(也就是说,可以有多个同名的构造方法,但它们要有不同的签名),这样更易于用不同的初始数据值来构造对象。

8.5 通过引用变量访问对象

8.5.1 引用变量和引用类型

对象是通过对象引用变量(reference variable)来访问的,该变量包含对对象的引用,使用如下语法格式声明这样的变量:

ClassName objectRefVar;  类名    对象引用变量
一个类基本上等同于一个程序员定义的类型。一个类就是一种引用类型(reference type),这一位着任何类型为类的变量都可以引用该类的一个实例。

Circle myCircle;
变量myCircle能够引用一个Circle对象。下面的语句创建一个对象,并且将它的引用赋给变量myCircle;

myCircle = new Circle();
利用如下所示的语法,可以写一条包括声明对象引用变量、创建对象以及将对象的引用赋值给这个变量的语句。

ClassName objectRefVar = new ClassName();    类名    对象引用变量 = new  类名();
Circle myCircle = new Circle();
注意 从表面上看,对象引用变量中似乎存放了一个对象,但事实上,它只是包括了对该对象的引用。严格地讲,对象引用变量和对象是不同的,但是大多数情况下,这种差异是可以忽略的。因此,可以简单地说myCircle是一个Circle对象,而不用冗长地描述说,myCircle是一个包含对Circle对象的引用变量。

注意 在Java中,数组被看作是对象。数组是用new操作符创建的。一个数组变量实际上是一个包含数组引用的变量。

8.5.2 访问对象的数据和方法

在创建一个对象之后,它的数据和方法可以使用圆点运算符(.)来访问和调用,该运算符也称为对象成员访问运算符(object member access operator);

objectRefVar.dataFileld引用对象的数据域。
objectRefVar.method(参数)调用对象的方法。
8.5.3 引用数据域和null值

引用类型数据域的默认值是null,数值类型数据域的默认值是0,boolean类型数据域的默认值是false,而char类型数据域的默认值是'\u0000'。但是,Java没有给方法中的局部变量赋默认值。

8.5.4 基本类型变量和引用类型变量的区别

每个变量都代表一个存储值的内存位置。声明一个变量时,就是在告诉编译器这个变量可以存放什么类型的值。对基本类型变量来说,对应内存所存储的值是基本类型值。对引用类型变量来说,对应内存所存储的值是一个引用,是对象的存储地址。

8.7 静态变量、常量和方法

如果想让一个类的所有实例共享数据,就要使用静态变量(static variable),也称之为类变量(class variable)。静态变量将变量值存储在一个公共的内存地址。因为它是公共的地址,所以如果某一个对象修改了静态变量的值,那么同一个类的所有对象都会受到影响。Java支持静态方法和静态变量,无须创建类的实例就可以调用静态方法(static method)。

要声明一个静态变量或定义一个静态方法,就要在这个变量或方法的声明中加上修饰符static。静态变量numberOfObjects和静态方法getNumberObjects()可以如下声明:

static int numberOfObjects;
static int getNumberObjects(){
return numberOfObjects;
}


类中的常量是被该类的所有对象所共享的。因此,常量应该声明为final static。例如:Math类中的常量PI是如下定义的:

final static double PI = 3.14159265358979323846;
静态变量和静态方法既可以在类的实例方法中使用,也可以在类的静态方法中使用。但是,实例变量和实力方法只能在实例方法这哦能够使用,不能在静态方法中使用,因为静态变量和静态方法不属于某个特定的对象。

8.8 可见性修饰符

可以在类、方法和数据域前使用public修饰符,表示它们可以被任何其他的类访问。如果没有使用可见性修饰符,那么默认为类、方法和数据域是可以被同一个包中的任何一个类访问的。这称作包私有(package-private)或包内访问(package-access)。

8.9 数据域封装

为了避免对数据域的直接修改,应该使用private修饰符数据域声明为私有的。这就称为数据域封装(data field encapsulation)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: