In Java sind alle numerischen Basistypen vorzeichenbehaftet. Char ist nur insofern eine Ausnahme, weil ein Vorzeichen bei Zeichen nicht umwerfend viel Sinn ergibt.
Für C-Programmierer erscheint das zunächst als willkürliche Einschränkung, ist aber mit Bedacht so gemacht.
Schließlich ist ein grundlegendes Problem beim Programmieren in C (und ähnlichen Sprachen), daß man ohne weiteres signed und unsigned-Typen miteinander vergleichen oder einander zuweisen kann, obwohl das unter Umständen gar keinen Sinn ergibt. Jeder der C schon mal in großen Projekten programmiert hat, weiß, daß die so entstandenen Fehler nur sehr schwer zu finden sind.
In Java umgeht man dieses Problem pragmatisch: wenn eine Zahl nicht mehr in ein signed byte paßt, muß man eben ein Short nehmen. Paßt es nicht mehr in ein Short, nimmt man eben ein int usw.
Wie so oft in Java hat man hier der sicheren und sauberen Weg gewählt, auch wenn er etwas Performance und/oder Speicher kostet.
Trotzdem kann man in Java natürlich alles mit Bytes machen, was man auch in C könnte. Man muß sich nur immer bewußt sein, daß die Ergebnisse sämtlicher mathematischer Operationen, die man auf Bytes, Shorts und Chars anwendet, wieder vom Typ Int sind.