2012-01-01 8 views
-1

JavaのすべてのクラスはObjectのサブクラスであり、javaの変数はオブジェクト自体ではなくオブジェクト参照であるため、Object型を暗黙的に指定できる場合、javaは型指定を強制的に行うのはなぜですか?必要なのは、単純なデータ型を使用するときだけです。javaにタイプ識別子が必要なのはなぜですか?

+1

私はあなたが何を意味するか分かりません。 「型指定」が不要であると思われるコードのスニペットを投稿できますか? – Mat

+0

明確にするには:変数をデフォルトの 'Object'にして、型推論ではないようにしますか?なぜこれが望ましいのでしょうか?あなたは 'オブジェクト'で多くの有用なことをすることはできません。または、javaが静的に型付けされていない理由を知りたいですか? – CodesInChaos

+0

あなたは何を意味するか説明するためにいくつかの(偽の)コードを教えてください。オブジェクトの型がわからない場合は、オブジェクトのメソッドをどのように使用できますか? –

答えて

4

変数がObjectの場合、コンパイラはその変数を他の型として使用することはできません(キャストしない限り)。
これは型安全と呼ばれます。例えば

Object str = "abc"; 

s.toUpppercase(); //Compiler error 
-1

Javaは強く型付けされた言語です。型は、コンパイル時にコードをコンパイルし、型の互換性を検証できるようにするために必要です。

弱い型指定言語には型がありません。たとえば、JavaScriptでvar xと言うときは、単に変数を定義します。次に、任意の型の値をそこに割り当てることができます。つまり、コードにバグがあり、この変数にstringを割り当ててからこの変数を2で割った場合(y = x/2)、実行時にスクリプトが失敗するだけです。 Javaでは、このようなコードをコンパイルすることはできません。

開発中のバグはx、QAではx * 10、生産にはx * 100という原則があります。コンパイラと強く型付けされた言語は、QAに到着する(愚かな)バグの数を減らすことができるため、ソフトウェア開発をより簡単に、迅速に、安価にすることができます。

+1

私は '静的'と '動的な'入力を使います。 '強い'と '弱い'は明確に定義されておらず、いくつかの動的な型付けされた言語はしばしば強く型付けされたものと呼ばれます。さらに、動的に型指定された言語でも型があります。例えば、javascriptの* values *は文字列、オブジェクト、数値などです。 – CodesInChaos

+0

Pythonがそのような変数をどのように実装しているのですか(強く型付けされているとは言えますが)。 – Likhit

+1

Pythonは動的に型指定され、javaは静的に型付けされます。コンパイル時の型チェックを静的な型定義の方が好む人もいれば、動的な型定義の柔軟性を好む人もいます。 – CodesInChaos

0

おそらくJavaは、大規模なプロジェクトで使用され、合理的な会社によって作成されたオブジェクト指向言語です。このような強力なタイピングによって潜在的なバグの量が減少し、コンパイルレベルで削除できるようになります。

btw。 .NET製品では、var xのようなものがあります。しかし、メソッド本体ではローカルでしか使用できません。しかし、これは開発者のためのコンパイラの砂糖です。したがって、Javaは強力な型付き言語の一例に過ぎません。

1

Javaはこれを実行します。これは言語がどのように定義されたかである。 これは、言語が設計されたとき(約20年前)、またコンパイラの開発が容易であることから、優れた実務とみなされていました。

Scalaは、ほとんどの場合、明示的な型識別子を必要としない、Javaと密接に関連する言語です(同じJVM上で動作します)。 欠点は、スカラーコンパイラが(この理由のために)非常に遅いことです。

関連する問題