I don't understand all of the ramifications of these different methods of invoking a program under BPXBATCH but this is a fun little java check out program:
//STEP3 EXEC PGM=BPXBATCH,REGION=0M,
// PARM='PGM /usr/lpp/java/J7.0_64/bin/java -fullversion'
//*
//SYSOUT DD SYSOUT=*
//STDERR DD SYSOUT=*
//STDOUT DD SYSOUT=*
//STEP4 EXEC PGM=BPXBATCH,REGION=0M,
// PARM='SH /usr/lpp/java/J7.0_64/bin/java -fullversion'
//*
//SYSOUT DD SYSOUT=*
//STDERR DD SYSOUT=*
//STDOUT DD SYSOUT=*
//STEPEASY EXEC PGM=BPXBATCH,REGION=0M
//*
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//STDERR DD SYSOUT=*
//STDOUT DD SYSOUT=*
//STDPARM DD *
PGM /usr/lpp/java/J7.0_64/bin/java -fullversion
/*
//STEPHARD EXEC PGM=BPXBATCH
//STDPARM DD *
SH /usr/lpp/java/J7.0_64/bin/java -fullversion
//SYSPRINT DD SYSOUT=*
//STDERR DD SYSOUT=*
//STDOUT DD SYSOUT=*
//STDERR DD SYSOUT=*
//STDOUT DD SYSOUT=*
//STDENV DD *
CLASSPATH=/usr/lpp/ars/V8R5M0/bin/xml/ODAdmin.jar:
/usr/lpp/java/J1.7_64/lib/core.jar
LIBPATH=/usr/lpp/ars/V8R5M0/bin/xml:$LIBPATH
PATH=/usr/lpp/java/J1.7_64/bin:/usr/lpp/ars/V8R5M0/bin:$PATH
/*