Non-recursive approach to the Rod-Cutting
The algorithm itself seems to have no problems. It's Dynamic programming and I wouldn't call the int[] maxPrices cache. Cache is something used for speed only, you can clear it anytime and everything must still work.

For example, a straightforward recursive solution to this problem would be damn slow because of recomputing values again and again. It could be made much faster using a cache.

 public static int[] prices = new int[]{1,5,8,9,10,17,17,20};


This way you lose any chance to make it more flexible. You class has two functions: It's both the computing core and the main class. That's fine for a small class, but even then you should separate the tasks. 

For the main class, something like

private static final int[] PRICES = new int[] {1, 5, 8, 9, 10, 17, 17, 20};


Here, static final is the way how constants get declared in Java. PRICES is uppercase as a constant should be. And there's a space after each comma.

For the core, pass it explicitly to the bestPrice method. In more complicated cases, you could use an instance field for this.



max_price should be maxPrice in Java. No underscores except in constants.