Boilerplate

The shortest Java boilerplate (valid program) is

interface I{static void main(String[]a){}}

The var data type

Defining a type with var is often shorter. Note that multiple assignment is not possible with this method.

String s="foo";
// vs
var s="foo";

Unicode constants

This can save 1 to 2 characters on char scoring. If you need a large integer constant between 1000 and 65535 (inclusive), it may help to use a char literal instead of a number:

var n=30000;
// vs
var n='田';

Scientific Notation

This can save a few chars when using large numbers that end in zeros

var n=30000;
// vs
var n=3e4;

Loop n times

Compare these two ways of looping n times. The latter is 2 bytes shorter.

interface I{static void main(String[]s){for(int i=0;i++<n;)f();}}
// vs
interface I{static void main(String[]s){for(I m:new I[n])f();}}