削除された内容 追加された内容
出典検証不十分性をまとめました
(同じ利用者による、間の1版が非表示)
12行目:
| typing = 強い[[静的型付け]]
| implementations = [[Javaプラットフォーム]]
|paradigm = [[オブジェクト指向プログラミング|オブジェクト指向]], [[ソフトウェアコンポーネント|コンポーネントベース]], [[リフレクティブ]], [[ジェネリックプログラミング|ジェネリック]], [[関数型プログラミング|関数型]], [[命令型並行計算|並行プログラミング]]
|influenced_by=[[C++]], [[Ada]]<ref>{{cite web|url={{Google books|0rUtBAAAQBAJ|page=PA133|keywords=|text=|plainurl=yes}}|title=Cracking The Java Programming Interview :: 2000+ Java Interview Que/Ans|first=Harry H.|last=Chaudhary|accessdate=2016-05-29|date=2014-07-28}}</ref>, [[Eiffel]]<ref>{{cite web|author1=Gosling, James|author2=McGilton, Henry|title=The Java Language Environment|date=May 1996|url=https://www.oracle.com/technetwork/java/langenv-140151.html|access-date=May 6, 2014|archive-url=https://web.archive.org/web/20140506214653/http://www.oracle.com/technetwork/java/langenv-140151.html|archive-date=May 6, 2014|url-status=live|df=mdy-all}}</ref>, [[Mesa]]<ref>{{cite web|author1=Gosling, James|author2=Joy, Bill|author3=Steele, Guy|author4=Bracha, Gilad|title=The Java Language Specification, 2nd Edition|url=https://java.sun.com/docs/books/jls/second_edition/html/intro.doc.html#237601|access-date=February 8, 2008|archive-url=https://web.archive.org/web/20110805051057/http://java.sun.com/docs/books/jls/second_edition/html/intro.doc.html#237601|archive-date=August 5, 2011 |url-status=live |df=mdy-all}}</ref>, [[Modula-3]]<ref>{{cite web|url=http://www.computerworld.com.au/index.php/id;1422447371;pp;3;fp;4194304;fpid;1|title=The A-Z of Programming Languages: Modula-3|publisher=Computerworld.com.au|accessdate=2010-06-09|url-status=dead|archiveurl=https://web.archive.org/web/20090105145818/http://www.computerworld.com.au/index.php/id%3B1422447371%3Bpp%3B3%3Bfp%3B4194304%3Bfpid%3B1|archivedate=January 5, 2009|df=mdy-all}}</ref>, [[Objective-C]]<ref>[[Patrick Naughton]] cites [[Objective-C]] as a strong influence on the design of the Java programming language, stating that notable direct derivatives include Java interfaces (derived from Objective-C's [[Objective-C#Protocols|protocol]]) and primitive wrapper classes. [http://cs.gmu.edu/~sean/stuff/java-objc.html] {{Webarchive|url=https://web.archive.org/web/20110713014816/http://cs.gmu.edu/~sean/stuff/java-objc.html|date=July 13, 2011}}</ref>
| influenced = [[C Sharp|C#]], [[D言語|D]], [[Dart]], [[Groovy]], [[Scala]], [[Kotlin]], [[Ceylon]]
22行目:
{{プログラミング言語}}
 
'''Java'''(ジャヴァ)は、汎用[[プログラミング言語]]と[[プラットフォーム (コンピューティング)|ソフトウェアプラットフォーム]]の双方を指している総称ブランドである<ref>{{Cite web|url=https://www.java.com/en/download/faq/whatis_java.xml|title=What is Java and why do I need it?|language=en|accessdate=2019-01|publisher=}}</ref>。[[オラクル (企業)|オラクル社 (Oracle Inc.) ]]およびその関連会社の登録商標である。1996年に[[サン・マイクロシステムズ]] (Sun)社によって市場リリースされ、2010年に同社がオラクル社に吸収合併された事によりJavaの版権もそちらに移行した。
 
プログラミング言語Javaは、[[C++]]に類似の構文、[[クラスベース]]の[[オブジェクト指向プログラミング|オブジェクト指向]]、[[マルチスレッド]]、[[ガーベジコレクション]]、[[ソフトウェアコンポーネント|コンポーネント指向ベース]]、[[分散コンピューティング]]といった特徴を持ち、平易性重視のプログラム書式による堅牢性と、[[仮想マシン]]上での実行によるセキュリティ性および[[プラットフォーム非依存|プラットフォーム非依存性]]が理念とされている。[[Javaプラットフォーム]]は、Javaプログラムの実行環境または、実行環境と開発環境の双方を統合したソフトウェアであり、[[サーバー (コンピューター)|ビジネスサーバ]]、[[モバイル機器]]、[[組み込みシステム]]、[[スマートカード]]といった様々なハードウェア環境に対応したソフトウェア形態で提供されている。その中枢技術である[[Java仮想マシン]]は各プラットフォーム環境間の違いを吸収しながら、Javaプログラムの適切な共通動作を実現する機能を備えている<ref name="design_goals">{{Cite web|url=https://www.oracle.com/technetwork/java/intro-141325.html|title=1.2 Design Goals of the Java™ Programming Language|publisher=Oracle|date=January 1, 1999|accessdate=2013-01-14|archiveurl=https://web.archive.org/web/20130123204103/http://www.oracle.com/technetwork/java/intro-141325.html|archivedate=January 23, 2013}}</ref>。このテクノロジは''「[[write once, run anywhere]]''」と標榜されていた<ref>{{Cite web|url=http://www.computerweekly.com/Articles/2002/05/02/186793/write-once-run-anywhere.htm|title=Write once, run anywhere?|date=May 2, 2002|publisher=[[Computer Weekly]]|accessdate=2009-07-27}}</ref>。
 
2019年の時点で[[GitHub]]によると<ref>{{Cite web|author=Chan|first=Rosalie|title=The 10 most popular programming languages, according to the 'Facebook for programmers'|url=https://www.businessinsider.de/the-10-most-popular-programming-languages-according-to-github-2018-10?op=1|website=[[Business Insider]]|accessdate=June 29, 2019|archiveurl=https://archive.today/20190629083530/https://www.businessinsider.com/the-10-most-popular-programming-languages-according-to-github-2018-10?op=1&r=DE&IR=T|archivedate=June 29, 2019|date=January 22, 2019}}</ref>、Javaは特に[[クライアントサーバモデル|クライアント/サーバモデル]]の[[ウェブアプリケーション|Webアプリケーション]]で使用されている最も人気の高いプログラミング言語の1つであり<ref>{{Cite web|author=Chan|first=Rosalie|title=The 10 most popular programming languages, according to the 'Facebook for programmers'|url=https://www.businessinsider.de/the-10-most-popular-programming-languages-according-to-github-2018-10?op=1|website=[[Business Insider]]|accessdate=June 29, 2019|archiveurl=https://archive.today/20190629083530/https://www.businessinsider.com/the-10-most-popular-programming-languages-according-to-github-2018-10?op=1&r=DE&IR=T|archivedate=June 29, 2019|date=January 22, 2019}}</ref>、全世界でおよそ900万人の開発者がいるとレポートされている<ref>{{Cite web|url=https://www.oracle.com/technetwork/articles/java/afterglow2013-2030343.html|title=JavaOne 2013 Review: Java Takes on the Internet of Things|website=www.oracle.com|accessdate=2016-06-19|archiveurl=https://www.imarslan.com/javaone-2013-review-java-takes-on-the-internet-of-things|archivedate=April 19, 2016}}</ref>。最新バージョンは、2020年9月にリリースされたJava 15と、2018年9月にリリースされたJava 11の長期サポート(LTS)版、2014年3月にリリースされたJava 8のLTS版である。オラクル社は未解決のセキュリティ問題によるリスクを回避するために、旧バージョンのアンインストールと新バージョンへの移行を強く推奨している<ref>{{Cite web|url=https://www.java.com/en/download/faq/remove_olderversions.xml|title=Why should I uninstall older versions of Java from my system?|publisher=Oracle|accessdate=2016-09-09}}</ref>。
 
== Javaの特徴 ==
Java開発元現在Sun Microsystemsを買収し、Java開発を引き継いだ正規ベンダーである[[オラクル (企業)|Oracleオラクル社]]による公式な主張宣言の通りである<ref name=":0">{{Cite web|title=Java Software {{!}} Oracle|url=https://www.oracle.com/java/|website=www.oracle.com|accessdate=2019-10-19}}</ref>。特に務用システムの開発構築に最適であるとしている。
{{Quotation|Java reduces costs, shortens developer timeframes, drives innovation, and improves application services as the programming language of choice for enterprise architecture, finance, and HR. Java is used in many industries including manufacturing, automotive, insurance, and public sector.<br/>
Javaは、コストを削減し、開発者の時間枠を短縮し、イノベーションを促進し、エンタープライズアーキテクチャ、財務、およびHRに最適なプログラミング言語としてアプリケーションサービスを改善します。 Javaは、製造・自動車・保険・公共部門などの多くの業界で使用されています。}}またオラクル社は、全世界では、3億のコンピュータデバイスでJava実行環境が動作しており1200全世界の200Java開発環境を使用しており全世界で250億の[[Java Card]](Javaアプリケーション動作する[[ICカード|スマートカード]])が購入発行されている発表している<ref name=":0" />。
 
Javaは、コストを削減し、開発者の時間枠を短縮し、イノベーションを促進し、エンタープライズアーキテクチャ、財務、およびHRに最適なプログラミング言語としてアプリケーションサービスを改善します。 Javaは、製造・自動車・保険・公共部門などの多くの業界で使用されています。}}また全世界では、3億のデバイスで動作し、1200万人が開発で使用し、250億の[[Java Card]](Javaアプリケーションが動作する[[ICカード|スマートカード]])が購入されていると発表している<ref name=":0" />。
 
=== Javaの構文 ===
{{main|Javaの文法}}Javaプログラムの構文は、[[C言語]]または[[C++]]によく似たものである。[[オブジェクト指向言語]]としての一面が強調されがちだが、幾つかの構文ルールの違いを除いては、C言語とほぼ同様にのようなシンプルな[[手続き型プログラミング|手続き型言語]]のスタイルでとしてもプログラミングできる。Javaはオブジェクト指向のプログミングスタをそれほど強制しない。
 
Javaは同時に[[マルチパラダイムプログラミング言語|マルチパラダイム言語]]でもある。JDK 1.1で[[JavaBeans]]/[[Java Remote Method Invocation|JavaRMI]]/[[CORBA]]機能による[[ソフトウェアコンポーネント|コンポーネントプログラミング]]と、[[メタクラス]]/[[リフレクション (情報工学)|リフレクション]]機能による[[メタプログラミング]]が備えられた。J2SE 5.0でジェネリクス機能による[[ジェネリックプログラミング]]への拡張が施された。Java SE 7で専用の[[Application Programming Interface|API]]による[[並行コンピューティング|並行プログラミング]]が追加された。Java SE 8ではラムダ式/関数型インターフェース/ストリームAPI/メソッド参照/Optional型の機能による[[関数型プログラミング]]への拡張も施されている。それらの結果、特に2014年(Java 8)以降の関数型スタイルとジェネリクスを多用しているJavaプログラムは、それ以前のJavaプログラムから大きく様変わりしている。
 
=== オブジェクト指向 ===
{{main|オブジェクト指向プログラミング}}Javaの主要基盤パラダイムは[[クラスベース]]の[[オブジェクト指向プログラミング言語|オブジェクト指向]]である<ref>広辞苑 第六版</ref>。クラス、インタールド(メス、イバ変数)スタンスメソッド(メンバ関数)いったプログラム概念ひとまとめ中心にしたものである。クラスの構成要素はフィールド、メソッド、静的フィールド、静的メソッド、定数、内部クラス(入、コンストラクタ、ファイナライザである。インターフェースは抽象メソッドと定数だけで構成さクラスである。クラスはインスタンスのひな型であり、インスタンスはクラスを実体化(量化)したものである。Javaプログラムは1個以上のクラス定義文から形成される。Javaのクラス機構は[[カプセル化]]、[[継承 (プログラミング)|継承]]、[[ポリモーフィズム|多態性]]をサポートしている。
 
Javaのカプセル化は、フィールドとメソッドの可視性を定める四つの修飾子 (''private'', ''package'', ''protected'', ''public'') でサポートされている。''private''は同クラス内限定、''package''は同クラス内と同パッケージ内限定、''protected''は同クラス内と同パッケージ内と派生クラス内限定、''public''は制限なしを意味する。パッケージはプログラム全体を任意に分割したソースファイルの1個以上のまとまりである。Javaのデフォルト可視性はファイル単位の''package''なので隠蔽性よりも利便性が重視されている。Javaの継承は、スーパークラスが一つに限られる単一継承をサポートしており多重継承は除外されている。既存クラスを元にして任意のフィールドとメソッドを追加した新しいクラスを作成できる。Javaの全クラスはObjectクラスをデフォルト継承する。全クラスの派生元になるObjectクラスが持つロック機能はオブジェクト指向とマルチスレッド同期を調和させている。Javaの多態性は、[[仮想関数]]と[[インタフェース (抽象型)|インターフェース]]と実行時[[ダウンキャスト]]と[[リフレクション (情報工学)|リフレクション]]でサポートされている。親クラスの''abstract''メソッドが仮想関数の抽象メソッドになり、子クラスの同名オーバーライドメソッドが仮想関数の実装メソッドになる。インターフェースは抽象メソッドだけで構成される純粋抽象クラスであり、''implements''構文によって任意の数だけクラスに実装できる。実行時ダウンキャストは''instanceof''演算子による実行時型チェックで事前確認でき、ダウンキャスト失敗時は例外発生によってフォローできる。[[リフレクション (情報工学)|リフレクション]]はクラスの構造定義内容を操作閲覧/変更できる[[メタクラス]]機能であり、[[ダイナミックバインディング|動的ディスパッチ]][[メッセージ転送|メソッドミッシング]]、[[モンキーパッチ]]などの実装に用できる。ただし安易な使用は推奨されていない。
 
=== プラットフォーム非依存 ===
58 ⟶ 59行目:
=== ガベージコレクション ===
{{see also|ガベージコレクション}}
Javaプログラムのメモリ管理は、[[Java仮想マシン]]に備えられた[[ガベージコレクション]]機能によって行われる。ガベージコレクションとは、すでにどこからも参照されていないオブジェクトを自動的に特定して破棄し、その占有メモリ領域を自動的に解放する機能である。人の手によるオブジェクトの生成と破棄を正確に対応させるメモリ管理作業は煩雑化するのが常であり、メモリリークやその反対の不正解放によるプログラムエラーを引き起こしやすくバグの温床の代表格と見なされていた。自動化されたガベージコレクションによってJavaプログラマは複雑なメモリ管理作業から解放される。一つのシステムスレッドに乗って未参照のオブジェクトを探し続ける実行プロセスはガベージコレクタと呼ばれる。ガベージコレクタはどこかの末端だけが途切れている参照の連鎖のかたまりも正確に特定して参照の孤島に例えられたメモリ領域を一気に解放する事もできる。Javaではガベージコレクションの機能に並々ならぬ力が入れられており、その技術更新は現在も進行中である。[[世代別ガベージコレクション|世代別ガベージコレクタ]]、応答時間短縮化ガーベジコレクタ、休止時間短縮化ガーベジコレクタなどが導入されて更に改訂を重ねており、運用環境別の選択使用も可能にされている。
 
=== 分散コンピューティング ===
420 ⟶ 421行目:
 
=== Javaオープンソースモデル ===
[[サン・マイクロシステムズ|サン・マイクロシステムズ社]]は1996年のリリース当初からJava実行環境とJava開発環境をオープンソース化しており、サードパーティにJavaテクノロジ開発への参入をアピールしていた。ただしJava普及に一定のコントロールをかける為にソースコードの改変までは認めていなかった。2004年になると[[IBM|IBM社]]が業界の優位性を活かしてJavaオープンソースプロジェクトの主導権を握るようになった。[[Java Community Process|Javaコミュニティプロセス]]を取り巻く業界の変化を悟ったサン社はIBM社との本格的な提携を承認し、2007年にJava SE 6を「[[OpenJDK]]」として[[GNU General Public License|GNU一般公開ライセンス]]の下でリリースした<ref>{{Cite web|title=Sun Fulfills Promise of Open and Free Java Technology and Releases Java SE Platform to OpenJDK Community|url=http://www.sun.com/aboutsun/pr/2007-05/sunflash.20070508.3.xml|author=Sun Microsystems, Inc|date=2007-5-8|accessdate=2009年9月16日}}</ref>。OpenJDKではソースコードの改変も認められた。[[GNUプロジェクト]]は「[[GNU Interpreter for Java]]」、[[GNUコンパイラコレクション]]の「[[GNU Compiler for Java]]」、互換クラスライブラリの「[[GNU Classpath]]」を公開した。Windows用GNU Compilerは、[[MinGW]]と併せて[[Cygwin]]の環境上でも実行できた。
 
WindowsやLinuxなどのメジャーOSでは、オラクル社、IBM社、Blackdown社、GNUプロジェクト、Kaffe.orgなどによるJavaプラットフォームが公開されている。また、JavaソースコードをそのままWin用実行ファイルに変換する「Excelsior JET」や<ref>http://www.excelsior-usa.com/jet.html</ref>、JarファイルをWin用実行ファイルに変換する「[http://exewrap.osdn.jp/ exewrap]」「[http://launch4j.sourceforge.net/ Launch4j]」「[http://nsis.sourceforge.net/Java_Launcher_with_automatic_JRE_installation NSIS]」「[http://jsmooth.sourceforge.net/ JSmooth]」なども販売ないし公開されている。<!-- ただし、これらのツールには最新の[[JDK]]でコンパイルされた[[jar]]ファイルには対応していないなどの欠点もある上、{{いつ範囲|date=2019年2月|近年}}の [[Microsoft Windows|Windows]] にはほとんどにJavaがインストールされているため、あまり普及していない。 -->
513 ⟶ 514行目:
[[カテゴリ:Java|*]]
[[カテゴリ:Javaプラットフォーム|*Java]]
[[カテゴリ:オブジェクト指向言語]]
[[カテゴリ:サン・マイクロシステムズ]]
[[カテゴリ:オラクル]]
[[カテゴリ:プログラミングオブジェクト指向言語]]
[[Category:基本情報技術者試験]]
[[Category:Java仮想マシンで動作するプログラミング言語]]
[[カテゴリ:オブジェクト指向プログラミング言語]]