Represents a unique location in the bytecode.
It comprises the
Clazz and
Member
where it is contained, the offset therein and the
corresponding line number in the source file
(may be -1 if it is unknown).
Consider the following pseudo-bytecode example
which contains code location comments:
public class Test
{
// class "Test", member "field", line 3, offset 0
public String field;
public String toString()
{
// class "Test", member "toString", line 6, offset 0
aload_0
// class "Test", member "toString", line 6, offset 1
getfield #1 <Test.field : Ljava/lang/String;>
// class "Test", member "toString", line 6, offset 4
areturn
}
}
-
Inside methods: Like each location, instructions
inside methods have a line number. But as there may be
several expressions on the same line, to correctly identify
each instruction we also need their bytecode offset.
E.g. the
getfield instruction inside toString()
has the offset 1.
-
Fields: In this case
Test#field.
A field location has a line number (3 in this example)
but no offset, as this concept is only applicable to
methods.