Collections Data Structure Java

import java.io.IOException;
public class StringReverserThroughStack {
  private String input; 
  private String output;
  public StringReverserThroughStack(String in) {
    input = in;
  }
  public String doRev() {
    int stackSize = input.length(); 
    Stack theStack = new Stack(stackSize); 
    for (int i = 0; i < input.length(); i++) {
      char ch = input.charAt(i); 
      theStack.push(ch); 
    }
    output = "";
    while (!theStack.isEmpty()) {
      char ch = theStack.pop(); 
      output = output + ch; 
    }
    return output;
  }
  public static void main(String[] args) throws IOException {
    String input = "Java Source and Support";
    String output;
    StringReverserThroughStack theReverser = new StringReverserThroughStack(input);
    output = theReverser.doRev();
    System.out.println("Reversed: " + output);
  }
  class Stack {
    private int maxSize;
  
    private char[] stackArray;
  
    private int top;
  
    public Stack(int max) {
      maxSize = max;
      stackArray = new char[maxSize];
      top = -1;
    }
  
    public void push(char j) {
      stackArray[++top] = j;
    }
  
    public char pop() {
      return stackArray[top--];
    }
  
    public char peek() {
      return stackArray[top];
    }
  
    public boolean isEmpty() {
      return (top == -1);
    }
  
  }
}