1.java中的域

    所谓的域,翻译成英文就是field, 也就是我们常说的字段,或者说是属性。 比如类的字段(属性),局部的,全局的。所谓域,其实是“field”的翻译

然后实例域,就是 实例("object" )的"field"。包括实例域和静态域,静态域又叫类域。

    java中对象中的数据称为实例域(instance field)。

2.静态域

    如果将域定义为static,那么每个类中只有一个这样的域。而每一个对象对于所有的实例域却都有自己的一份拷贝。例如,假定需要给每一个雇员赋予唯一的表示码。这里给Employee类添加一个实例域id和一个静态域nextld:

class Employee

{

private int id;

private static int nextId=1;

}

现在,每一个雇员对象都有一个自己的id域,但这个类的所有实例将共享一个nextid域,换句话说,如果有1000个Employee类的对象,则有1000个实例域id,但是只有一个静态域nextid,即使没有一个雇员对象,静态域nextil也存在,他属于类,而不属于任何独立的对象。

3.java中域的初始化

    初始化域即给域赋值有以下几种方式:
      1)、赋予默认赋值
      2)、声明变量时同时赋值
      3)、块赋值(实例块和静态块)
      4)、构造器赋值

    如果同时存在以上几种赋值方式,那么域的最终值会是哪个呢?这里就涉及到域的初始化顺序的问题,同时也是下面要讲到的问题。
  
    我们把域的初始化分为两种情况,一种是在建立对象即进行类的实例化时域的初始化;另一种是在不建立对象,只装载类的时候域的初始化。

  一、构建对象时域的初始化
    构建对象,就是用new class()语句建立一个新的类的对象。在这种情况下,类中的域是按照如下顺序进行初始化的:赋予默认值-->(静态域、静态块)-->(实例域、实例块)-->构造器。
    下面我给解释一下,假设一个域即变量int a,当建立对象时,首先赋予它一个默认值,int类型的默认值为0;如果a为静态域并且在静态块中被赋值,那么就按照静态域和静态块在程序中出现的顺序先后执行;如果同时还在实例块中被赋值,则再执行实例块中的赋值语句(静态域不可能再是实例域);最后执行构造器中的赋值语句(如果在构造器中有被赋值的话)。如果变量a是实例域,则不会有静态域和在静态块中赋值(不能在静态块中给实例域赋值)的情况,其他同前所述。
  
  总结:静态域是指静态域在声明时被赋值,静态块是指在静态块中被赋值,实例域和实例块同上。上面列出的四个步骤是先后执行的;括号中的两种方式是同等级的,按照在程序中的顺序执行,排在前面的先执行,排在后面的后执行。
  
  二、装载类时域的初始化
    有两种情况是只装载类而不实例化类,一是用java classname执行程序时;二是用classname.statement调用类的静态域或静态方法时。
  装载类时这个类并没有被实例化,也就不能形成对象,所以不能对实例域进行初始化。因此只有静态域、静态块才能被初始化执行,执行规则同构建对象时的规则。

注:由于自己对java中的域概念模糊,对在百度了下,这篇随笔是自己找资料整理的,整理的有错或有不对的,不合理的请各位大牛指教,有你的指教小弟会成长很快~~~

Java中域 实例域 静态域的更多相关文章

  1. JAVA中域、方法、类的可见性

    多态在域的问题上是特殊的.我理解不了中文版的书直接叫域,看了英文原版,原版写的是fields,直接翻译虽然没错,但是出问题的变量不是域.特地查了what is the meaning of field ...

  2. Java中对域和静态方法的访问不具有多态性

    1.将方法调用同方法主体关联起来被称为 2.编译期绑定(静态)是在程序编译阶段就确定了引用对象的类型 3.运行期绑定(动态绑定)是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法 ...

  3. java编程思想-java中的并发(二)

    二.共享受限资源 有了并发就可以同时做多件事情了.但是,两个或多个线程彼此互相干涉的问题也就出现了.如果不防范这种冲突,就可能发生两个线程同时试图访问同一个银行账户,或向同一个打印机打印,改变同一个值 ...

  4. JAVA中单例模式的几种实现方式

    1 线程不安全的实现方法 首先介绍java中最基本的单例模式实现方式,我们可以在一些初级的java书中看到.这种实现方法不是线程安全的,所以在项目实践中如果涉及到线程安全就不会使用这种方式.但是如果不 ...

  5. (原)java中对象复制、==、equals

    对于基本数据类型而言,即如下八种基本数据类型,int,boolean,char,byte,short,float,double,long. public class test { public sta ...

  6. java中main函数解析(转载)

    从写java至今,写的最多的可能就是主函数 public static void main(String[] args) {} 但是以前一直都没有问自己,为什么要这么写,因为在c语言中就没有这样子的要 ...

  7. java中的内存模型

    概述 Java平台自动集成了线程以及多处理器技术,这种集成程度比Java以前诞生的计算机语言要厉害很多,该语言针对多种异构平台的平台独立性而使用的多线程技术支持也是具有开拓性的一面,有时候在开发Jav ...

  8. java中main函数解析

    从写java至今,写的最多的可能就是主函数 public static void main(String[] args) {} 但是以前一直都没有问自己,为什么要这么写,因为在c语言中就没有这样子的要 ...

  9. java中的 equals + hashCode

    [0]README 0.1)本文转自 core java volume 1, 旨在理清 equals + hashCode方法: [1]equals方法 1.1) Object中的 equals 方法 ...

随机推荐

  1. VS中调试时监控线程的最后错误代码

    进行调试的时候,监控线程的最后错误代码是非常有用的. 在 Microsoft Visual studio 中,Microsoft 的调试程序支持一个非常有用的特性,即可以配置 Watch 窗口,以便始 ...

  2. 防暴力破解 Fail2Ban之python

    fai2ban的介绍 fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是调用防火墙屏蔽),如:当有人在试探你的SSH.SMTP.FTP密码,只要 ...

  3. erlang dets

    1.dets表包含set.bag.和duplicate bag 2.dets:open_file(TableName,Options)创建或打开表 3.Options 1){auto_save,Int ...

  4. js数据转换

    javascript有如下数据类型的转换方法:一,转换成数字 xxx*1.0 转换成字符串 xxx+"" 二,从一个值中提取另一种类型的值,并完成转换工作. 1.提取字符串中的整数 ...

  5. C++内存申请容易产生的错误

    1.起因 前两天用python写了一款工具用来把excel文件转换成json文件,今天给他们用的时候发现在文本下看正常,但是在程序中使用就是会多出一些莫名其妙的字符. 2. 调查 原来主要是我写的工具 ...

  6. python模拟登录知乎

    # -*- coding:utf-8 -*- import urllib import urllib2 import cookielib import sys from bs4 import Beau ...

  7. sql or 与and同时有时要注意

    如果是一天sql语句中有or和and同时在 正确:where xxx=xx and (xxx=xx or xxx=xx) 错误:where xxx=xx and xxx=xx or xxx=xx (这 ...

  8. Apache Commons DbUtils 快速上手

    原文出处:http://lavasoft.blog.51cto.com/62575/222771 Hibernate太复杂,iBatis不好用,JDBC代码太垃圾,DBUtils在简单与优美之间取得了 ...

  9. HDU 5805 NanoApe Loves Sequence

    处理出每个位置左边的最大值和右边的最大值.然后就可以o(1)计算去掉某位置的最大值了. #pragma comment(linker, "/STACK:1024000000,10240000 ...

  10. 你需要简单了解JVM中的内存长什么样子

    下面有关JVM内存,说法错误的是? 1.程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的 2.Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接 ...