Сама по себе CAN - это просто транспорт, к которому есть просто библиотека, которая просто работает: послали байты - приняли байты, была ошибка - обработали. То есть на прикладном уровне из специфики можно отметить разве что четкое разделение приоритетов устройств - когда идет сообщение с большим приоритетом, оно не встречает коллизий, "задавливая" их.
С физической стороны тоже мало интересного, однако изучение протокола здесь потребует наличия:
1) Пары реальных устройств с настоящим CAN - подопытные экземпляры
2) Цифрового запоминающего осциллографа, или же приставки к компьютеру - это глаза экспериментатора, без него (на худой конец - логического анализатора) к интерфейсам можно и не соваться. Аналоговый осциллограф тут мало полезен - разве что форму сигналов посмотреть, но вот разобрать, какие биты по нему пронеслись - увы - не получится.
Что касается разработки под контроллер на Java - это сугубо прикладной язык с абстракцией от реального железа, так что писать на нем системное ПО - нонсенс.
Интересное издание, в котором много каких интерфейсов разобрано -
www.ozon.ru/context/detail/id/18559835