title: Java 8 bytecode how are default methods in interfaces marked
body: <p>since Java 8 it is allowed to predefine methods in interfaces. Some of these standard implementations are already implemented on the "standard" interfaces such as CharSequence. If you try to read Java 8 ByteCode (e.g. the rt.jar of the Java home folder) with a JVM 7, an error occurs. </p>
  
  <p><em>e.g. the type java.lang.CharSequence cannot be resolved.</em></p>
  
  <p>This may not be the only difference between levels, but I would like to understand the structure of the new byte code.</p>
  
  <pre><code>public interface com.company.ITest {
  public void HelloWorld();
  Code:
     0: getstatic     #1                  // Field java/lang/System.out:Ljava/io/PrintStream;
     3: ldc           #2                  // String hello world
     5: invokevirtual #3                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
     8: return
  }
  </code></pre>
  
  <p>This Bbytecode was produced by this Javacode:</p>
  
  <pre><code>public interface ITest {
      default void HelloWorld(){
          System.out.println("hello world");
      }
  }
  </code></pre>
  
  <p>So here is my question: How does an default interface impact on the constant pool?</p>
  
  <p>Is any of these flags relevant:</p>
  
  <blockquote>
    <p>CONSTANT_MethodHandle CONSTANT_MethodType CONSTANT_InvokeDynamic</p>
  </blockquote>