静态域中的域是什么意思?
发布网友
发布时间:2022-04-30 21:29
我来回答
共4个回答
热心网友
时间:2023-10-14 10:44
静态成员变量可以脱离对象而存在,是类本身的属性。所以对于任何对象来说,这个静态成员都是存在的,类似对象间的全局属性。
相关资料
1、概念
在类定义中,如果一个域前面有static修饰符,则该域属于整个类,而不单单属于类的某个对象。这种域叫做静态域(static fields),而不加static修饰符的域,做作非静态域(non-static fields)。
可以为Point类增加一个静态域numberOfPoints,代表已经用Point类生成的Point类的对象个数,其初值不妨设为0:
static int numberOfPoints = 0;这样,numberOfPoints就是一个静态域。编译器在编译源代码时,就会为该类产生惟一的numberOfPoints域。即使没有用Point类生成任何具体的对象,该numberOfPoints域也存在。今后该类的所有对象,都将共享这个域。
【例4】将例3的PointDemo2.java中的Point类增加一个静态域numberOfPoints,代表已经用Point类生成的Point类的对象个数,改写如下。为醒目起见,对改写的语句增加了注释。
class Point {
//增加了一个静态域numberOfPoints,初值为0
static int numberOfPoints = 0;
int x;
int y;
//两个构造函数如下,其中专门对numberOfPoints进行了加1操作
public Point(int newX, int newY) {
x = newX;
y = newY;
numberOfPoints++;
}
public Point() {
x = 0;
y = 0;
numberOfPoints++;
}
//以下方法不变
void setX(int newX) {
x = newX;
}
void setY(int newY) {
y = newY;
}
int getX() {
return x;
}
int getY() {
return y;
}
void printStates() {
System.out.println("x="+x+", y="+y);
}
}那么,该怎样使用静态域?静态域又有什么用处呢?
2、使用静态域
【例5】使用例4的Point类改写PointDemo2.java为PointDemo3.java。为醒目起见,对改写的语句增加了注释。
import java.io.*;
//主类名自然变成了PointDemo3
class PointDemo3 {
public static void main(String[ ] args) {
Point p1 = new Point(23, 94);
p1.printStates();
System.out.println("现在一共有" + Point.numberOfPoints + "个点");
Point p2 = new Point();
p2.printStates();
System.out.println("现在一共有" + Point.numberOfPoints + "个点");
}
}
class Point {
……//例4中的Point类,为节省篇幅略
}程序的执行结果为:
x=23, y=94
现在一共有1个点
x=0, y=0
现在一共有2个点简要讲解:例5演示了静态域的使用方法和简单作用。在编译程序时,系统为静态域numberOfPoints分配内存空间,并赋值为0。在main方法中,首先声明了一个Point类的引用对象p1,它调用Point类的构造函数Point()生成一个具体对象,在构造函数Point()中有这样一句话:
numberOfPoints++;它把numberOfPoints自加1,所以在执行第一句:
System.out.println("现在一共有" + Point.numberOfPoints + "个点");时,系统输出:
现在一共有1个点程序又声明了一个Point类的引用对象p2,它调用Point类的构造函数Point(int, int)生成一个具体对象,在该构造函数Point()中也有这样一句话:
numberOfPoints++;它又把numberOfPoints自加1,所以在执行第二句:
System.out.println("现在一共有" + Point.numberOfPoints + "个点");时,系统输出:
现在一共有2个点可见,numberOfPoints域保存了系统生成的点的个数,它是静态域,被类的所有对象所共享,在用类生成具体对象前,就已经为它分配内存空间了;而x、y则是非静态域,只有当用类生成具体对象时,才为非静态域分配内存空间,并且类的每个对象各有一份。
本题的类和对象的各种域的形象表示如下图所示。
在程序中是这样使用numberOfPoints域的:
Point.numberOfPoints它体现了使用静态域的一般格式:
类名.静态域它使用了点操作符“.”。使用非静态域的格式则是:
对象名.非静态域例如,可以这样输出p1对象的x域值:
System.out.println(p1.x);点操作符“.”用于引用对象或类的域或方法。例如可以这样调用方法:
System.out.println(p1.getX());它输出p1对象的x域值。又如:
p2.printStates();它调用p2的printStates()方法,输出p2的x、y域值。
注意,也可以用“对象名.静态域”的形式使用静态域,如可以这样写:
System.out.println("现在一共有" + p2.numberOfPoints + "个点");但一般不提倡这样使用静态域,因为无法从调用格式看出一个域是否是静态域。
非静态域则不能使用“类名.非静态域”的形式,原因很简单:非静态域属于各对象而不属于类。
3、最终域
如果一个类的域被声明为final,则它的取值在程序的整个执行过程都不会改变。如果在程序中试图改变其值,则会出现编译错误。
final修饰符经常和static修饰符结合使用,用于定义常量。例如,下面的变量声明定义了PI常量,其值约等于圆周率:
static final double PI = 3.141592653589793;这样定义的常量不能重新赋值,否则会发生编译错误。一般来说,常量名应该全大写。如果名字包含多个英文单词,则各单词之间用下划线(_)分隔。
如果一个原数据类型或一个字符串被定义为常量,并且在编译时就知道它的值,编译器会在代码中用具体值取代常量出现的位置。这叫做编译时常量(compile-time constant)。如果外界常量的值发生了改变(例如圆周率变成了3.95),则在重新定义常量后,需要重新编译使用该常量的所有类。
为了节省空间,常量一般声明为static final或final static。
http://www.itsway.net/java/java030203.aspx
参考资料:http://www.itsway.net/java/java030203.aspx
热心网友
时间:2023-10-14 10:45
域可以理解为内存空间。域(Domain)是Windows网络中独立运行的单位,域之间相互访问则需要建立信任关系(即Trust Relation)。信任关系是连接在域与域之间的桥梁。当一个域与其他域建立了信任关系后,2个域之间不但可以按需要相互进行管理,还可以跨网分配文件和打印机等设备资源,使不同的域之间实现网络资源的共享与管理。
域既是 Windows 网络操作系统的逻辑组织单元,也是Internet的逻辑组织单元,在 Windows 网络操作系统中,域是安全边界。域管理员只能管理域的内部,除非其他的域显式地赋予他管理权限,他才能够访问或者管理其他的域;每个域都有自己的安全策略,以及它与其他域的安全信任关系。
域:域是一种管理边界,用于一组计算机共享共用的安全数据库,域实际上就是一组服务器和工作站的集合。
域在文件系统中,有时也称做“字段”,是指数据中不可再分的基本单元。一个域包含一个值。如学生的名字等。可以通过数据类型(如二进制、字符、字符串等)和长度(占用的字节数)两个属性对其进行描述。
域,在WORD文档中是一种可以发生变化的数据。他在页面视图中,与一般的文本看不出有什么区别,但是,当光标移入域中,就会发现,整体域的底纹颜色变成灰色(约灰色-30%)
热心网友
时间:2023-10-14 10:45
域可以理解为内存空间,因为静态域被类的所有对象所共享,在用类生成具体对象前,就已经为它分配内存空间了
热心网友
时间:2023-10-14 10:46
静态域就是这里面的变量可以不用类来调用就可以直接使用,相当于一个常数