JavaとPHPの文法比較
こんにちは、スパイシーチキン弁当に慣れてきつつある浦本です。
今回はJavaとPHPの文法を比較し、何が同じで何が違うかを説明します。
Java開発者にとってはPHP入門になりますし、
PHP開発者にとってはJava入門になります。
(追記:というよりはPHPプログラミングで気をつけたい点として読んでいただければ、幸いです。)
■まずは共通点から
クラスの継承
PHPとJavaのどちらも、同時に1つの親クラスを継承できます。
extendsの書き方も同じです。
class Hoge extends SuperHoge { ... }
抽象クラス、抽象メソッド
抽象クラス、抽象メソッドの意味は同じです。
PHPもJavaも同様に、abstractキーワードを付けます。
インターフェイスの実装
PHPとJavaのどちらも、同時に複数のインターフェイスを実装できます。
implementsの書き方も同じです。
class Hoge implements IFoo, IBar { ... }
extendsと組み合わせる場合も、書き方は同じです。
class Hoge extends SuperHoge implements IFoo, IBar { ... }
インターフェイスの用語自体も、同じ意味です。
インターフェイスには、abstract publicメソッドと、定数のみ定義できます。
■異なる点
例外処理
PHPとJavaのどちらも、try-catch文の書き方と処理の流れは同じですが、以下の2点が違います。
・PHPにはチェック例外がなく、throwsを書けない
・PHPにはfinallyがない
PHPの例外処理で最も残念なのは、チェック例外という仕組みがなく、throwsを書けないことです。
(もちろんthrowは書けます。throwsが書けないのです。)
Javaでは、RuntimeException以外のExceptionのことを、チェック例外(checked exception)と呼びます。
あるメソッド内でチェック例外をthrowする場合、
「メソッド内でcatchするか、throwsでメソッドの外に投げるか」しないとコンパイルが通りません。
その仕組みによって、catchの書き忘れを防ぐことができ、throwsによってそのメソッドがどんな例外を投げるのか明示 できるのです。これは強力な機能と言えます。
チェック例外のサンプル1 (コンパイルが通らない)
// Java
public class Hoge {
public void hogeMethod1() {
// コンパイルエラー。
// メソッド内でcatchするか、throwsでメソッドの外に投げないと絶対ダメ。