| Refresh | Home EGTry.com

object construction and initialization


can not use uninitialized object

			mv.visitFieldInsn(GETSTATIC,"java/lang/System", "out", "Ljava/io/PrintStream;");
			//stack: PrintStream
			
			///Date date=new Date();
			mv.visitTypeInsn(NEW, "java/util/Date");
			//stack: uninitialized Date object
			mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/Object;)V");
                        //ERROR: Expecting to find object/array on stack


INVOKESPECIAL does not return a value

			///Date date=new Date();
			mv.visitTypeInsn(NEW, "java/util/Date");
			mv.visitMethodInsn(INVOKESPECIAL, "java/util/Date", "<init>", "()V");
			//stack: empty. <init> through INVOKESPECIAL does not return a value
			mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/Object;)V");
			//ERROR: Unable to pop operand off an empty stack


hands on the new created object

			mv.visitFieldInsn(GETSTATIC,"java/lang/System", "out", "Ljava/io/PrintStream;");
			//stack: PrintStream
			
			///Date date=new Date();
			mv.visitTypeInsn(NEW, "java/util/Date");
			
			mv.visitInsn(DUP);
		//	mv.visitVarInsn(ASTORE,1); //store the reference to be used later
			
			mv.visitMethodInsn(INVOKESPECIAL, "java/util/Date", "<init>", "()V");
			//stack: use one copy. another copy is in stack
			
		//	mv.visitVarInsn(ALOAD, 1);
			mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/Object;)V");