学习啦 > 知识大全 > 知识百科 > 百科知识 > java中什么是字段

java中什么是字段

时间: 欧东艳656 分享

java中什么是字段

  java是一种编程语言,有很多人也好奇java中的字段到底是什么意思。下面小编为大家分享的是java中的字段意思的内容介绍,欢迎阅读!

  Java 中的字段含义

  我们把表中的每一行叫做一个“记录”,每一个记录包含这行中的所有信息,就像在通讯录数据库中某个人全部的信息,但记录在数据库中并没有专门的记录名,常常用它所在的行数表示这是第几个记录。在数据库中存放在表行列交叉处的数据叫做“值”,它是数据库中最基本的存储单元,它的位置要由这个表中的记录和字段来定义。

  JAVA支持两种field(字段),每一个对象的实例都有一个对象字段的复制;所有的对象共享一个类的静态字段。本地方法使用JNI提供的函数可以获取和修改这两种字段。先看一个从本地代码中访问对象字段的例子:

  class InstanceFieldAccess {

  private String s;

  private native void accessField();

  public static void main(String args[]) {

  InstanceFieldAccess c = new InstanceFieldAccess();

  c.s = "abc";

  c.accessField();

  System.out.println("In Java:");

  System.out.println(" c.s = \"" + c.s + "\"");

  }

  static {

  System.loadLibrary("InstanceFieldAccess");

  }

  }

  InstanceFieldAccess这个类定义了一个对象字段s。main方法创建了一个对象并设置s的值,然后调用本地方法InstanceFieldAccess.accessField在本地代码中打印s的值,并把它修改为一个新值。本地方法返回后,JAVA中把这个值再打印一次,可以看出来,字段s的值已经被改变了。下面是本地方法的实现:

  JNIEXPORT void JNICALL

  Java_InstanceFieldAccess_accessField(JNIEnv *env, jobject obj)

  {

  jfieldID fid; /* store the field ID */

  jstring jstr;

  const char *str;

  /* Get a reference to obj's class */

  jclass cls = (*env)->GetObjectClass(env, obj);

  printf("In C:\n");

  /* Look for the instance field s in cls */

  fid = (*env)->GetFieldID(env, cls, "s",

  "Ljava/lang/String;");

  if (fid == NULL) {

  return; /* failed to find the field */

  }

  /* Read the instance field s */

  jstr = (*env)->GetObjectField(env, obj, fid);

  str = (*env)->GetStringUTFChars(env, jstr, NULL);

  if (str == NULL) {

  return; /* out of memory */

  }

  printf(" c.s = \"%s\"\n", str);

  (*env)->ReleaseStringUTFChars(env, jstr, str);

  /* Create a new string and overwrite the instance field */

  jstr = (*env)->NewStringUTF(env, "123");

  if (jstr == NULL) {

  return; /* out of memory */

  }

  (*env)->SetObjectField(env, obj, fid, jstr);

  }

  运行程序,得到输出为:

  In C:

  c.s = "abc"

  In Java:

  c.s = "123"

  4.1.1 访问一个对象字段的流程

  为了访问一个对象的实例字段,本地方法需要做两步:

  首先,通过在类引用上调用GetFieldID获取field ID(字段ID)、字段名字和字段描述符:

  Fid=(*env)->GetFieldID(env,cls,”s”,”Ljava/lang/String;”);

  上例中的代码通过在对象引用obj上调用GetObjectClass获取到类引用。一旦获取到字段ID,你就可以把对象和字段ID作为参数来访问字段:

  Jstr=(*env)->GetObjectField(env,obj,fid);

  因为字符串和数组是特殊的对象,所以我们使用GetObjectField来访问字符串类型的实例字段。除了Get/SetObjectField,JNI还支持其它如GetIntField、SetFloatField等用来访问基本类型字段的函数。

  4.1.2 字段描述符

  在上一节我们使用过一个特殊的C字符串“Ljava/lang/String”来代表一个JVM中的字段类型。这个字符串被称为JNI field descriptor(字段描述符)。

  字符串的内容由字段被声明的类型决定。例如,使用“I”来表示一个int类型的字段,“F”来表示一个float类型的字段,“D”来表示一个double类型的字段,“Z”来表示一个boolean类型的字段等等。

  像java.lang.String这样的引用类型的描述符都是以L开头,后面跟着一个JNI类描述符,以分号结尾。一个JAVA类的全名中的包名分隔符“.”被转化成“/”。因此,对于一个字段类型的字段来说,它的描述符是“Ljava/lang/String”。

  数组的描述符中包含“]”字符,后面会跟着数组类型的描述符,如“[I”是int[]类型的字段的描述符。12.3.3详细介绍了各种类型的字段描述以及他们代表的JAVA类型。

  你可以使用javap工具来生成字段描述符。

  4.1.3 访问静态字段

  访问静态字段和访问实例字段相似,看下面这个InstanceFieldAccess例子的变形:

  class StaticFielcdAccess {

  private static int si;

  private native void accessField();

  public static void main(String args[]) {

  StaticFieldAccess c = new StaticFieldAccess();

  StaticFieldAccess.si = 100;

  c.accessField();

  System.out.println("In Java:");

  System.out.println(" StaticFieldAccess.si = " + si);

  }

  static {

  System.loadLibrary("StaticFieldAccess");

  }

  }

  StaticFieldAccess这个类包含一个静态字段si,main方法创建了一个对象,初始化静态字段,然后调用本地方法StaticFieldAccess.accessField在本地代码中打印静态字段中的值,然后设置新的值,为了演示这个值确实被改变了,在本地方法返回后,JAVA中再次这个静态字段的值。

  下面是本地方法StaticFieldAccess.accessField的实现:

  JNIEXPORT void JNICALL

  Java_StaticFieldAccess_accessField(JNIEnv *env, jobject obj)

  {

  jfieldID fid; /* store the field ID */

  jint si;

  /* Get a reference to obj's class */

  jclass cls = (*env)->GetObjectClass(env, obj);

  printf("In C:\n");

  /* Look for the static field si in cls */

  fid = (*env)->GetStaticFieldID(env, cls, "si", "I");

  if (fid == NULL) {

  return; /* field not found */

  }

  /* Access the static field si */

  si = (*env)->GetStaticIntField(env, cls, fid);

  printf(" StaticFieldAccess.si = %d\n", si);

  (*env)->SetStaticIntField(env, cls, fid, 200);

  }

  运行程序可得到输出结果:

  In C:

  StaticFieldAccess.si = 100

  In Java:

  StaticFieldAccess.si = 200

  Java简介

  它最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,以“Java”的名称正式发布。

  java标志

  Java的主要工作是通过编程语言来制作互联网页面、制作动态效果以及网站等技术,现在网上关于这方面的教程有很多,但很多都是过时的,因为互联网是在不断的变化的,互联网上的牛人,要想成为Java大神,走进这条Java大神之群,首先Java教程的开头是二三一,Java的最中间是三一四,Java的最后面再加上零二八,把前面的综合起来,Java大神期待你的加入。这里有很多互联网大牛教你学习,还有免费的课程。不是想学习的就不要加了。

  Java 编程语言的风格十分接近C、C++语言。Java是一个纯的面向对象的程序设计语言,它继承了 C++ 语言面向对象技术的核心,Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java SE 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。

  Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。但在 J2SE 1.4.2 发布后,Java 的执行速度有了大幅提升。

  与传统程序不同,Sun 公司在推出 Java 之际就将其作为一种开放的技术。全球数以万计的 Java 开发公司被要求所设计的 Java 软件必须相互兼容。“Java 语言靠群体的力量而非公司的力量”是 Sun 公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。

  Sun 公司对 Java 编程语言的解释是:Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。

  Java 平台是基于 Java 语言的平台。这样的平台目前非常流行,因此微软公司推出了与之竞争的.NET平台以及模仿 Java 的 C#语言。

  Java名称的由来

  说起Java这个名称是怎么来的,在世界上还流传着不同版本的传说。

  1.咖啡说

  java之父

  1995年,SUN公司和好莱坞准备开展一个技术交流会,皆以宣传公司的产品。James Gosling带着他的系统来到了技术交流会。但他不能用OAK这个名字了。OAK已经被一家半导体公司注册了,并且注册了好多领域,只能换名。James Gosling四处观望寻找灵感,他看到了一个泡咖啡的杯子,杯子上印着Java,James Gosling就把这种语言改名为Java。

  2.度假说

  1994年6、7月间,在经历了一场历时三天的头脑风暴的讨论后,Green团队决定再一次改变了努力的目标,这次他们决定将该技术应用于万维网。他们认为随着Mosaic浏览器的到来,因特网正在向同样的高度互动的远景演变,而这一远景正是他们在有线电视网中看到的。此时Green小组组员正在在印度尼西亚爪哇岛(Java)度假时,于是他们把Oak改名为Java。

  3.简写说

  Java命名来源于开发人员名字的组合:James Gosling、Arthur Van Hoff和Andy Bechtolsheim首字母的缩写。

  4.头脑风暴说

  关于Java命名的由来,James Gosling是曾经这样回答过Jonathan Schwartz,原文如下:

  From: James Gosling

  Date: August 24, 2007 8:16:58 PM PDT

  To: Jonathan Schwartz

  Subject: How was Java named?

  The story goes like this:

  We needed a name. We had been using "oak" (which was selected essentially randomly by me), and while the team had grown attached to it, the trademark lawyers ruled it out. We had lots of email debates about names, but nothing got resolved. We ended up in the awkward position where the #1 thing stopping us from shipping was the name.

  Our marketing lead knew someone who was a "naming consultant" (I don't remember his name, but he was great). We could neither afford the price nor the time of a conventional product naming process. He agreed to do something rather odd, but effective and quick: he acted as a facilitator at a meeting where about a dozen of us locked ourselves in a room for an afternoon. He started asking us questions like "How does this thing make you feel?" (Excited!) "What else makes you feel that way?" (Java!) We ended up with a board covered with essentially random words. Then he put us through a sorting process where we ended up with a ranking of the names. We ended up with a dozen name candidates and sent them off to the lawyers: they worked down the list until they hit one that cleared their search.

  "Java" was the fourth name on the list. The first name on the list was "Silk", which I hated but everyone else liked. My favorite was "Lyric", the third one on the list, but it didn't pass the lawyers test. I don't remember what the other candidate names where.

  So, who named Java? Marketing organized the meeting, the consultant ran it, and a whole pile of us did a lot of yelling out of random words. I'm honestly not real sure who said "Java" first, but I'm pretty sure it was Mark Opperman.

  There certainly wasn't any brilliant marketing mind who went through a coherent thought process.

  中文翻译如下:

  我们需要一个名字。我们已经使用了oak(那是我随机挑选的),然而当开发团队接触它的时候,这个商标已经被律师排除了。我们收到许多关于命名争论的电子邮件,但是问题没有解决。我们需要结束这种棘手的处境,阻挠我们前进的首要问题就是这命名。

  我们市场部领导了解到某人是“命名顾问”(我不记得他的名字了,但是他是很棒)。我们既不可能提供金钱也不可能提供时间用于常规产品的命名过程。他同意做个临时的事,但是要高效和快捷:一天下午,我们大概十二个人将自己锁在一个房间内,他在会上充当一个主持人。他让我们写一些名称来做一个挑选。我们最终写了十二个候选名称,并且将其送达给律师团审阅。律师团看了列表,选定了能排出其它名称的候选项。“Java”是列表里的第四个名称。列表里的第一个名称是“Silk”,那是我讨厌但是其他人喜欢的名称。我最喜欢的是列表里的第三个名称“Lyric”,但是它没有通过律师团的审核。我不记得其它候选名称了。

  为什么命名Java呢?市场部组织了一个会议,顾问提名,我们全体人员喊出随机的词语。说实话,我真的不确定谁最先说“Java”,但是我有很有把握说这人是Mark Opperman。

  确实不存在任何杰出的市场理念能够通过一致的认可。


看了java中什么是字段还看:

1.成为JAVA软件工程师需要学哪些

2.java简历中的项目经验怎么写

3.Java中对象和引用的具体区别

4.java个人简历中的项目经验范文

5.java简历中项目经验怎么写

245705