Adam Chalkley wrote:
I feel this task will bring my knowledge of Java up to the next level
This isn't so much about Java as it is about software development. This can literally be implemented in any language. In fact, the language implementation is the easy part. The hard part is organizing your ideas and figuring out the algorithm.
A good understanding of the different "rules" for making moves that increase your chances of winning or at least eliminate your chances of losing will give you the basis for writing your program logic.
The best ideas are the crazy ones. If you have a crazy idea and it works, it's really valuable.—Kent Beck
When I was a child (in the 1960's) my father made an AI device to play tic-tac-toe. It consisted of a set of matchboxes, one for each possible arrangement of X's and O's. On the outside of each was a label marking the possible plays from that position, and inside were coloured chips for each possible play. As the controller of the AI you would pick a coloured chip at random and make that play. If that play was an immediate loser you would throw away that chip. Repeatedly playing against a human player allowed the AI to learn what bad moves to avoid, and eventually you would be left with only chips which weren't losers. (There's no strategy to win at tic-tac-toe except playing against naive opponents.)
You could no doubt program something like this in Java or, as Junilu said, in many other languages.