Il numero "int" 300 puoi rappresentarlo in binario (in Java sempre su 32 bit) come
00000000 00000000 00000001 00101100
Se su questo valore esegui un casting al tipo "byte", quello che stai cercando di fare è di andarlo a mettere dentro una variabile di 8 bit. Ma poichè è evidente che 32 bit non possono stare dentro a 8 bit, Java va a inserire nella nuova variabile solo quello che riesce a farci stare: ovverosia solo gli 8 bit più a destra. Tutto quello che viene prima (cioè i restanti 24 bit) viene troncato.
Pertanto, la nuova variabile "byte" conterrà il valore binario
00101100
che, guarda caso, corrisponde esattamente al valore decimale 44