javaを独学で頑張って勉強してみましたがやはり分からないところが多く出てきましたので
いくつか質問させてください
独学なのでとんでもない質問でもご容赦ください

1)JPanelの分野です
JButton b1 = new JButton("N");
JButton b2 = new JButton("W");
JButton b3 = new JButton("S");
と
btn = new JButton[3];
btn[0] = new JButton("N");
btn[1] = new JButton("W");
btn[2] = new JButton("S");
はどういう違いがあり、どちらがどんな時好ましいでしょうか?

2)JPanelの分野です
getContentPane().setLayout(new GridLayout(2,2));
という文を見つけましたが、
Container contentPane = getContentPane();
contentPane.setLayout(new GridLayout(2,2));
というようにContainerの型宣言はなぜしなくてもいいのでしょうか?

3)MS明朝のようなfontがインストールされていないOS(PC1)に
自作fontをインストールしているOS(PC2)で作成したアプリを
PC1上で起動させても自作fontで表示する方法はあるのでしょうか?

よろしくお願いします