java.rst
author Oleksandr Gavenko <gavenkoa@gmail.com>
Wed, 19 Jan 2011 18:00:24 +0200
changeset 781 fd028a196ff0
parent 780 a6e551deff14
child 899 7b4265c8d324
permissions -rw-r--r--
Fix hexes.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
735
5c437e2d5fe1 Fix Emacs settings.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 592
diff changeset
     1
-*- mode: outline; coding: utf-8; fill-column: 80 -*-
176
5181378e42af CR/LF ==> LF.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 157
diff changeset
     2
5181378e42af CR/LF ==> LF.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 157
diff changeset
     3
* Class version.
5181378e42af CR/LF ==> LF.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 157
diff changeset
     4
5181378e42af CR/LF ==> LF.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 157
diff changeset
     5
See value of 6 and 8 bytes in .class file:
5181378e42af CR/LF ==> LF.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 157
diff changeset
     6
5181378e42af CR/LF ==> LF.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 157
diff changeset
     7
  {0xCA, 0xFE, 0xBA, 0xBE, 0x00, minor, 0x00, major}
5181378e42af CR/LF ==> LF.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 157
diff changeset
     8
780
a6e551deff14 Add hex for major Java version.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 735
diff changeset
     9
   major   minor  Java platform version
781
fd028a196ff0 Fix hexes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 780
diff changeset
    10
  45 0x27    3           1.0
fd028a196ff0 Fix hexes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 780
diff changeset
    11
  45 0x27    3           1.1
fd028a196ff0 Fix hexes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 780
diff changeset
    12
  46 0x28    0           1.2
fd028a196ff0 Fix hexes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 780
diff changeset
    13
  47 0x29    0           1.3
fd028a196ff0 Fix hexes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 780
diff changeset
    14
  48 0x30    0           1.4
fd028a196ff0 Fix hexes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 780
diff changeset
    15
  49 0x31    0           1.5
fd028a196ff0 Fix hexes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 780
diff changeset
    16
  50 0x32    0           1.6
267
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    17
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    18
* Modifiers.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    19
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    20
** public.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    21
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    22
 * Public class is visible in other packages.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    23
 * Public field is visible everywhere (class must be public too).
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    24
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    25
** private.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    26
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    27
 * Private variables or methods may be used only by an instance of the same
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    28
 class that declares the variable or method
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    29
 * A private feature may only be accessed by the class that owns the feature.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    30
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    31
** protected.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    32
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    33
 * Is available to all classes in the same package and also available to all
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    34
 subclasses of the class that owns the protected feature.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    35
 * This access is provided even to subclasses that reside in a different
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    36
 package from the class that owns the protected feature.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    37
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    38
** default.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    39
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    40
What you get by default ie, without any access modifier.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    41
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    42
 * It means that it is visible to all within a particular package.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    43
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    44
* static.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    45
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    46
 * Static means one per class, not one for each object no matter how many
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    47
   instance of a class might exist. This means that you can use them without
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    48
   creating an instance of a class.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    49
 * Static methods are implicitly final, because overriding is done based on
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    50
   the type of the object, and static methods are attached to a class, not an
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    51
   object.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    52
 * A static method in a superclass can be shadowed by another static method in
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    53
   a subclass, as long as the original method was not declared final.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    54
 * You can't override a static method with a nonstatic method.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    55
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    56
* final.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    57
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    58
 * A final class can't be extended ie., final class may not be subclassed.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    59
 * A final method can't be overridden when its class is inherited.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    60
 * You can't change value of a final variable.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    61
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    62
* Exceptions.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    63
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    64
A checked exception is some subclass of Exception (or Exception itself),
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    65
excluding class RuntimeException and its subclasses.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    66
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    67
Unchecked exceptions are RuntimeException and any of its subclasses. Class
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    68
Error and its subclasses also are unchecked. With an unchecked exception,
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    69
however, the compiler doesn't force client programmers either to catch the
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    70
exception or declare it in a throws clause.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    71
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    72
* Inner classes.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    73
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    74
** Nested top-level classes.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    75
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    76
If you declare a class within a class and specify the static modifier, the
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    77
compiler treats the class just like any other top-level class.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    78
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    79
Any class outside the declaring class accesses the nested class with the
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    80
declaring class name acting similarly to a package. eg, outer.inner. Top-level
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    81
inner classes implicitly have access only to static variables. There can also
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    82
be inner interfaces. All of these are of the nested top-level variety.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    83
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    84
** Member classes.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    85
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    86
Member inner classes are just like other member methods and member variables
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    87
and access to the member class is restricted, just like methods and variables.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    88
This means a public member class acts similarly to a nested top-level class.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    89
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    90
The primary difference between member classes and nested top-level classes is
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    91
that member classes have access to the specific instance of the enclosing
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    92
class.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    93
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    94
** Local classes.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    95
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    96
Local classes are like local variables, specific to a block of code. Their
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    97
visibility is only within the block of their declaration. In order for the
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    98
class to be useful beyond the declaration block, it would need to implement a
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
    99
more publicly available interface.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
   100
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
   101
Because local classes are not members, the modifiers public, protected,
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
   102
private, and static are not usable.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
   103
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
   104
** Anonymous classes.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
   105
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
   106
Anonymous inner classes extend local inner classes one level further. As
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
   107
anonymous classes have no name, you cannot provide a constructor.
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
   108
305
6c7890231c7d 64-bit problem.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 267
diff changeset
   109
* 64-bit problem.
267
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
   110
305
6c7890231c7d 64-bit problem.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 267
diff changeset
   111
  http://www.java.com/en/download/faq/java_win64bit.xml
6c7890231c7d 64-bit problem.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 267
diff changeset
   112
                Which version of Java should I download for my 64-bit Windows
6c7890231c7d 64-bit problem.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 267
diff changeset
   113
                operating system?
6c7890231c7d 64-bit problem.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 267
diff changeset
   114
  http://java.sun.com/javase/6/webnotes/install/system-configurations.html
780
a6e551deff14 Add hex for major Java version.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 735
diff changeset
   115
                Java SE 6 Release Notes Supported System Configurations
267
c513b3c60e73 Inner classes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 176
diff changeset
   116
485
ed67cea61707 Java performance.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 305
diff changeset
   117
* Java performance.
ed67cea61707 Java performance.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 305
diff changeset
   118
ed67cea61707 Java performance.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 305
diff changeset
   119
  http://java.sun.com/performance/reference/whitepapers/5.0_performance.html
ed67cea61707 Java performance.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 305
diff changeset
   120
  http://java.sun.com/performance/reference/whitepapers/6_performance.html
592
cbb6732070d8 Creating jar.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 485
diff changeset
   121
cbb6732070d8 Creating jar.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 485
diff changeset
   122
* Creating jar.
cbb6732070d8 Creating jar.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 485
diff changeset
   123
cbb6732070d8 Creating jar.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 485
diff changeset
   124
  $ jar cf myFile.jar *.class
cbb6732070d8 Creating jar.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 485
diff changeset
   125
cbb6732070d8 Creating jar.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 485
diff changeset
   126
  $ jar cmf myManifestFile myFile.jar *.class
cbb6732070d8 Creating jar.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 485
diff changeset
   127
cbb6732070d8 Creating jar.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 485
diff changeset
   128
  $ jar -cfe Main.jar foo.Main foo/Main.class
cbb6732070d8 Creating jar.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 485
diff changeset
   129