The first half uses Java, but sticks with a pretty vanilla subset. If you're comfortable in another OOP language, you should be able to squint and figure out what's going on.
The second half uses C. That does assume you have some basic familiarity with pointers, malloc(), etc. but doesn't assume you're a C expert. If you're totally new to C, it might be worth spending a little time learning the basics if you really want to grok the last half of the book. If you mostly want to understand the concepts around bytecode, stack-based VMs, and Pratt parsing, you can mostly ignore the C details and get by.
Also, the code in the book has been ported to many other languages:
https://github.com/munificent/craftinginterpreters/wiki/Lox-...
So you can always use those as a reference too.