- 浏览: 356256 次
- 性别:
- 来自: 南京
博客专栏
-
设计模式那些事儿
浏览量:5966
文章分类
- 全部博客 (85)
- news (3)
- java面试题 (3)
- java基础 (2)
- 英语短文 (2)
- 英语演讲 (2)
- Weekly Address (5)
- 英语写作 (2)
- 转载 (1)
- 2010 FIFA World Cup (5)
- Scrum (1)
- 计算机基础 (2)
- java引用对象 (1)
- 英语阅读 (1)
- Ext (6)
- Javascript (3)
- Web编程 (4)
- 战国策 (7)
- html (1)
- java (33)
- concurrency (1)
- jvm (31)
- 方法区 (9)
- 栈 (5)
- 堆 (1)
- 程序计数器 (1)
- 本地方法栈 (1)
- class file (5)
- 常量池 (2)
- attributes (1)
- 连接模型 (1)
- applet (1)
- gc (5)
- 垃圾收集 (5)
- 方法调用 (2)
- IBM (0)
- 门户(Portal) (0)
- Solr (1)
- Lucene (1)
- 全文检索 (1)
- 设计模式 (4)
- 责任链模式 (1)
- 责任链 (1)
- COR (1)
- Pattern (1)
最新评论
-
Nabulio:
是不错的
Java的Integer与int互转 -
shihengli2010:
学习了 !Integer i = 100; Integer ...
Java的Integer与int互转 -
flex涵:
还可以,差不多就是这个意思.
Java的Integer与int互转 -
lijingshou:
相当好用。。。
输入年月日格式yyyyMMdd,判断是否是周末 -
denverj:
你好,是这本书的英文版,名字叫<Inside the J ...
JVM学习笔记-帧数据区(Frame Data)
Methods
Each method declared in a class or interface or generated by the compiler is described in the class file by a method_info table. The two types of compiler-generated methods that may appear in class files are instance initialization methods (named <init) and class initialization methods (named <clinit). For more information on the compiler-generated methods, see Chapter 7, "The Lifetime of a Class." The format of the method_info table is shown in Table 6-22.
在class文件中,每个在类和接口中声明的方法,或者由编译器产生的方法,都由一个可变长度的method_info表来描述。同一个类中不能存在两个名字及描述符完全相同的方法。需要注意的是,在java程序设计语言中,尽管在同一个类或者接口中声明的两个方法不能有同样的特征签名(除返回类型之外的描述符),但在同一个class文件中,两个方法可以拥有同样的特征签名,前提是它们的返回值不能相同。换句话说:在Java源文件的同一个类里,如果声明了两个具有相同名字和相同参数类型、但返回值不同的方法,这个程序将无法编译通过。在Java程序设计语言中,不能仅仅通过返回值的不同来重载方法。但是同样的两个方法可以和谐地在一个class文件中共存。
有可能在class文件中出现的两种编译器产生的方法是:实例初始化(名为<init>)和类与接口初始化方法(名为<clinit>)。Method_info表的格式如表6-22所示。
Table 6-22. Format of a method_info table
Type | Name | Count |
u2 | access_flags | 1 |
u2 | name_index | 1 |
u2 | descriptor_index | 1 |
u2 | attributes_count | 1 |
attribute_info | attributes | attributes_count |
Method_info表中各项如下:
access_flags
The modifiers used in declaring the method are placed into the methodís access_flags item. Table 6-23 shows the bits used by each flag.
在声明方法时使用的修饰符存放在方法的access_flags项中,表6-23列出了各个标志所使用的位。1.2版本中加进了ACC_STRICT标志,它指明方法中的所有表达式都必须使用FP-strict模式进行计算。
Table 6-23. Flags in the access_flags item of method_info tables
Flag Name | Value | Meaning if Set | Set By |
ACC_PUBLIC | 0x0001 | Method is public | Classes and all methods of interfaces |
ACC_PRIVATE | 0x0002 | Method is private | Classes only |
ACC_PROTECTED | 0x0004 | Method is protected | Classes only |
ACC_STATIC | 0x0008 | Method is static | Classes only |
ACC_FINAL | 0x0010 | Method is final | Classes only |
ACC_SYNCHRONIZED | 0x0020 | Method is synchronized | Classes only |
ACC_NATIVE | 0x0100 | Method is native | Classes only |
ACC_ABSTRACT | 0x0400 | Method is abstract | Classes and all methods of interfaces |
For methods declared in a class (not an interface), at most one of ACC_PUBLIC, ACC_PRIVATE, and ACC_PROTECTED may be set. If a methodís ACC_FINAL flag is set, then its ACC_SYNCHRONIZED, ACC_NATIVE, and ACC_ABSTRACT flags must not be set. If a methodís ACC_PRIVATE or ACC_STATIC flag is set, then its ACC_ABSTRACT flag must not be set. All methods declared in interfaces must have their ACC_PUBLIC and ACC_ABSTRACT flags set.
类(不包括接口)中声明的方法只能拥有ACC_PUBLIC、ACC_PRIVATE、ACC_PROTECTED这三个标志中的一个。如果设定了一个方法的ACC_ABSTRACT标志,那么它的ACC_PRIVATE、ACC_STATIC、ACC_FINAL、ACC_SYNCHRONIZED、ACC_NATIVE以及ACC_STRICT标志都必须清除。接口中声明的所有方法必须有ACC_PUBLIC和ACC_ABSTRACT标志,除此以外接口方法不能使用其他标志,但接口初始化方法(<clinit>)可以使用ACC_STRICT标志。
Instance initialization (<init) methods may only use flags ACC_PUBLIC, ACC_PRIVATE, and ACC_PROTECTED. Because class initialization (<clinit) methods are invoked by the Java Virtual Machine, never directly by Java bytecodes, the the access_flags for <clinit methods is ignored.
实例初始化方法(<init>)可以只使用ACC_PUBLIC、ACC_PRIVATE和ACC_PROTECTED标志。因为类与接口初始化方法(<clinit>)只由Java虚拟机直接调用,永远不会被Java字节码直接调用,这样,<clinit>方法的access_flags中的标志位,除去ACC_STRICT之外的所有位都应该被忽略。
All unused bits in access_flags must be set to zero and ignored by Java Virtual Machine implementations.
在access_flags中未用到的位都被设为0,Java虚拟机实现也将忽略它们。
name_index
The name_index gives the index of a CONSTANT_Utf8_info entry that gives the simple (not fully qualified) name of the method.
Name_index项提供了CONSTANT_Utf8_info入口的索引,该入口给出了方法的简单名称(不是全限定名)。在class文件中的每一个方法的名称,都必须或者未<init>,或者为<clinit>,或者是Java程序设计语言中有效的方法名称(简单名称,不是全限定名)。
descriptor_index
The descriptor_index gives the index of a CONSTANT_Utf8_info entry that gives the descriptor of the method.
Descriptor_index提供了CONSTANT_Utf8_info入口的索引,该入口给出了方法的描述符。
attributes_count and attributes
The attributes item is a list of attribute_info tables. The attributes_count indicates the number of attribute_info tables in the list. Three kinds of attributes that are defined by the Java Virtual Machine specification that may appear in this item are Code, Exceptions, and Synthetic. These three attributes are described in detail later in this chapter.
Attributes项是由多个attribute_info表组成的列表。Attribute_count给出了列表中attribute_info表的数量。一个字段在其列表中可以有任意数量的属性。在此项中可能会出现的由Java虚拟机规范定义的四种属性是:Code、Deprecated、Exceptions和Synthetic。这四种属性将在本章后面进一步阐述。Java虚拟机只需要识别Code和Exception属性。虚拟机实现必须忽略任何无法识别的属性。
发表评论
-
java书籍
2011-12-15 15:31 0线程 Java Concurrency in Pra ... -
JVM学习笔记-本地方法调用(Invoking a Native Method)
2011-11-25 11:56 1200Invoking a Native Method ... -
JVM学习笔记-调用Java方法(Invoking a Java Method)
2011-11-25 11:35 1551Invoking a Java Method As m ... -
JVM学习笔记-分代收集器(Generational Collectors)
2011-11-23 14:41 1958Generational Collectors ... -
JVM学习笔记-拷贝收集器(Copying Collectors)
2011-11-22 16:34 1654Copying Collectors Copy ... -
JVM学习笔记-压缩收集器(Compacting Collectors)
2011-11-22 16:17 1377Compacting Collectors G ... -
JVM学习笔记-跟踪收集器(Tracing Collectors)
2011-11-22 16:04 1967Tracing Collectors Trac ... -
JVM学习笔记-引用计数收集器(Reference Counting Collectors)
2011-11-22 15:46 2551Reference Counting Collect ... -
applet notinited的解决方案
2011-11-13 14:45 4584最近项目当中正好使用到了applet,这个很少接触过的东东。 ... -
JVM学习笔记-动态连接和解析(Dynamic Linking and Resolution)
2011-11-08 11:09 3473When you compile a Java pro ... -
JVM学习笔记-属性格式(Attributes Types)
2011-11-07 12:15 1520Attributes The Java Vir ... -
JVM学习笔记-属性(Attributes)
2011-11-07 12:03 1556Attributes As mentioned ... -
JVM学习笔记-字段(Fields)
2011-11-07 11:17 1975Each field (class variable a ... -
JVM学习笔记-特殊字符串(Special Strings)
2011-11-05 14:33 1710Special Strings 特殊字符串 T ... -
JVM学习笔记-Class文件(Class File)
2011-11-05 14:39 1630What is a Java Class Fi ... -
JVM学习笔记-本地方法栈(Native Method Stacks)
2011-11-02 10:16 19262本地方法栈(Native Me ... -
JVM学习笔记-帧数据区(Frame Data)
2011-10-28 09:16 1757In addition to the local var ... -
JVM学习笔记-操作数栈(Operand Stack)
2011-10-27 11:12 14149Like the local variables, th ... -
JVM学习笔记-局部变量区(Local Variables)
2011-10-27 10:42 3092The local variables secti ... -
JVM学习笔记-栈帧(The Stack Frame)
2011-10-27 10:35 2561The stack frame has three pa ...
相关推荐
### Java学习笔记 #### Java的优势 1. **跨平台(平台=OS)可移植性** - **字节码文件**:Java程序被编译成字节码文件(`.class`),这些文件不包含任何特定于操作系统的内存布局信息。这意味着它们与操作系统和...
这份"java 学习笔记大全"包含了深入学习Java所需的关键知识点,无论你是初学者还是经验丰富的开发者,都能从中受益。 一、Java基础 1. 变量与数据类型:Java提供了基本数据类型(如int、double、boolean等)和引用...
**JDK 1.50 学习笔记** 在Java发展历程中,JDK 1.5(也称为Java 5.0)是一个重要的里程碑,它引入了许多创新特性,极大地提升了开发效率和代码质量。以下是对这个版本的一些核心知识点的详细说明: ### 1. 泛型...
在这个学习笔记中,良葛格将带领我们深入理解JDK 5.0的关键特性,并提供实用的学习指导。 1. **泛型(Generics)** 泛型是JDK 5.0引入的一项重要特性,它允许在定义类、接口和方法时指定类型参数,从而提高了代码...
本学习笔记主要针对Java初学者,旨在帮助他们理解和掌握Java编程的基础知识,以及如何解决编程过程中遇到的bug。 首先,我们需要了解Java的基本结构。Java程序是由类(Class)组成的,每个类都包含属性(Fields)和...
不过,基于文档标题和描述,我们可以提炼出关于Java JDK 8学习笔记的一些知识点。 Java JDK 8是Java开发工具包的第8个版本,包含了Java编程语言的实现。JDK 8引入了众多新特性,对于Java开发者来说,是学习和升级的...
Java的跨平台能力是通过Java虚拟机(JVM)实现的,它能够将Java源代码编译成字节码,然后在任何支持JVM的平台上运行。这意味着Java程序不需要针对特定的操作系统进行重新编译。 JDK(Java Development Kit)是Java...
### 《HEAD FIRST JAVA》笔记知识点总结 #### 第一章 进入Java的世界(基本概念) - **Java的工作原理与发展简史**: - Java是一种跨平台、面向对象的编程语言,由Sun Microsystems公司于1995年推出。它的设计...
1. **基本语法**:Java程序由类(class)组成,每个类包含变量(fields)和方法(methods)。程序的执行始于main方法。学习Java需要了解数据类型(如整型、浮点型、字符型、布尔型等)、变量声明、运算符、流程控制...
在Java的学习中,首先会涉及基础语法,包括类(Class)、对象(Object)、变量(Variable)、数据类型(Data Types)、控制结构(Control Structures)如if语句和for循环,以及方法(Methods)。类是Java中的核心...