約 2,879,732 件
https://w.atwiki.jp/ce00582/pages/1285.html
import javax.media.j3d.*; import com.sun.j3d.utils.universe.*; import com.sun.j3d.utils.geometry.*; import javax.vecmath.*; import java.awt.*; import javax.swing.*; public class ex66 { public static void main(String[] args) { ex66 test = new ex66(); } public ex66() { JFrame frame = new JFrame(); frame.setSize(500,500); frame.setTitle("ex66"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel cp = new JPanel(); cp.setLayout(null); frame.add(cp); GraphicsConfiguration g_config = SimpleUniverse.getPreferredConfiguration(); Canvas3D canvas = new Canvas3D(g_config); canvas.setBounds(0,0,300,300); cp.add(canvas); SimpleUniverse universe = new SimpleUniverse(canvas); frame.setVisible(true); Appearance appearance = new Appearance(); Material material = new Material(); material.setDiffuseColor(0.2f,0.6f,1.0f); appearance.setMaterial(material); BranchGroup group1 = new BranchGroup(); Sphere sphere = new Sphere(0.3f,appearance); group1.addChild(sphere); universe.addBranchGraph(group1); ViewingPlatform camera = universe.getViewingPlatform(); camera.setNominalViewingTransform(); Color3f light_color = new Color3f(1.7f,1.7f,1.7f); Vector3f light_direction = new Vector3f(0.2f,-0.2f,-0.6f); DirectionalLight light = new DirectionalLight(light_color,light_direction); BoundingSphere bounds = new BoundingSphere(); light.setInfluencingBounds(bounds); BranchGroup group2 = new BranchGroup(); group2.addChild(light); universe.addBranchGraph(group2); } }
https://w.atwiki.jp/ce00582/pages/1296.html
import javax.media.j3d.*; import com.sun.j3d.utils.universe.*; import com.sun.j3d.utils.geometry.*; import javax.vecmath.*; import java.awt.*; import javax.swing.*; public class ex41 { public static void main(String[] args) { ex41 test = new ex41(); } public ex41() { JFrame frame = new JFrame(); frame.setSize(250,250); frame.setTitle("Light_test"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel cp = new JPanel(); cp.setLayout(null); frame.add(cp); GraphicsConfiguration g_config = SimpleUniverse.getPreferredConfiguration(); Canvas3D canvas = new Canvas3D(g_config); canvas.setBounds(0,0,250,250); cp.add(canvas); SimpleUniverse universe = new SimpleUniverse(canvas); frame.setVisible(true); BranchGroup group1 = new BranchGroup(); Sphere sphere = new Sphere(0.5f); group1.addChild(sphere); universe.addBranchGraph(group1); ViewingPlatform camera = universe.getViewingPlatform(); camera.setNominalViewingTransform(); Color3f light_color = new Color3f(1.7f,1.7f,1.7f); Vector3f light_direction = new Vector3f(0.2f,-0.2f,-0.6f); DirectionalLight light = new DirectionalLight(light_color,light_direction); BoundingSphere bounds = new BoundingSphere(); light.setInfluencingBounds(bounds); BranchGroup group2 = new BranchGroup(); group2.addChild(light); universe.addBranchGraph(group2); } }
https://w.atwiki.jp/codeportal/pages/13.html
Graphics Java2D Swing(GUI LookAndFeel) OpenGL(JOGL) Applet HTMLページ内でSwingを動かす Wicket JSPやServletを書かずにHTML+AJAXのWebサーバーを作る JBoss 分散アプリケーションサーバー XML DOM SAX Stax JAXB SOAP WSDL Hibernate JPA(O/Rマッピング) Framework Reflection Annotation Plugin JMX JNDI RMI Manifest end
https://w.atwiki.jp/sfrontier/pages/65.html
Java 作成日 2007/11/02 H.Naito 更新日 2007/11/02 H.Naito 書式 オプションclasspath( cp ) d source 書式 書式 javac [オプション] [ソースファイル名1] [ソースファイル名2] ・・・ [@argfiles] @argfiles とは、オプションとソースファイルを列挙したファイルのことです。 javac コマンドにどんなオプションがあるかは、コマンドラインで「javac」と入力すれば確認できます。 コンパイルの順番 Java のコンパイラは、指定したファイルの中で参照している内容を確認しながら、コンパイルを実行します。 したがって、以下のような例は、コンパイルエラーになります。 Sample1.java class MyClassA { public statice void main( String[] args ) { MyClassB b = new MyClassB(); b.show(); } } Sample2.java class MyClassB { void show() { System.out.println( "MyClassB" ); } } Sample1.java、Sample2.java のコンパイル 成功 javac Sample2.java javac Sample1.java 失敗 javac Sample1.java ← MyClassB というシンボルを解決できない javac Sample2.java ファイル指定の例 ファイル名を個別に指定する場合 javac Sample1.java Sample2.java ワイルドカードを指定する場合1 javac Sample*.java ワイルドカードを指定する場合2 javac *.java いずれの場合も、先にコンパイルするべきファイルをコンパイラが自動的に判断してくれる オプション classpath( cp ) 効果 例 d 効果 例 source 効果 ソースファイルを特定のバージョンのコンパイラでコンパイルすることができます。 例 javac -source 1.4 hogehoge.java
https://w.atwiki.jp/0x0b/pages/85.html
構成 Javaプラットフォームの構成を説明する。 #Java実行環境 (JRE)は、Javaプラットフォームに配置されたJavaアプリケーションを実行するために必要な、ソフトウェアである。標準クラスライブラリやJava仮想マシンなどから構成される。 #Java開発キット (JDK)は、Javaプログラムの開発を支援する基本的なソフトウェアである。 #JREとJDKの複数の実装で 、JREとJDKの開発と提供の状況について簡単に述べる。 #Javaのエディションで 、サン・マイクロシステムズとJCPが規定している3つのJavaのエディションについて簡単に述べる。 #拡張機能と関連技術で 、Javaの主な拡張機能と関連する技術を述べる。 Java実行環境 Java実行環境(JRE; Java Runtime Environment)は、Javaプラットフォームに配置されたJavaアプリケーションを実行するために必要な、ソフトウェアである。標準クラスライブラリやJava仮想マシンなどから構成される。 エンドユーザは普通、Javaソフトウェアパッケージやウェブブラウザプラグインの利用を通じて JRE を使う。サン・マイクロシステムズ/JCP をはじめ複数の団体や企業により、 さまざまなプラットフォーム向けに、多くの JRE の実装が開発・提供されている。 JRE の他、サン/JCPなどの団体・企業は、Java開発キット(JDK)と呼ばれる JRE のスーパーセットの実装を開発・提供している。JDK は、Javaプログラムの開発を支援する基本的なソフトウェアであり、多くの開発ツールが含まれている。 実行環境の構成 Java実行環境は、標準クラスライブラリとJava仮想マシン、およびいくつかのファイルとソフトウェアから構成される。 Javaクラスライブラリ群(標準クラスライブラリ) 実行環境に含まれるJavaクラスライブラリ群の実体は、JRE(Java実行環境)を実装した人々がJava標準クラスライブラリのソースコードからコンパイルしたバイトコードである。このライブラリ群はJavaアプリケーションを実行するために必要であり、またJavaアプリケーション開発者も標準クラスライブラリを使って開発する。この標準クラスライブラリには、以下のライブラリが含まれる。 コアライブラリ コレクションのライブラリ リストや連想配列(ハッシュテーブル)、木構造(ツリー)、集合(セット)などのデータ構造およびアルゴリズムを実装している。 リフレクション Javaでは実行時にもクラスやメソッドの情報をもっており、クラス名やメソッド名を動的に指定して呼び出すことができる。 XML文書を扱うライブラリ セキュリティ機能 国際化と地域化のライブラリ シリアライズ(serialization、オブジェクト直列化) オブジェクトの参照をたどって関連するオブジェクトをまとめてバイトストリームにすることができる。そのストリームをファイルに書き込めば、オブジェクトの状態をそのまま保存(永続化)できる。 統合ライブラリ(外部システムとの連携機能) JDBC データベース接続のAPI JNDI(Java Naming and Directory Interface) ネーミングサービス・ディレクトリサービスへのアクセス Java RMI(Remote Method Invocation、遠隔メソッド呼び出し)と CORBA 分散オブジェクト環境(分散処理環境) 分散システムなどで、別のJava仮想マシンにあるオブジェクトがお互いのメソッドを呼ぶことができる。ソケット等を直接利用する通信の低水準な実装をせずに、簡単に高水準な実装をすることができる。 グラフィカルユーザインタフェース(GUI)のライブラリ AWT(Abstract Window Toolkit、抽象ウィンドウツールキット) 重量コンポーネント(ネイティブコンポーネント)のライブラリ。重量コンポーネントを配置しイベント制御を行うことができる。 Swing 軽量コンポーネントのライブラリ。AWT を使って開発されたが、ネイティブではないウィジェット(GUIの部品要素)の実装を提供する。 Java 2D 2次元グラフィクスや画像(JPEGなど)を扱うライブラリ。 Java Sound など音声を扱うAPI群(録音、再生、その他の処理) Javaアプレット jar(Java Archive) Javaプログラムの標準圧縮ファイルの圧縮・展開機能。拡張子の関連付けをすれば、jarファイルをダブルクリックすることで実行できる。実際はZIPで圧縮している。 JNI(Java Native Interface) JavaからCなど他の言語で実装されたネイティブなプログラムやライブラリを呼び出すことができる。 Java仮想マシン(Java VM) 仮想マシンの一種であり、プラットフォームに依存して実装された、JavaライブラリとJavaアプリケーションのバイトコードを実行するソフトウェア プラグイン ウェブブラウザでJavaアプレットを実行するために必要なソフトウェア Java Web Start Javaアプリケーションをウェブを介して効率的にエンドユーザに配布する機構 ライセンス文書および各種の文書 Java開発キット ava開発キット(JDK; Java Development Kit)は、サン/JCP をはじめ複数の団体や企業により開発・提供されている、Javaプログラムの開発を支援する基本的なソフトウェアである。Javaが世に出て以来、広く使われてきたJavaの開発ツールである。Javaコンパイラ、javadoc、デバッガなどを含む多くの開発ツールが含まれている。また、完全なJava実行環境(JRE)を同梱している。 Javaプログラムを実行するだけであれば、Java実行環境が導入されていれば充分で、Java開発キットを導入する必要は無い。 Java開発キット(JDK)の呼称は、これまでに何度か変更されている。 J2SE 1.2.2_004 までは JDK と呼んでいた。 J2SE 1.4 までは Java 2 SDK と呼んでいた。 J2SE 5.0 では 再び JDK と呼んでいる。 JREとJDKの複数の実装 広く使われているプラットフォームなどに対しては、複数の団体や企業が独自に JRE や JDK の実装を開発・提供している。独自の最適化技術を適用したり、特定の用途に特化した最適化、あるいは異なるライセンスを採用するなど、それぞれ特徴がある。 Linux/IA-32プラットフォーム サン、Blackdown、IBM、Kaffe.org、GNU、BEAシステムズ などが JRE や JDK を実装・提供している。 Windows/IA-32プラットフォーム サン、IBM、BEA などが JRE や JDK を実装・提供している。 オープンソース/フリーソフトウェアの実装 サンおよびいくつかの団体が、オープンソースもしくはフリーソフトウェアのライセンスで利用できる、Java仮想マシンおよび JRE 、JDK の実装を開発している。 サン/JCPはJava発表時からJava仮想マシンおよび標準ライブラリの仕様を公開しており、Java標準クラスライブラリのソースコードも JDK の一部として提供していた。しかしソースコードの改変は下記のOpenJDKリリースまでライセンスで認めていなかった。そのため、サンの実装とは別に、オープンソースもしくはフリーソフトウェアでかつサンの実装と互換性のあるJava標準クラスライブラリとJava仮想マシンが開発されている。また、2006年にサンはライセンスの方針を変更し近い将来オープンソースにする意向を表明し、2007年5月8日にJava SE 6をOpenJDKとしてGNU General Public Licenseにてリリースした GNU Classpath は、2007年3月現在、J2SE 1.4 のライブラリの 99% 以上を実装しJ2SE 5.0 では 95% 以上を実装している また Apache Harmony には IBM が協力している。 GNU Compiler for Java (GCJ) GNUがGNUコンパイラコレクション (GCC) のJava版、GNU Compiler for Javaを出している。ahead-of-time コンパイラを搭載しており、Javaのソースコードやバイトコードをネイティブマシンコード(Windowsの場合はexeファイル)に変換できる。クラスライブラリはGNU Classpathを使っており、1.4のほとんどの部分が対応しており、5.0の部分も実装が進んでいる。 Windows環境では、GCJはMinGW (Minimalist GNU for Windows) もしくはCygwinを使って実行できる。Cygwinの場合は、対象がライセンスがGPLのソフトウェアに限られるが、MinGWの場合は商用含め、すべてのソフトウェアで利用できる。 Excelsior JET 米Excelsior社が Excelsior JET というahead-of-timeコンパイラを販売している[8]。Java SE 用に書かれたプログラムをWindowsのネイティブマシンコードであるexeファイル(実行ファイル)に変換できる。起動の高速化やアプリケーションの難読化を実現する。 Windows exeパッケージ化 Windowsにて、配布、実行しやすくするために、Javaのjarファイルをexeファイル(実行ファイル)でラッピングするツールがある。以下が、その一例である。 exewrap JSmooth Launch4j NSIS - Java Launcher with automatic JRE installation Java Web Start には、適切なバージョンの JRE をインストールする機能があるが、そもそも、JREがインストールされていない場合は、それが不可能である。JSmooth などでは、ラッピングされた exe が、必要な JRE がインストールされていないことを検出した時は、JRE をダウンロードして、インストールする機能を持つ。また、上記3つすべてにおいて、JREを同梱して、同梱したJREを使ってアプリケーションを実行する機能を持つ。 また、通常の Java アプリケーションでは、Windows のタスクマネージャには、java.exe や javaw.exe と表示され、Java のアイコンが表示されるが、自前の exe ファイル名と自前のアイコンを表示する機能を持つ。 さらに、上記のいくつかは、アプリケーションの2重起動を防止したり、アプリケーションを Windows サービス(NTサービス)化する機能を持つ。 Sun が特定のOSに特化した機能を提供することを嫌がっているため、これらの機能が不足しており、それを補うために、exeパッケージ化が存在する。 Javaのエディション サン・マイクロシステムズとJCPは、さまざまな環境に対応するため、3つのJavaプラットフォームのエディションを規定している。Java の API の多くは分類され各エディションに割り当てられている。 エディションごとに実行環境と開発環境がある。Java実行環境(JRE)は、Java仮想マシンと標準ライブラリの実装から構成される。JDK 1.1 のバージョンまでは、Java SE に相当するエディションのみが提供されていた。3つのエディションが規定されたのは、JDK 1.1 の次のバージョンからである。サン/JCPが規定しているエディションを次に示す。 Java SE Java SE(Java Platform, Standard Edition)は、ワークステーション、パーソナルコンピュータやサーバなどの機器で、汎用的な用途に使われる。 Java EE Java EE(Java Platform, Enterprise Edition)は、Java SE に加え、多層クライアントサーバの大規模システムを開発するための、さまざまな API が追加されている。 Java ME Java ME(Java Platform, Micro Edition)は、コンピュータ資源が限られている、組み込みシステムなどを用途として想定したエディションである。機器の種類に応じた、ライブラリのいくつかの異なるセット(プロファイル)を規定している。Java SE のいくつかのAPIは実装していないが、このエディションで対象とする用途には十分な機能をもっている。完全な Java SE のライブラリを使うには、このエディションで対象とする用途では記憶装置の容量が足りない。 Java API に含まれるクラスは、パッケージと呼ばれるグループに分類される。各パッケージは、相互に関連するインタフェース、クラス、例外を含む。Javaの各エディションでどのような機能が使えるかについては、それぞれのエディションの項目(Java SE、Java EE、Java ME)を参照のこと。 JavaのAPIセットは、サン・マイクロシステムズと他の個人や企業・団体が共同で、JCP(Java Community Process)プログラムに沿って管理している。このプロセスに参加する人々が、Java API の設計と開発に関わっている。このプロセスのあり方については、議論の対象となっている。 2004年より、IBM と BEAシステムズ は、Java の公式のオープンソース実装を作る動きを、公的に支援している。2006年まで、サンはこうした動きに対しては拒否する立場をとってきたが、方針を変えて自社とJCPによるJavaの実装をオープンソースにする意向を表明し実行に移し始めている。 拡張機能と関連技術 Javaの標準機能に対する拡張機能は、多くの場合、javax.* パッケージに属する。こうした拡張機能は、Java SE の Java開発キット(JDK)や Java実行環境(JRE)には含まれない。Javaの拡張機能や関連技術は、プログラミング言語Javaと密接に連携する。主なJavaの拡張機能と関連技術を示す(いくつかの拡張機能は近年の Java SE 標準ライブラリに統合された)。 Java EE(従来のJ2EE)(Java Platform, Enterprise Edition) - 大規模で分散化された企業システムもしくはインターネットサーバ向けのJavaのエディション Java ME(従来のJ2ME)(Java Platform, Micro Edition) - 携帯機器など資源が限られている環境向けのJavaのエディション JMF(Java Media Framework) - 音声・動画などのマルチメディア向けのAPI JNDI(Java Naming and Directory Interface) - ネーミングサービス・ディレクトリサービスへのアクセス JSML(Java Speech Markup Language) - 音声合成システムにテキストの注釈を追加する JDBC - データベース接続のAPI JDO(Java Data Objects) - Javaオブジェクトの永続化のインタフェース JAI(Java Advanced Imaging) - 画像を扱うための高水準なオブジェクト指向API JAIN(Java API for Integrated Networks) - 統合された通信ネットワークのAPI JDMK(Java Dynamic Management Kit) - JMX仕様に基づいたアプリケーション開発を支援するソフトウェア Jini - 分散システムを構築するネットワークアーキテクチャ Jiro - 分散した記憶装置を管理する技術 Java Card - スマートカードなどの機器で安全にJavaアプリケーションの実行を実現する技術 JavaSpaces - 分散環境でJavaオブジェクトの送受信・永続化などを支援する技術 JML(Java Modeling Language) - 契約による設計(Design by contract)に基づいた開発を支援する技術 JMI(Java Metadata Interface) - Javaのメタデータの作成・アクセス・検索・送受信に関する仕様 JMX(Java Management Extensions) - 分散環境における機器・アプリケーション・ネットワークサービスの管理/監視を行う技術 JSP(JavaServer Pages) - Java EE によるウェブアプリケーションで XHTML などのファイルにJavaのコードを埋め込み、動的に文書を生成する技術 JSF(JavaServer Faces) - Java EE によるウェブアプリケーションでユーザインタフェースの簡易な開発を支援する技術 JNI(Java Native Interface) - Javaから他の言語で実装されたネイティブなプログラムやライブラリを呼び出すための仕様 JXTA - Peer to Peer(P2P) の仮想ネットワークのためのオープンプロトコル Java 3D - 3次元グラフィクスプログラミングのための高水準なAPI Java 3D JOGL(Java OpenGL) - OpenGL を使う3Dグラフィクスプログラミングのための低水準なAPI LWJGL(Light Weight Java Game Library) - ゲームを開発するための低水準なAPIで、OpenGL、OpenAL および多様な入力機器の制御機能も提供する OSGi - サービスの動的な管理と遠隔保守 JavaDesktop Java技術の標準化 現在、Javaプラットフォームの将来のバージョンや機能は、JCP(Java Community Process)の標準化プロセスのもとで開発されている。JCP のメンバになることで、Java技術の将来のバージョンや機能の定義に関与することができる。JCP には、IBM、ボーランド、BEAシステムズ、富士通、Apacheソフトウェア財団、ヒューレット・パッカード など、さまざまな個人、団体、企業がメンバとして参加している。 JCP は、Javaプラットフォームに追加する仕様や技術を、JSRs(Java Specification Requests)という文書群に記述する。 プログラミング言語JavaとJavaコアAPIに関わるいくつかの JSRs を示す。 JSR 14 Add Generic Types To The Java Programming Language(J2SE 5.0) JSR 41 A Simple Assertion Facility(J2SE 1.4) JSR 47 Logging API Specification(J2SE 1.4) JSR 51 New I/O APIs for the Java Platform(J2SE 1.4) JSR 59 J2SE Merlin Release Contents(J2SE 1.4) JSR 121 Application Isolation API JSR 133 Java Memory Model and Thread Specification Revision(J2SE 5.0) JSR 166 Concurrency Utilities(J2SE 5.0) JSR 175 A Metadata Facility for the Java Programming Language(J2SE 5.0) JSR 176 J2SE 5.0(Tiger)Release Contents(J2SE 5.0) JSR 201 Extending the Java Programming Language with Enumerations, Autoboxing, Enhanced for loops and Static Import(J2SE 5.0) JSR 203 More New I/O APIs for the Java Platform("NIO.2")(Java SE 7) JSR 204 Unicode Supplementary Character Support(J2SE 5.0) - Unicode 3.1 のサポート JSR 244 Java EE 5 Specification(Java EE 5) JSR 270 Java SE 6("Mustang")Release Contents(Java SE 6) JSR 275 Physical Units/Quantities Support(Java SE) - JScience をもとにしたリファレンス実装 JSR 901 Java Language Specification(J2SE 5.0) 批判 Javaに対しては、優れた技術だと評価する人々がいる一方で、批判も少なくない。Javaは、ソフトウェアに関する複雑さを管理する問題に対して、革新的な方法を提供するという目標のもとで、開発された。多くの人々は、Java技術は、この期待に対して満足できる答えを提供したと評価している。しかしJavaにも欠点が無いわけではない。Javaは、どのようなプログラミング作法にも適応しているわけではない。また、どのような環境や要件にも普遍的に適応しているわけではない。 Javaに対する批判を大まかに記述する。 実行性能 avaの初期のバージョンでは、CやC++などのネイティブにコンパイルする言語と比べて、とても実行が遅くメモリの消費が激しいとして、批判されることが多かったが、近年のバージョンでは改善されてきている。近年のJava仮想マシンで採用しているジャストインタイムコンパイラや動的再コンパイルの実行性能は、従来の言語のネイティブコンパイラとほぼ同じ水準の実行性能かそれ以上を達成することがある。これは頻繁にメモリアクセスを行うプログラムにおいてJavaのガベージコレクションの技術が、Cのmallocやfreeよりも高い性能を発揮できることによる。こうした事情から、Javaの実行性能については、議論の対象となっている。 ルックアンドフィール ルックアンドフィールに関して、JavaのSwingのツールキットを使ったグラフィカルユーザインタフェース(GUI)を備えたアプリケーションの既定のルックアンドフィールが、従来のネイティブなアプリケーションとは大きく異なるため、エンドユーザの人々にとってJavaのGUIアプリケーションはなじみにくいと批判されることがある。Javaではプラグイン可能なルックアンドフィールの機構を備えており、サンはWindows、Mac OS XおよびMotifの各ルックアンドフィールのクローンを提供している。そのため、Swingの既定のルックアンドフィールではなく、プラットフォームネイティブと同様のルックアンドフィールでJavaのアプリケーションを動かすよう指定することができる。しかしエンドユーザにとってこの指定方法は簡単ではないと指摘されることがある。 言語仕様の設計 言語仕様の設計に対する批判をいくつかの側面から述べる。 Javaの設計者は、他のプログラミング言語では備えているいくつかの機能をJavaから排除した。こうした設計上の判断については賛否が分かれている。 多重継承 演算子のオーバーロード プロパティ - Delphi と C# において実装されている機能 Javaは、純粋なオブジェクト指向プログラミング言語ではないとして、批判されることがある。Javaの変数値には、スタック領域に割り当てられる基本型(primitive type)と、ヒープ領域に割り当てられる参照型(reference type; オブジェクトの型)がある。Javaの設計者は、実行性能上の理由から、意図的に基本型をJavaに導入した。ただし、J2SE 5.0 以降ではオートボクシングが導入され、プログラマは基本型の変数を参照型の変数(プリミティブラッパークラスのオブジェクト)であるかのようにプログラミングすることができるようになった。基本型の変数と参照型の変数との間の変換はコンパイラによって自動的に行われるようになり、ソースコードを読みやすくすることができるようになった。 Javaは、オブジェクト指向プログラミングという単一のパラダイムに基づいた言語であり、そのことが批判の対象となることがある。J2SE 5.0 では、メソッドとフィールドの static インポートを行えるようになり、手続き的なパラダイムをいくぶん良い形で取り込んだと言及されることがある。しかし static インポートを不用意に使うとソースコードを判読困難にする可能性がある。サン/JCPは static インポートを適切に使用する方法を説明している クラスパス 一般に、Javaプログラムを実行する際、-classpath オプションを使用するか、環境変数クラスパス(CLASSPATH)を必要に応じて適切に設定する必要がある。環境変数クラスパスを指定すると、既定のカレントディレクトリという設定が上書きされる。したがって、環境変数クラスパスを変更するソフトをインストールするなど設定を変えられた場合は、Java実行環境は正しくJavaプログラムを実行することができなくなることがある。このためJavaを使い始めた人々は、クラスパスについて戸惑うことがある。サンは -classpath オプションを指定する方法を推奨している。 移植性・互換性 Javaは高い移植性と互換性を実現するべく開発されており、ある程度の水準まで達成しているが、課題が残っている。Javaのバージョン間の下位互換性・上位互換性が完全ではないことが問題として議論の対象になっている。Javaでは高い移植性を保っているため、一部のプラットフォームにしかない独自の機能はJavaからは使えない。 開発ツール Javaアプリケーションを開発するための開発ツール(開発用ソフトウェア)をいくつか示す。次に示すツール以外にも、数多くのツールが開発・提供されている。 Java開発キット(Java Development Kit、JDK) - Javaアプリケーションの基本的な開発環境。 統合開発環境(IDE) - アプリケーションを開発できる多機能な開発環境。後述する。 Apache Ant - Javaアプリケーションのビルドツール。Apacheソフトウェア財団のプロジェクトによって開発された。コンパイル、バージョン管理システムとの連携、jar、javadoc生成、ファイルのコピー/移動/削除/変換などの一連の処理を自動化して効率的に実行する。makeと同種のツールであり、XMLファイルにビルドの規則を記述する。Java以外の言語によるアプリケーション開発や、アプリケーション開発以外の用途にも使うことができる。 Apache Maven - Javaアプリケーションのプロジェクト管理ツール。Apacheソフトウェア財団のプロジェクトによって開発された。 JUnit - Javaアプリケーションの単体テストフレームワーク。単体テストを自動化する。xUnitの一種である。テスト駆動開発を支援する。 統合開発環境 Javaプログラムを開発できるいくつかの統合開発環境(IDE)を示す。 Sun Java Studio Enterprise(2005年11月9日に無料化)。Sun Java Studio Creator(2005年11月9日に無料化)。Windows版、Linux版、Solaris版、Mac OS版。NetBeansにサン・マイクロシステムズがいくつかのモジュールを加えた環境。 Sun Java Studio Enterprise Sun Java Studio Creator NetBeans - Sun Java Studio Enterprise のオープンソース版ともいえる。サン・マイクロシステムズ。オープンソース。Windows版、Linux版。Solaris版、Mac OS版。 NetBeans.org NetBeans.jp WebSphere Studio - IBM。Eclipse SDK の上位版ともいえるもの。WebSphere Application Server と統合されている。Windows版、Linux版。Solaris版、Mac OS版。 WebSphere開発ツール Eclipse SDK - Eclipse財団。以前はIBMが管理していた。Web Sphere Studio のオープンソース版ともいえる。Windows版、Linux版、Solaris版、Mac OS版。 eclipse.org(英語) EclipseWiki(日本語) Borland JBuilder - ボーランド。Foundation版は無料で入手できる。Windows版、Linux版。Solaris版、Mac OS版。 JBuilder JDeveloper - オラクル。機能豊富。Oracle Application Server と統合されている。Windows版、Linux版。Solaris版。2005年6月28日に無料化した。 JDeveloper BEA WebLogic Workshop - BEAシステムズ。BEA WebLogic と統合されている。 BEA WebLogic Workshop BlueJ - Deakin University(オーストラリアヴィクトリア州) と University of Kent(イングランドケント州)、サン・マイクロシステムズが共同で開発したフリーソフトウェア、Javaの学習に適したインタラクティブな統合開発環境。 BlueJ IntelliJ IDEA - JetBrains が開発販売している商用の統合開発環境。 IntelliJ IDEA JCreator - Xinox Software が開発販売している商用の統合開発環境。無償版も利用可能。 JCreator Xcode - アップル。Mac OS Xに付属する統合開発環境。 Visual J++ - マイクロソフト。Windows版。マイクロソフト独自に仕様を拡張しているため、サンのJavaと互換性は低い。 Java認定資格 サン・マイクロシステムズは複数のJava認定資格を主催している。オラクル (企業)の買収後、一部資格は変更されている。但し、買収前に以下の資格取得者は買収後も有効資格である。 Sun認定 Java アソシエイツ(SJC-A) Sun認定 Java プログラマ(SJC-P) Sun認定 Java ディベロッパ(SJC-D) Sun認定 Web コンポーネントディベロッパ(SJC-WC) Sun認定ビジネスコンポーネントディベロッパ(SJC-BC) Sun認定 Java Web サービスディベロッパ(SJC-WS) Sun認定モバイルアプリケーションディベロッパ(SJC-MA) Sun認定エンタープライズアーキテクト(SJC-EA) 認定資格は年3回の受験制限がある。ただし何らかの理由で4回以上受験の際には、アメリカのサン・マイクロシステムズ本社に連絡する必要がある。
https://w.atwiki.jp/ce00582/pages/1258.html
import java.awt.*; import javax.swing.*; public class ex03 extends JFrame { public static void main (String args[]) { new ex03(); } public ex03() { setDefaultCloseOperation(EXIT_ON_CLOSE); getContentPane().add(new MyJPanel()); setSize(500,500); setTitle("練習"); setVisible(true); } class MyJPanel extends JPanel { public MyJPanel(){setBackground(Color.white);} public void paintComponent(Graphics g) { super.paintComponent(g); g.drawString("Well Come to java world !!",200,200); } } }
https://w.atwiki.jp/youdead/pages/18.html
言語仕様メソッドはインライン展開をするのか? メインファイルとメインクラス ガーベジコレクション メモリリーク/リソースリーク 構文オブジェクト型の比較 空(empty)配列 配列のコピー オブジェクトのコピー interface(インターフェイス)クラス package(パッケージ) import(インポート) 参考リンク コメント 言語仕様 メソッドはインライン展開をするのか? privateメソッドに限りインライン展開するらしい。 ただし、コンパイル段階では展開せず、実行時に展開するようだ。 参考リンク: #include <fujita.h> メインファイルとメインクラス mainメソッドを持つクラスを記述する場合、そのファイルはクラス名と同じ名前のファイルにしなければならない。 ガーベジコレクション 不要になったオブジェクトを自動的に解放する処理。オブジェクトが不要になったかそうでないかは、誰からも参照されていないことを判断基準にオブジェクトを開放していきます。 この機能を持っているプログラミング言語は基本的にメモリリークを起こさない。 メモリリーク/リソースリーク ガーベジコレクション処理を持っているプログラミング言語は基本的にメモリリークを起こさない。この場合、不要となったオブジェクトに対する参照が残っているために不要オブジェクトがガーベジコレクションの対象に含まれなくなった場合を指す。 構文 オブジェクト型の比較 ==、!=とinstanceofだけが使える。 「==」=参照先のメモリが同じ時trueを返す 「!=」=参照先のメモリが違う時trueを返す オブジェクトが保有する値(参照先のオブジェクトのメモリ内容)を比較したい場合はequalsメソッドを使用します instanceof=A(参照) instanceof B(クラスの型)と使うことで、A(参照)がB(クラスの型)と同じクラスもしくはサブクラスであるかを調べる。同じクラスもしくはサブクラスであるならtrueを返す。 参考リンク:Javaの道 空(empty)配列 bd = new long[0];と言った感じで長さが0の配列を作ることができる。 たぶん利用価値はない。 参考リンク:@IT:Eclipseではじめるプログラミング(6) 配列のコピー プリミティブ型であっても配列は参照渡しになる よって、コピー先にコピー元と同じだけのメモリをnewで確保する必要がある。コピー元のlengthフィールドを参照してnewすれば簡単に必要なメモリを確保できる。 オブジェクトのコピー cloneメソッドを呼び出すことで参照先のオブジェクトと同じ値を持ったインスタンスを生成できる。 cloneメソッドがオーバーロード場合は、同じ値を持ったインスタンスが生成されるとは限らない。実装者の意図するcloneインスタンスが生成されるだろう。 interface(インターフェイス)クラス インスタンスできないクラス型⇒宣言したメソッドはすべて自動的に抽象メソッドとなる 多重継承が許されている⇒継承したクラスとの間にクラス関係を意識する必要がないため interfaceクラスを継承するときはimplements(実装)キーワードを使う。 abstructクラスとの違いに注目せよ。 独感) C++のinterfaceクラス⇒存在しない。敢えて言うなら純粋仮想関数しか持たず、デストラクタがvirtualなクラスを指すのだろう。DirectXでは、こういった存在にI接頭辞をつけてインターフェイスクラスとして扱っている。 参考リンク:[[Javaの道:インタフェース(1.はじめてのインタフェース) http //www.javaroad.jp/java_interface1.htm package(パッケージ) 複数のクラスを一まとめにまとめる機能 ディレクトリ(フォルダ)のように階層構造をもつことができる。階層構造をもつ場合、パッケージかされるファイルもその階層構造と同じディレクトリに保存されなければならない。←(たぶん、自動で行われる) この機能により、別パッケージ同士なら同じ名前のクラスを持つことが可能 パッケージしたクラス群はimport文で参照することができる。 ファイルの先頭にpackage パッケージ名とすることでこのファイルのクラスがどのパッケージに属するかを指定することができる。 import(インポート) パッケージされたクラス、インターフェイスを参照して使えるようになる。 パッケージ先のすべてのクラスを参照、パッケージ先の特定のクラスを参照、という二つの形でインポートが可能 パッケージ先の参照可能なクラスはpublicなクラスのみである 参考リンク @IT: Eclipseではじめるプログラミング 初級:あまり詳しいところまで突っ込まない。 Javaの道:Java基本 中級:interfaceクラスとabstructクラスの違いをハッキリさせて書かれている。 コメント 名前 コメント
https://w.atwiki.jp/firstnewtype/pages/13.html
現在実行中のメソッド名取得方法 eclipse で使用されている Java VM java.lang.UnsupportedClassVersionError 起動オプション
https://w.atwiki.jp/ktonegaw/pages/99.html
クワイン https //ameblo.jp/zigeunerseele/entry-10078813278.html Quine.java https //introcs.cs.princeton.edu/java/54computability/Quine.java.html My Adventure Writing My First Quine in Java https //blogs.adobe.com/charles/2011/01/my-adventure-writing-my-first-quine-in-java.html benjholla/Quine.java https //gist.github.com/benjholla/9dd76ca9269e8c9af99a 50言語で構成された「Quine リレー」がスゴイ https //www.softantenna.com/wp/software/quine-relay/
https://w.atwiki.jp/ce00582/pages/1337.html
import java.awt.*; import javax.swing.*; import javax.media.j3d.*; import javax.vecmath.*; import com.sun.j3d.utils.universe.*; import com.sun.j3d.utils.geometry.*; import com.sun.j3d.utils.geometry.Box; import java.util.*; import java.util.Timer; public class ex26 { TransformGroup transform_group; Transform3D transform1; Transform3D transform2; Transform3D transform3; public static void main(String[] args) { ex26 test = new ex26(); } public ex26() { JFrame frame = new JFrame(); frame.setSize(500,500); frame.setTitle("Timer_test2"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel cp = new JPanel(); cp.setLayout(null); frame.add(cp); GraphicsConfiguration g_config = SimpleUniverse.getPreferredConfiguration(); Canvas3D canvas = new Canvas3D(g_config); canvas.setBounds(0,0,500,500); cp.add(canvas); SimpleUniverse universe = new SimpleUniverse(canvas); frame.setVisible(true); ViewingPlatform camera = universe.getViewingPlatform(); camera.setNominalViewingTransform(); Color3f light_color = new Color3f(1.4f,1.4f,1.4f); Vector3f light_direction = new Vector3f(0.0f,-0.5f,-1.0f); DirectionalLight light = new DirectionalLight(light_color,light_direction); BoundingSphere bounds = new BoundingSphere(); light.setInfluencingBounds(bounds); BranchGroup group2 = new BranchGroup(); group2.addChild(light); universe.addBranchGraph(group2); Appearance appearance = new Appearance(); Material material = new Material(); material.setDiffuseColor(0.2f,0.3f,0.9f); appearance.setMaterial(material); Box cone = new Box(0.2f,0.2f,0.8f,appearance); BranchGroup group1 = new BranchGroup(); transform_group = new TransformGroup(); transform_group.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); transform_group.addChild(cone); group1.addChild(transform_group); universe.addBranchGraph(group1); transform1 = new Transform3D(); transform2 = new Transform3D(); transform3 = new Transform3D(); Timer timer = new Timer(); //タイマーの処理内容として、Messageクラスを設定。呼び出し間隔は0.1秒に設定。 timer.schedule(new timer_task(),0,100); } class timer_task extends TimerTask { //回転角を入れる変数 float rad1=0; float rad2=0; float rad3=0; //タイマー割り込みによる処理内容を記述 public void run() { //回転角を増やします rad1+=Math.PI/20; rad2+=Math.PI/30; rad3+=Math.PI/40; //オーバーフロー防止 rad1%=(Math.PI*2); rad2%=(Math.PI*2); rad3%=(Math.PI*2); //回転の座標変換実行 transform1.rotX(rad1); transform2.rotY(rad2); transform3.rotZ(rad3); //座標変換を合成します。 transform2.mul(transform3); transform1.mul(transform2); //TransformGroupにTransform3Dを登録。 transform_group.setTransform(transform1); } } }