Re: Static methods
"jupiter" <jupiter49byebyeSpam@msn.com> writes:
In my BankAccount class I have a variable declared as private
static
int pin.
What's the matter with that? There's only one customer at his
lousy bank.
/* Why? Here is a class with a static field: */
public class Scan { static int i = 0; public static int get(){ return i++; }}
/* Let's create two instances of it: */
public class Main
{ public static void main( java.lang.String[] args ) throws java.lang.Exception
{ final java.lang.Class instance1 = new ScanLoader().loadClass( "Scan" );
final java.lang.Class instance2 = new ScanLoader().loadClass( "Scan" );
final java.lang.Class[] c = new java.lang.Class[]{};
final java.lang.Object[] o = new java.lang.Object[]{};
java.lang.System.out.println( instance1.getMethod( "get", c ).invoke( null, o ));
java.lang.System.out.println( instance1.getMethod( "get", c ).invoke( null, o ));
java.lang.System.out.println( instance2.getMethod( "get", c ).invoke( null, o ));
java.lang.System.out.println( instance2.getMethod( "get", c ).invoke( null, o )); }}
/* There are really two different static fields, as they can
count independently:
0
1
0
1
The rest of the code: */
class ScanLoader extends ClassLoader
{ public ScanLoader()
{ super(ScanLoader.class.getClassLoader()); }
public java.lang.Class<?> loadClass( final java.lang.String className)
throws ClassNotFoundException
{ return findClass( className ); }
public java.lang.Class<?> findClass( final java.lang.String className )
{ byte classByte[];
java.lang.Class<?> result = null;
if( "java.lang.Object".equals( className ))return java.lang.Object.class;
try
{ java.lang.String classPath =
((java.lang.String)ClassLoader.getSystemResource
( className.replace( '.', java.io.File.separatorChar ) + ".class" ).getFile() ).
substring( 1 );
classByte = loadClassData(classPath);
result = defineClass(className,classByte,0,classByte.length,null);
return result; }
catch(final java.lang.Exception e){ throw new java.lang.RuntimeException(e); }}
private byte[] loadClassData
( final java.lang.String className )
throws java.io.IOException
{ final java.io.File f = new java.io.File( className );
final int size =( int )f.length();
final byte buff[] = new byte[ size ];
{ java.io.FileInputStream fis = new java.io.FileInputStream( f );
{ java.io.DataInputStream dis = new java.io.DataInputStream( fis );
dis.readFully( buff );
dis.close(); }}
return buff; }}