Javaとは〜

Javaとは〜
83問 • 2年前
  • 谷峻輔
  • 通報

    問題一覧

  • 1

    Javaは⚪︎⚪︎上で、中間コードに変換されてから動作する 当てはまる言葉は? これはつまりどういう説明か?

    仮想マシン プラットフォームに依存しない。

  • 2

    Java SE(Java Platform, Standard Edition) Java EE(Java Platform, Enterprise Edition) Java ME(Java Platform, Micro Edition) どう違うか?

    Java SE Javaの基本となるエディション Java EE サーバーサイド開発のための企業向けエディション Java ME 組み込みシステムに利用されるエディション

  • 3

    JDK(Java Develpment Kit) とはなにか?

    Java開発環境 Javaアプリを実行するためのJava仮想マシンをはじめ、コンパイラーやデバッガーなどのツールを備えている

  • 4

    Javaプログラムの単位はなにか?

    クラス

  • 5

    パッケージの命名はどうするのがベストプラクティスか?

    命名に際しては、他のライブラリとの重複を避けるために、ドメイン名を逆にしたものを頭に付与するようにしてください。 mynavi.example.comなら 「com.example.mynavi」がパッケージとなる

  • 6

    Javaのメインメソッドとはなにか?

    mainというメソッドだけは特殊で、アプリの開始位置を表します。Javaはアプリを起動したときに、まずmainメソッドを探して、その配下のコードから実行するのです。このようなメソッドのことをエントリーポイントと言います。

  • 7

    Javaファイルとclassファイルは何が違うか?

    Javaのソースコードが.javaファイル コンパイルしたものが、.classファイル

  • 8

    Javaのコードをコンパイルする

    javac option src option:コマンドオプション src:ソースファイル(.javaファイル) 例 javac -d C:data -classpath .;C:data -encoding Windows-31J tojavacodesamplebasicHelloSample.java https://java-code.jp/55

  • 9

    コンパイルする際に必要なクラスファイルを探す先を指定するにはどうすればいいか?

    javac コマンドのオプションを指定 -classpath パス 関連するクラスファイルの検索先。複数指定時は、セミコロン(Windows)、またはコロン(Unix)区切り -classpathオプションは、そのソースをコンパイルするために必要なクラスファイル、またはJARファイルの場所(パス)を表すものです

  • 10

    コンパイル時に、クラスパスを毎回指定するのが面倒な時はどうするのがよいか?

    都度設定するのが面倒である場合には、環境変数CLASSPATHであらかじめ指定しておいても構いません。

  • 11

    Javaプログラムを実行するコマンドは?

    java option clazz params option:コマンドオプション clazz:実行するクラス params:パラメーター https://java-code.jp/53

  • 12

    jarファイルとはなにか?

    jarファイルはコンパイル済みのclassファイルや画像などのファイルを、zip形式に圧縮してまとめたファイル Javaでアプリケーションを配布する際には、JAR形式でまとめたものを配布するのが一般的です。

  • 13

    jarファイルを実行するコマンドは?

    javaコマンドのjar オプションを指定する たとえば以下は、Hello.jarを実行する例です。パラメーターとして「山田」をセットします。 > java -jar Hello.jar "山田"

  • 14

    jarファイルをjavaコマンドで実行するために予め何が必要か?

    jarファイルからアプリケーションを起動するには、 .jarファイルに以下のような内容のマニフェストファイル(/META-INF/MANIFEST.MF)を組み込んでおく必要があります。 Main-Classパラメータには、起動するクラスを指定します。 Main-Class: to.java.code.sample.basic.HelloSample

  • 15

    jarファイルを作成するコマンドは?

    jar option jfile clazz… option:コマンドオプション jfile:作成するjarファイルの名前 clazz:含めるクラスファイル(複数指定可) たとえば以下は、あらかじめ用意したクラスファイルとマニフェストファイル(MANIFEST.MF)をもとに、Hello.jarを作成する例です。 > jar cvfm Hello.jar to¥java¥code¥sample¥basic¥META-INF¥MANIFEST.MF to¥java¥code¥sample¥basic¥*.class https://java-code.jp/51 https://java-reference.com/command-jar/

  • 16

    javadocコマンドもはなにができるか?

    javadocコマンドは、ソースファイルに記述されたドキュメンテーションコメントからAPIドキュメントを作成します。 公式サイトで公開されているAPIドキュメントも、もともとはjavadocコマンドで作成されたものです。 APIドキュメントをHTMLで確認できる。 コマンド詳細 javadoc option src option:コマンドオプション src:ドキュメントのもととなるソースファイル https://java-code.jp/49 https://qiita.com/maple_syrup/items/96f7142222cd4eb5c9de

  • 17

    REPL とはなにか

    入力・評価・出力のループのこと。インタプリタにおいて、ユーザーとインタプリタが対話的にコード片を実行できるもの

  • 18

    対話式のシェル環境を起動するコマンドは?

    jshell option option:コマンドオプション Java 9で追加されています。 Java 9以前では、簡単なコードを利用するにもコンパイル&実行という手順を踏む必要がありましたが、JShellを利用することでその場で即座に実行できます。 https://java-code.jp/1272

  • 19

    以下を参考にしてjshellの特徴をあげよ PS C:\pleiades\java\13\bin> jshell | JShellへようこそ -- バージョン13.0.1 | 概要については、次を入力してください: /help intro jshell> import java.util.ArrayList; (①インポート) jshell> new ArrayList<String>(); (②リストを定義) $2 ==> [] jshell> $2.add("おはよう"); (③リストを操作) $3 ==> true jshell> $2.add("こんにちは"); $4 ==> true jshell> $2.get(0); $5 ==> "おはよう" jshell> /exit (④JShellを終了) | 終了します

    JShellのプロンプトは「jshell> 」です。ライブラリを利用する際には、普通のコードと同じくimport命令でクラスをインポートします(①)。 以降のコード(②~③)は、暗黙的にmainメソッド配下のコードと見なされます。また、変数の宣言も不要です。生成されたオブジェクトは、そのまま自動変数$1、$2…に順に代入されるからです。③でも②で生成したArrayListオブジェクトに変数$2経由でアクセスできています。 JShellを終了するには、/exitメタコマンドを利用します。

  • 20

    命名規則について 変数やメソッドを命名する場合は? クラス/インターフェイスは? 定数は?

    camelCase記法:先頭文字は小文字、単語の区切りは大文字(myNameなど) Pascal記法:先頭文字は大文字、単語の区切りも大文字(MyNameなど) アンダースコア記法:すべての文字は小文字、または大文字。単語の区切りはアンダースコア(MY_NAME、my_nameなど)

  • 21

    Javaの型推論とは?

    コンパイラが、初期値から型を推論すること。 つまり、データ型を指定しない変数宣言ができる。 package com.example.mynavi.basic;   public class VarBasic {   public static void main(String[] args) {     var num = 3.14;     System.out.println(num);    // 結果:3.14   } } 上の例であれば、変数の型は推論された結果は、doubleです。

  • 22

    javascriptなどと違う、JAVAの型推論の制限事項は4つあげよ?

    1 型推論によってコンパイラに定められた型は、変更不可能。 (スクリプトではないからしょうがない) 以下のようなコードはコンパイルエラーとなります。変数dataの型は、宣言時にdoubleで決まるので、これにString型の値を代入することはできません。 var data = 3.14; data = "Javaコード入門"; 2 初期値は省略不可 3 複数の変数を列挙できない var num1 = 1 , num2 = 2; 4 ローカル変数にしか使えない。 フィールド宣言では、初期値の有無に関わらず、varキーワードは利用できません。

  • 23

    変数の宣言について、同じ型が複数ある場合の省略記法は?

    カンマで区切る double num = 3.14, num2 = 1.414;

  • 24

    型推論はどのバージョンで利用可能か?

    Java10以降

  • 25

    定数の宣言のキーワードは?

    final public static void main(String[] args) { final String GREETING_MSG = "こんにちは、世界!"; System.out.println(GREETING_MSG); }

  • 26

    整数型の種類4つと説明をせよ

    byte バイトデータを示す型 1バイト符号付き整数(-128~127) short 2バイト符号付き整数(-32768~32767) int 4バイト符号付き整数(-2147483648~2147483647) long 8バイト符号付き整数(-9223372036854775808~9223372036854775807)

  • 27

    整数型の使用方針について説明せよ

    基本はint型を利用し、それで不足の場合のみlong型を利用してください。short型を利用する機会はほとんどありません。

  • 28

    整数型の接頭辞について、2進数、8進数、16進数の場合を、説明せよ

    二進数は0b、八進数は0、十六進数は0xを付与する int i2 = 010; // 8進数(0~) int i3 = 0xFF; // 16進数(0x~) int i4 = 0b0010; // 2進数(0b~。JavaSE 7以降)

  • 29

    数値リテラルでは、型を指定しなかった場合は何の整数型と見なされるか

    int型 System.out.println(21474);

  • 30

    数値リテラルの型を明示的に設定するには?

    「L」(long型)を値の末尾に付与してください。 System.out.println(2147483648L);

  • 31

    浮動小数点型について2種類、説明せよ

    float … 4バイト浮動小数点数(±1.40239846×10^-45~±3.40282347×10^38) double … 8バイト浮動小数点数       (±4.94065645841246544×10^-324~±1.79769313486231570×10^308)

  • 32

    floatとdoubleどちらを一般的に利用するか

    double

  • 33

    floatのリテラルはどうなるか?

    float値を表すには、リテラルのサフィックスとして「f」または「F」を指定してください。 float f = 1.1234f;

  • 34

    浮動小数点型で、指数表現するには?

    浮動小数点型では指数表現も利用できます。「1.234E5」は「1.234×10^5」の意味です。大文字小文字を区別しません。 double d1 = 1.1234; double d2 = 1.1234E5; // 指数表現

  • 35

    文字型について説明せよ

    char … UNICODE文字(u0000~uffff) リテラル値はシングルクォートで括ります。文字そのものを指定する他、uxxxxの形式で文字を表すこともできます。 char c1 = 'あ'; char c2 = '¥u5f01'; // 16進数の文字コード表現 ちなみに文字列型はクラスで基本型ではないとのこと

  • 36

    配列型はどうやって宣言するか2種類あげよ?

    int[] data = new int[5]; int[] data2 = { 1, 2, 3 };

  • 37

    多次元配列はどうやって宣言するか?

    int[][] data3 = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; System.out.println(data3[0][2]);

  • 38

    暗黙的な型キャストができないケースは?

    拡大変換可能だが縮小変換はそのままでは不可 基本型では、小さな型を大きな型に代入可能(たとえば、int型の値をlong型に代入) long型の値がint型に格納はできない

  • 39

    明示的に型キャストするには?

    「(型名)」を付与するだけ long l = 50; int i = (int)l; System.out.println(1+i);

  • 40

    クラスをキャストする際、キャスト変換可能かどうか調べるにはどうするか?

    instanceof演算子を利用する。 これは、オブジェクトが指定されたクラス、またはスーパークラスのインスタンスであるかを判定します。 クラス型のキャストにあたっては、あらかじめinstanceof演算子で実際の型を判定しておくことで、安全にキャストを実行できます。 Animal c = new Cat(); ※親の型でインスタンス可能! if (c instanceof Hamster) { Hamster h = (Hamster)c; } ※ハムスターもアニマル型を継承してると思うので、型変換可能

  • 41

    インクリメント、デクリメントについて前におくか後におくかちがいは?

    x++は代入した後にインクリメントしますが、++xは代入する前にインクリメントします。 int x = 1; int y = x++; System.out.println("yは" + y); // 結果:yは1 int a = 1; int b = ++a; System.out.println("bは" + b); // 結果:bは2

  • 42

    浮動小数点数の演算に関する懸念点をあげよ

    浮動小数点数は内部的に二進数で演算されてしまう。 例えば10進数の0.1ですら、2進数では0.000110011…のような無限循環小数となってしまう。 つまり計算に不向き。 System.out.println(1.0 - 0.1 - 0.2 - 0.3); // 結果:0.39999999999999997 といった感じになる。

  • 43

    厳密な小数点の計算をするには?

    厳密な結果を得る場合には、BigDecimalというクラスを利用してください BigDecimal bd1 = new BigDecimal("1.0"); BigDecimal bd2 = new BigDecimal("0.1"); BigDecimal bd3 = new BigDecimal("0.2"); BigDecimal bd4 = new BigDecimal("0.3"); System.out.println(bd1.subtract(bd2).subtract(bd3).subtract(bd4)); // 結果:0.4 だいぶめんどい subtractメソッドが減算を意味します。その他、add(加算)、multiply(積算)、divide(除算)などを利用できます

  • 44

    +演算子は 文字列がオペランドに含まれるとどうなるか?

    文字列連結演算子になる。 System.out.println("x" + 1); // 結果:x1 System.out.println(1 + "x"); // 結果:1x System.out.println("2" + 1); // 結果:21 代入

  • 45

    Javaのデータ型は何に分類されるか?

    基本型、参照型

  • 46

    Javaの渡しの戦略は?

    基本型は値渡し 参照型は参照の値渡し javascriptとおなじ https://yoshitaro-yoyo.hatenablog.com/entry/only_value_passing_in_java#Java%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E5%8F%82%E7%85%A7%E5%9E%8B ちなみに参照渡しとは 実引数と仮引数が完全に同じ実体を表すように引数を受け渡すこと 再代入すると、参照の変更が行われるのが参照渡し、そのまま再代入されるのが参照の値渡しということらしい

  • 47

    Javaの==演算子について説明せよ

    正しくは同一性(Identity)――同じモノであるかを確認するための演算子 基本型では、値が等しければ同じものであるので問題ありません。 しかし、参照型では同じ値であっても、同じものであるとは限りません。たまたま同じ値を持っているだけで、異なる場所に格納されている異なるものである可能性があるからです。 つまり、厳密な等価演算子である。

  • 48

    参照型における、同値性を確認する方法はなにか?

    参照型を比較するには、同値性(Equivalence)を確認するためのequalsメソッドを利用してください。 System.out.println(Arrays.equals(data1, data2));

  • 49

    単一コメント 複数行コメント Javadocコメント は?

    // 単一行コメントです。 /* 複数行の コメントです。 */ /** * javadocコマンドでドキュメント化されるコメントです。 */

  • 50

    switch式について説明せよ

    Java12以降に追加された。 まだプレビュー状態らしい (1)switch式 switchが式として表現できます。つまり、文の中でswitch命令を記述できます。なお、switch式では値を返さないパターンがあってはいけないので、default句は省略不可です。 (2)アロー演算子 case/default句を「値 -> 対応する式」の形式で表せます。アロー演算子では、句の末尾のbreak命令は不要となります。 (3)case値の複数列記 case句に、カンマ区切りで値を列記できます。従来のようにcase句そのものを列記する必要はありません。 String lang = "Ruby"; @SuppressWarnings("preview") String category = switch(lang) { case "PHP", "Python", "Ruby" -> "スクリプト言語"; case "Java", "C#", "C" -> "プログラミング言語"; default -> "不明"; }; System.out.println(category); // 結果:スクリプト言語 また、Preview版を利用する場合は、@SuppressWarningsアノテーションでPreviewに対する警告を無効化しておきましょう

  • 51

    代入演算子の結果は戻り値があるか?

    ある 多重代入可能 a = b = c = 10; つまり文中で代入できるってことね

  • 52

    Javaにはカンマ演算子があるか?

    ある。 int a = 1, b = 2; for文でもつかえる。 for(int i = 0, j = 10; i < 5; i++, j++) { System.out.println(i * j); }

  • 53

    入れ子になったループに対してbreakすると一つ親のブロックを抜け出すだけだが、 もう一つ親のブロックを含めて抜け出すにはどうするか?

    ラベル構文を利用することで、入れ子になったループをまとめて脱出することもできます。 ラベルは脱出したいループの先頭に付与します(この場合は「ext」) public static void main(String[] args) { ext : for (int i = 1; i < 10; i++) { for (int j = 1; j < 10; j++) { if (i * j > 50) { break ext; } System.out.print((i * j) + "/"); } System.out.println(); } }

  • 54

    定数は実際どのように基準するか?

    クラス直下にたいして フィールド宣言の頭にstatic final修飾子を付与することで宣言できます public static final double E = 2.7182818284590452354; public static final double PI = 3.14159265358979323846; 定数であることはfinal修飾子だけで表現できますが、static修飾子を付けるのがお作法です。static修飾子を付与することで、インスタンス生成のたびに同じ値をインスタンスにコピーするのを防ぐことができます

  • 55

    メソッドで、可変長引数を利用するにはどうするか?

    型名のうしろに「…」を付与することで、可変長引数を表す 可変長引数とは呼び出し側で自由に引数の数を変えられる引数のこと package com.example.mynavi.object; public class Util { public static double sum(double... values) { double result = 0; for (double value : values) { result += value; } return result; } } 呼び出し方はこう System.out.println(Util.sum(10, 30, 50)); // 結果:90.0 System.out.println(Util.sum(10, 30, 50, 70)); // 結果:160.0

  • 56

    可変長引数をメソッドに定義した際、そのメソッドではどのように扱われるか

    可変長引数は、内部的には配列として処理されます。前問題のサンプルでは引数valuesを拡張for命令で順に取り出し、順に足しこんでいるわけです。

  • 57

    オーバーロードとは

    同じ名前で、引数の型、並びだけが異なる」メソッドを複数定義すること public String getInfo() { return this.getInfo("%sは%s色のハムスターです。"); } public String getInfo(String format) { return String.format(format, this.name, this.color); }

  • 58

    コンストラクタが明示されない場合、どうなるか?

    デフォルトコンストラクター コンストラクターが明示的に定義されなかった場合、Javaは引数なしの空のコンストラクターを暗黙的に生成します。これをデフォルトコンストラクターと言います。

  • 59

    Javaの初期化ブロックとはなにか?

    コンストラクターによく似たしくみ 初期化ブロックは、classブロック直下で名前なしのブロック({…})として表します。 public class Animal { String name; String color; { this.name = 'ニンザブロウ'; this.color = 'White'; } } 記法そのものはシンプルですが、コンストラクターに比べると、引数を渡すことすらできませんので、自由度もあまりありません。

  • 60

    初期化ブロックの使用用途は?

    一般的には、オブジェクトの初期化にはコンストラクターを利用し、コンストラクターを複数定義(オーバーロード)した場合に、重複してしまった処理だけを初期化ブロックとして切り出す、という使い方になるでしょう。

  • 61

    完全修飾名とはなにか

    パッケージを含めたクラス名のこと

  • 62

    パッケージをインポートする利点とはなにか

    本来、クラスを一意に特定するためには、完全修飾名で記述しなければなりません。しかし、to.java.code.sample.basic.Animalのような名前を毎回記述するのは面倒です。 そこで、あらかじめ利用するパッケージをインポート(import)しておくことで、コード内ではパッケージを省略して記述できるようになります。 import com.example.mynavi.object.Animal; Animal a = new Animal(); ↓ com.example.mynavi.object.Animal a = new com.example.mynavi.objectAnimal();

  • 63

    オンデマンドインポートとは?

    パッケージ配下のすべてのクラスをまとめてインポートしたいときにアスタリスクでインポートするやり方 import com.example.mynavi.object.*; ただし、近年ではコード内で利用しているクラスを明確にするという意味で、できるだけオンデマンドインポートは利用しないのが慣例的です。

  • 64

    暗黙的にインポートされるパッケージはなにか?

    java.langパッケージは、頻繁に利用するという性質上、自動的にインポートされます。明示的にimport宣言する必要はありません。

  • 65

    クラスのメンバーをインポートしたい場合はどうするか?

    import static命令を利用することで、クラスのメンバーを呼び出すこともできます。 以下はabsメソッドをインポートしている package com.example.mynavi.object; import static java.lang.Math.*; public class ClassStaticImport { public static void main(String[] args) { System.out.println(abs(-10)); // 結果:10 } } import static java.lang.Math.abs でも可能

  • 66

    staticな内部クラスから外部クラスのインスタンスフィールド変数にアクセス可能か?

    できない。 staticな内部クラスは外部クラスのstaticなメンバーにのみアクセス可能なので、外部クラスのメンバーとの関係性は比較的薄くなり、通常の別のクラスとして宣言した場合に近くなります。

  • 67

    非staticな内部クラスの留意点は?

    非staticな内部クラスは、インスタンス化に際して外部クラスのオブジェクトへの参照を保持するためにメモリーを消費すること。 また、この参照によって外部クラスのオブジェクトの破棄が妨げられることもあります。 なるほど、ガベージコレクションが働かなくなる可能性があるらしい 非staticな内部クラスを利用するのは、外部クラスのオブジェクトのインスタンスフィールドにアクセスしなければならない状況に限定すべきです。 // 外部クラス class OuterClass { private String str = "OuterClassの変数"; // 内部クラス class InnerClass { public void innerSample() { System.out.println(str); } } } public class Main { public static void main(String[] args) { // 外部クラスのインスタンスの生成 OuterClass oc = new OuterClass(); // 外部クラスのオブジェクトから内部クラスのインスタンスを生成 OuterClass.InnerClass ic = oc.new InnerClass(); ic.innerSample(); } }

  • 68

    内部クラスはどのような用途で使用されるか?

    外部クラスへのアクセス権をもつ静的クラス、またはオブジェクトを生成をしたいとき。 継承するほどでもない時に利用する

  • 69

    モジュールとはなにか?

    Java9で導入された。 パッケージを束ねる機能で、モジュール内のパッケージのアクセス権を以下のように制御するということができる。 モジュール内のパッケージに対して ・現在のモジュールの中でだけpublic ・特定のモジュールに対してだけpublic ・すべてのモジュールに対してpublic が設定できるようになる。

  • 70

    モジュールの利用用途は?

    あるライブラリの中で利用しているパッケージのアクセス権を制御し、メインのプログラムからは不可視とすることができる。 従来のJavaでは 全てに対してpublicとなるため この制御ができなかった

  • 71

    標準ライブラリはJava9以降どうなったか?

    モジュール化された。 > java –-list-modules java.base@13.0.1 java.compiler@13.0.1 java.datatransfer@13.0.1 java.desktop@13.0.1 java.instrument@13.0.1 java.logging@13.0.1 java.management@13.0.1 java.management.rmi@13.0.1 java.naming@13.0.1 java.net.http@13.0.1 …中略… jdk.rmic@13.0.1 jdk.scripting.nashorn@13.0.1 jdk.scripting.nashorn.shell@13.0.1 jdk.sctp@13.0.1 jdk.security.auth@13.0.1 jdk.security.jgss@13.0.1 jdk.unsupported@13.0.1 jdk.unsupported.desktop@13.0.1 jdk.xml.dom@13.0.1 jdk.zipfs@13.0.1

  • 72

    モジュールの作成方法は?

    モジュール用のディレクトリを作成し、そのディレクトリにmodule-info.javaというファイルを作り、その他のソースファイルと共にコンパイルする。 module-info.javaには、以下の2点を記述する。 ・どのパッケージを公開するのか ・ほかのどのモジュールを使うのか module test { exports com.test; //exports パッケージ名 requires foo; //requires モジュール名 } 下記のような構成となる。 jp.mynavi.greeting/ └── src ├── jp │ └── mynavi │ └── imajava │ ├── hidden │ │ └── HiddenGreeting.java │ └── mylib │ └── Greeting.java └── module-info.java Greeting.java package jp.mynavi.imajava.mylib; public class Greeting { public static String hello(String name) { return "Hello " + name + "!"; } }

  • 73

    そのモジュールが依存する外部モジュールを記載するにはどうするか?

    モジュールの世界では、デフォルトでは異なるモジュールにはアクセスできません 別のモジュールを利用したい場合には、モジュール定義ファイルにrequires宣言を追加してください。たとえば以下は、java.net.httpモジュールを利用する例です。 module-info.java module mynavi { requires java.net.http; } requires宣言なしにjava.net.httpモジュールにアクセスした場合、「The type java.net.http.HttpClient is not accessible」のようなエラーとなります。

  • 74

    Java.baseモジュールを利用する際はrequires 宣言が必要か?

    別のモジュールであるにも関わらず、 requires宣言をしなくても、アクセスできる特別なモジュールとしてjava.baseモジュールがある

  • 75

    モジュールで、親の親のモジュールを利用したい場合、 宣言しなくても使えるようにするには、親モジュールでどう定義されてる必要があるか?

    requires宣言では、そのモジュールが利用可能なモジュールしか宣言できない。 requires transitive宣言では、自モジュールがrequiresされた際、requires transitiveされたモジュールへのアクセス権を宣言元モジュールに引き継ぎができる。 →mod1モジュールは、java.net.http やjava.sqlモジュールが利用できる。 module mod1 { requires mod2; } module mod2 { requires transitive java.net.http; requires transitive java.sql; } この場合、mod1モジュールはmod2モジュール経由でjava.net.http/java.sqlモジュールに依存していますが、mod1側でこれらのモジュールをrequires宣言する必要はありません。 これが推移的な依存関係を宣言する、という意味です(よって、太字を削除した場合、mod1モジュールはjava.net.http/java.sqlモジュールを明示的にrequires宣言しなければなりません)。

  • 76

    モジュール配下のパッケージを非公開にするにはどうするか?

    モジュールに束ねられたパッケージは 非公開となるので、記述は不要

  • 77

    モジュール配下のパッケージを公開するにはどうするか?

    モジュール配下のパッケージは、デフォルトでモジュールプライベート(=モジュールの外からはアクセスできない)と見なされます。 モジュールの外からパッケージへのアクセスを許可するには、exportsで公開したいパッケージを宣言してください。 たとえば以下はmynaviモジュールからcom.example.mynavi.basicパッケージを公開する例です。 module mynavi { exports com.example.mynavi.basic; }

  • 78

    特定のモジュールのみにしかパッケージを公開したくないときはどうするか?

    特定のモジュールに対してのみパッケージを公開したいならば、exports…to宣言を利用します。たとえば、以下はhoge/piyoモジュールに対してのみcom.example.mynavi.basicパッケージを公開する例です。 module mynavi { exports com.example.mynavi.basic to hoge, piyo; }

  • 79

    モジュールをコンパイルするにはどうするか?

    モジュール化するには、module-info.javaとソースファイルをコンパイルするファイルのパスとして、コンパイルする。コンパイル時には、javacコマンドの-dオプションを使う <構文> javac -d クラスファイルの出力先ディレクトリ コンパイルするファイルのパス <例> javac -d mods/test src/test/module-info.java src/test/com/sample/Main.java

  • 80

    モジュールを実行するにはどうするか?

    モジュールの実行には、javaコマンドの--module-pathオプションでモジュールを探すためのモジュールパスを指定し、-mオプションで実行したいモジュールのクラスを指定する。   <構文> java --module-path モジュールのルートディレクトリ -m 実行したいモジュールのクラス <例> java --module-path mods -m test/com.sample.Main //testモジュールのcom.sample.Mainクラスを実行

  • 81

    モジュールをJarファイルにまとめるには?

    モジュールはjarコマンドで1つにまとめることができる。 <構文> jar --create --file=jarファイル名 --main-class=エントリーポイントを持つクラス -C jarファイルに含めるファイルがあるディレクトリ <例> jar --create --file=mlib/test.jar --main-class=com.sample.Main -C mods/test

  • 82

    モジュールパスとはなにか?

    モジュールパスとは、モジュールの検索先を表すパスのことです。Eclipseであれば、プロジェクトのプロパティから[Javaのビルド・パス]-[ライブラリー]タブから確認できます。

  • 83

    自動モジュールとはなにか?

    非モジュールをモジュールとして扱えるようにするためのしくみが、自動モジュールです。 具体的には、モジュールパスに配置された.jarファイルで、モジュール定義ファイルを持たないコードは、自動モジュールと見なされます。

  • その他

    その他

    谷峻輔 · 12問 · 2年前

    その他

    その他

    12問 • 2年前
    谷峻輔

    LWC

    LWC

    谷峻輔 · 100問 · 2年前

    LWC

    LWC

    100問 • 2年前
    谷峻輔

    LWC2

    LWC2

    谷峻輔 · 28問 · 2年前

    LWC2

    LWC2

    28問 • 2年前
    谷峻輔

    Javascript

    Javascript

    谷峻輔 · 100問 · 2年前

    Javascript

    Javascript

    100問 • 2年前
    谷峻輔

    javascript2

    javascript2

    谷峻輔 · 58問 · 2年前

    javascript2

    javascript2

    58問 • 2年前
    谷峻輔

    js1 JavaScript の基礎

    js1 JavaScript の基礎

    谷峻輔 · 92問 · 2年前

    js1 JavaScript の基礎

    js1 JavaScript の基礎

    92問 • 2年前
    谷峻輔

    js2 コード品質、オブジェクト基本、データ型

    js2 コード品質、オブジェクト基本、データ型

    谷峻輔 · 100問 · 2年前

    js2 コード品質、オブジェクト基本、データ型

    js2 コード品質、オブジェクト基本、データ型

    100問 • 2年前
    谷峻輔

    js3 データ型

    js3 データ型

    谷峻輔 · 100問 · 2年前

    js3 データ型

    js3 データ型

    100問 • 2年前
    谷峻輔

    js4 データ型、関数の高度な機能

    js4 データ型、関数の高度な機能

    谷峻輔 · 100問 · 2年前

    js4 データ型、関数の高度な機能

    js4 データ型、関数の高度な機能

    100問 • 2年前
    谷峻輔

    js5 関数の高度な機能 オブジェクトプロパティの設定 プロトタイプ, 継承プロトタイプ, 継承、クラス

    js5 関数の高度な機能 オブジェクトプロパティの設定 プロトタイプ, 継承プロトタイプ, 継承、クラス

    谷峻輔 · 96問 · 2年前

    js5 関数の高度な機能 オブジェクトプロパティの設定 プロトタイプ, 継承プロトタイプ, 継承、クラス

    js5 関数の高度な機能 オブジェクトプロパティの設定 プロトタイプ, 継承プロトタイプ, 継承、クラス

    96問 • 2年前
    谷峻輔

    js6 クラス Promise, async/await

    js6 クラス Promise, async/await

    谷峻輔 · 100問 · 2年前

    js6 クラス Promise, async/await

    js6 クラス Promise, async/await

    100問 • 2年前
    谷峻輔

    js7 Promise, async/await、ジェネレータ, 高度なイテレーション、モジュール

    js7 Promise, async/await、ジェネレータ, 高度なイテレーション、モジュール

    谷峻輔 · 96問 · 2年前

    js7 Promise, async/await、ジェネレータ, 高度なイテレーション、モジュール

    js7 Promise, async/await、ジェネレータ, 高度なイテレーション、モジュール

    96問 • 2年前
    谷峻輔

    js8 その他

    js8 その他

    谷峻輔 · 57問 · 2年前

    js8 その他

    js8 その他

    57問 • 2年前
    谷峻輔

    Reactクイックスタート

    Reactクイックスタート

    谷峻輔 · 15問 · 2年前

    Reactクイックスタート

    Reactクイックスタート

    15問 • 2年前
    谷峻輔

    デザインパターン

    デザインパターン

    谷峻輔 · 5問 · 2年前

    デザインパターン

    デザインパターン

    5問 • 2年前
    谷峻輔

    承認申請

    承認申請

    谷峻輔 · 16問 · 2年前

    承認申請

    承認申請

    16問 • 2年前
    谷峻輔

    アプリケーションビルダー2

    アプリケーションビルダー2

    谷峻輔 · 100問 · 2年前

    アプリケーションビルダー2

    アプリケーションビルダー2

    100問 • 2年前
    谷峻輔

    アプリケーションビルダー3

    アプリケーションビルダー3

    谷峻輔 · 100問 · 2年前

    アプリケーションビルダー3

    アプリケーションビルダー3

    100問 • 2年前
    谷峻輔

    アプリケーションビルダー4

    アプリケーションビルダー4

    谷峻輔 · 100問 · 2年前

    アプリケーションビルダー4

    アプリケーションビルダー4

    100問 • 2年前
    谷峻輔

    アプリケーションビルダー5

    アプリケーションビルダー5

    谷峻輔 · 94問 · 2年前

    アプリケーションビルダー5

    アプリケーションビルダー5

    94問 • 2年前
    谷峻輔

    アプリケーションビルダー6

    アプリケーションビルダー6

    谷峻輔 · 100問 · 2年前

    アプリケーションビルダー6

    アプリケーションビルダー6

    100問 • 2年前
    谷峻輔

    アプリケーションビルダー7

    アプリケーションビルダー7

    谷峻輔 · 100問 · 2年前

    アプリケーションビルダー7

    アプリケーションビルダー7

    100問 • 2年前
    谷峻輔

    アプリケーションビルダー8

    アプリケーションビルダー8

    谷峻輔 · 98問 · 2年前

    アプリケーションビルダー8

    アプリケーションビルダー8

    98問 • 2年前
    谷峻輔

    アプリケーションビルダー9

    アプリケーションビルダー9

    谷峻輔 · 70問 · 2年前

    アプリケーションビルダー9

    アプリケーションビルダー9

    70問 • 2年前
    谷峻輔

    フロー

    フロー

    谷峻輔 · 42問 · 2年前

    フロー

    フロー

    42問 • 2年前
    谷峻輔

    レポート、ダッシュボード

    レポート、ダッシュボード

    谷峻輔 · 60問 · 2年前

    レポート、ダッシュボード

    レポート、ダッシュボード

    60問 • 2年前
    谷峻輔

    SalesCloud

    SalesCloud

    谷峻輔 · 18問 · 2年前

    SalesCloud

    SalesCloud

    18問 • 2年前
    谷峻輔

    標準機能

    標準機能

    谷峻輔 · 72問 · 2年前

    標準機能

    標準機能

    72問 • 2年前
    谷峻輔

    宣言的開発

    宣言的開発

    谷峻輔 · 8問 · 2年前

    宣言的開発

    宣言的開発

    8問 • 2年前
    谷峻輔

    数式、人力規則

    数式、人力規則

    谷峻輔 · 18問 · 2年前

    数式、人力規則

    数式、人力規則

    18問 • 2年前
    谷峻輔

    アクセスレベル

    アクセスレベル

    谷峻輔 · 63問 · 2年前

    アクセスレベル

    アクセスレベル

    63問 • 2年前
    谷峻輔

    データ型変換

    データ型変換

    谷峻輔 · 22問 · 2年前

    データ型変換

    データ型変換

    22問 • 2年前
    谷峻輔

    オブジェクト、項目

    オブジェクト、項目

    谷峻輔 · 91問 · 2年前

    オブジェクト、項目

    オブジェクト、項目

    91問 • 2年前
    谷峻輔

    アプリ、タブ

    アプリ、タブ

    谷峻輔 · 92問 · 2年前

    アプリ、タブ

    アプリ、タブ

    92問 • 2年前
    谷峻輔

    自動化

    自動化

    谷峻輔 · 17問 · 2年前

    自動化

    自動化

    17問 • 2年前
    谷峻輔

    組織、開発モデル

    組織、開発モデル

    谷峻輔 · 65問 · 2年前

    組織、開発モデル

    組織、開発モデル

    65問 • 2年前
    谷峻輔

    ボタン、アクション

    ボタン、アクション

    谷峻輔 · 69問 · 2年前

    ボタン、アクション

    ボタン、アクション

    69問 • 2年前
    谷峻輔

    インテグレーション

    インテグレーション

    谷峻輔 · 40問 · 2年前

    インテグレーション

    インテグレーション

    40問 • 2年前
    谷峻輔

    ページレイアウト、リストビュー、レコードタイプ、プロセス

    ページレイアウト、リストビュー、レコードタイプ、プロセス

    谷峻輔 · 46問 · 2年前

    ページレイアウト、リストビュー、レコードタイプ、プロセス

    ページレイアウト、リストビュー、レコードタイプ、プロセス

    46問 • 2年前
    谷峻輔

    標準オブジェクト

    標準オブジェクト

    谷峻輔 · 42問 · 2年前

    標準オブジェクト

    標準オブジェクト

    42問 • 2年前
    谷峻輔

    ServiceCloud

    ServiceCloud

    谷峻輔 · 16問 · 2年前

    ServiceCloud

    ServiceCloud

    16問 • 2年前
    谷峻輔

    ユーザ、ライセンス、プロファイル、権限セット

    ユーザ、ライセンス、プロファイル、権限セット

    谷峻輔 · 41問 · 2年前

    ユーザ、ライセンス、プロファイル、権限セット

    ユーザ、ライセンス、プロファイル、権限セット

    41問 • 2年前
    谷峻輔

    データインポート、エクスポート

    データインポート、エクスポート

    谷峻輔 · 3回閲覧 · 12問 · 2年前

    データインポート、エクスポート

    データインポート、エクスポート

    3回閲覧 • 12問 • 2年前
    谷峻輔

    Chatter

    Chatter

    谷峻輔 · 21問 · 2年前

    Chatter

    Chatter

    21問 • 2年前
    谷峻輔

    承認申請

    承認申請

    谷峻輔 · 15問 · 2年前

    承認申請

    承認申請

    15問 • 2年前
    谷峻輔

    フロー

    フロー

    谷峻輔 · 44問 · 2年前

    フロー

    フロー

    44問 • 2年前
    谷峻輔

    レポート、ダッシュボード

    レポート、ダッシュボード

    谷峻輔 · 65問 · 2年前

    レポート、ダッシュボード

    レポート、ダッシュボード

    65問 • 2年前
    谷峻輔

    SalesCloud

    SalesCloud

    谷峻輔 · 18問 · 2年前

    SalesCloud

    SalesCloud

    18問 • 2年前
    谷峻輔

    標準機能

    標準機能

    谷峻輔 · 72問 · 2年前

    標準機能

    標準機能

    72問 • 2年前
    谷峻輔

    宣言的開発

    宣言的開発

    谷峻輔 · 8問 · 2年前

    宣言的開発

    宣言的開発

    8問 • 2年前
    谷峻輔

    アクセスレベル

    アクセスレベル

    谷峻輔 · 52問 · 2年前

    アクセスレベル

    アクセスレベル

    52問 • 2年前
    谷峻輔

    数式、人力規則

    数式、人力規則

    谷峻輔 · 17問 · 2年前

    数式、人力規則

    数式、人力規則

    17問 • 2年前
    谷峻輔

    データ型変換

    データ型変換

    谷峻輔 · 22問 · 2年前

    データ型変換

    データ型変換

    22問 • 2年前
    谷峻輔

    オブジェクト、項目

    オブジェクト、項目

    谷峻輔 · 89問 · 2年前

    オブジェクト、項目

    オブジェクト、項目

    89問 • 2年前
    谷峻輔

    アプリ、タブ

    アプリ、タブ

    谷峻輔 · 100問 · 2年前

    アプリ、タブ

    アプリ、タブ

    100問 • 2年前
    谷峻輔

    自動化

    自動化

    谷峻輔 · 18問 · 2年前

    自動化

    自動化

    18問 • 2年前
    谷峻輔

    組織、開発モデル

    組織、開発モデル

    谷峻輔 · 60問 · 2年前

    組織、開発モデル

    組織、開発モデル

    60問 • 2年前
    谷峻輔

    ボタン、アクション

    ボタン、アクション

    谷峻輔 · 69問 · 2年前

    ボタン、アクション

    ボタン、アクション

    69問 • 2年前
    谷峻輔

    インテグレーション

    インテグレーション

    谷峻輔 · 40問 · 2年前

    インテグレーション

    インテグレーション

    40問 • 2年前
    谷峻輔

    ページレイアウト、リストビュー、レコードタイプ、プロセス

    ページレイアウト、リストビュー、レコードタイプ、プロセス

    谷峻輔 · 44問 · 2年前

    ページレイアウト、リストビュー、レコードタイプ、プロセス

    ページレイアウト、リストビュー、レコードタイプ、プロセス

    44問 • 2年前
    谷峻輔

    標準オブジェクト

    標準オブジェクト

    谷峻輔 · 32問 · 2年前

    標準オブジェクト

    標準オブジェクト

    32問 • 2年前
    谷峻輔

    ServiceCloud

    ServiceCloud

    谷峻輔 · 17問 · 2年前

    ServiceCloud

    ServiceCloud

    17問 • 2年前
    谷峻輔

    ユーザ、ライセンス、プロファイル、権限セット

    ユーザ、ライセンス、プロファイル、権限セット

    谷峻輔 · 18問 · 2年前

    ユーザ、ライセンス、プロファイル、権限セット

    ユーザ、ライセンス、プロファイル、権限セット

    18問 • 2年前
    谷峻輔

    データインポート、エクスポート

    データインポート、エクスポート

    谷峻輔 · 11問 · 2年前

    データインポート、エクスポート

    データインポート、エクスポート

    11問 • 2年前
    谷峻輔

    Chatter

    Chatter

    谷峻輔 · 21問 · 2年前

    Chatter

    Chatter

    21問 • 2年前
    谷峻輔

    一時

    一時

    谷峻輔 · 89問 · 2年前

    一時

    一時

    89問 • 2年前
    谷峻輔

    一時2

    一時2

    谷峻輔 · 29問 · 2年前

    一時2

    一時2

    29問 • 2年前
    谷峻輔

    js9 ドキュメント

    js9 ドキュメント

    谷峻輔 · 80問 · 2年前

    js9 ドキュメント

    js9 ドキュメント

    80問 • 2年前
    谷峻輔

    問題一覧

  • 1

    Javaは⚪︎⚪︎上で、中間コードに変換されてから動作する 当てはまる言葉は? これはつまりどういう説明か?

    仮想マシン プラットフォームに依存しない。

  • 2

    Java SE(Java Platform, Standard Edition) Java EE(Java Platform, Enterprise Edition) Java ME(Java Platform, Micro Edition) どう違うか?

    Java SE Javaの基本となるエディション Java EE サーバーサイド開発のための企業向けエディション Java ME 組み込みシステムに利用されるエディション

  • 3

    JDK(Java Develpment Kit) とはなにか?

    Java開発環境 Javaアプリを実行するためのJava仮想マシンをはじめ、コンパイラーやデバッガーなどのツールを備えている

  • 4

    Javaプログラムの単位はなにか?

    クラス

  • 5

    パッケージの命名はどうするのがベストプラクティスか?

    命名に際しては、他のライブラリとの重複を避けるために、ドメイン名を逆にしたものを頭に付与するようにしてください。 mynavi.example.comなら 「com.example.mynavi」がパッケージとなる

  • 6

    Javaのメインメソッドとはなにか?

    mainというメソッドだけは特殊で、アプリの開始位置を表します。Javaはアプリを起動したときに、まずmainメソッドを探して、その配下のコードから実行するのです。このようなメソッドのことをエントリーポイントと言います。

  • 7

    Javaファイルとclassファイルは何が違うか?

    Javaのソースコードが.javaファイル コンパイルしたものが、.classファイル

  • 8

    Javaのコードをコンパイルする

    javac option src option:コマンドオプション src:ソースファイル(.javaファイル) 例 javac -d C:data -classpath .;C:data -encoding Windows-31J tojavacodesamplebasicHelloSample.java https://java-code.jp/55

  • 9

    コンパイルする際に必要なクラスファイルを探す先を指定するにはどうすればいいか?

    javac コマンドのオプションを指定 -classpath パス 関連するクラスファイルの検索先。複数指定時は、セミコロン(Windows)、またはコロン(Unix)区切り -classpathオプションは、そのソースをコンパイルするために必要なクラスファイル、またはJARファイルの場所(パス)を表すものです

  • 10

    コンパイル時に、クラスパスを毎回指定するのが面倒な時はどうするのがよいか?

    都度設定するのが面倒である場合には、環境変数CLASSPATHであらかじめ指定しておいても構いません。

  • 11

    Javaプログラムを実行するコマンドは?

    java option clazz params option:コマンドオプション clazz:実行するクラス params:パラメーター https://java-code.jp/53

  • 12

    jarファイルとはなにか?

    jarファイルはコンパイル済みのclassファイルや画像などのファイルを、zip形式に圧縮してまとめたファイル Javaでアプリケーションを配布する際には、JAR形式でまとめたものを配布するのが一般的です。

  • 13

    jarファイルを実行するコマンドは?

    javaコマンドのjar オプションを指定する たとえば以下は、Hello.jarを実行する例です。パラメーターとして「山田」をセットします。 > java -jar Hello.jar "山田"

  • 14

    jarファイルをjavaコマンドで実行するために予め何が必要か?

    jarファイルからアプリケーションを起動するには、 .jarファイルに以下のような内容のマニフェストファイル(/META-INF/MANIFEST.MF)を組み込んでおく必要があります。 Main-Classパラメータには、起動するクラスを指定します。 Main-Class: to.java.code.sample.basic.HelloSample

  • 15

    jarファイルを作成するコマンドは?

    jar option jfile clazz… option:コマンドオプション jfile:作成するjarファイルの名前 clazz:含めるクラスファイル(複数指定可) たとえば以下は、あらかじめ用意したクラスファイルとマニフェストファイル(MANIFEST.MF)をもとに、Hello.jarを作成する例です。 > jar cvfm Hello.jar to¥java¥code¥sample¥basic¥META-INF¥MANIFEST.MF to¥java¥code¥sample¥basic¥*.class https://java-code.jp/51 https://java-reference.com/command-jar/

  • 16

    javadocコマンドもはなにができるか?

    javadocコマンドは、ソースファイルに記述されたドキュメンテーションコメントからAPIドキュメントを作成します。 公式サイトで公開されているAPIドキュメントも、もともとはjavadocコマンドで作成されたものです。 APIドキュメントをHTMLで確認できる。 コマンド詳細 javadoc option src option:コマンドオプション src:ドキュメントのもととなるソースファイル https://java-code.jp/49 https://qiita.com/maple_syrup/items/96f7142222cd4eb5c9de

  • 17

    REPL とはなにか

    入力・評価・出力のループのこと。インタプリタにおいて、ユーザーとインタプリタが対話的にコード片を実行できるもの

  • 18

    対話式のシェル環境を起動するコマンドは?

    jshell option option:コマンドオプション Java 9で追加されています。 Java 9以前では、簡単なコードを利用するにもコンパイル&実行という手順を踏む必要がありましたが、JShellを利用することでその場で即座に実行できます。 https://java-code.jp/1272

  • 19

    以下を参考にしてjshellの特徴をあげよ PS C:\pleiades\java\13\bin> jshell | JShellへようこそ -- バージョン13.0.1 | 概要については、次を入力してください: /help intro jshell> import java.util.ArrayList; (①インポート) jshell> new ArrayList<String>(); (②リストを定義) $2 ==> [] jshell> $2.add("おはよう"); (③リストを操作) $3 ==> true jshell> $2.add("こんにちは"); $4 ==> true jshell> $2.get(0); $5 ==> "おはよう" jshell> /exit (④JShellを終了) | 終了します

    JShellのプロンプトは「jshell> 」です。ライブラリを利用する際には、普通のコードと同じくimport命令でクラスをインポートします(①)。 以降のコード(②~③)は、暗黙的にmainメソッド配下のコードと見なされます。また、変数の宣言も不要です。生成されたオブジェクトは、そのまま自動変数$1、$2…に順に代入されるからです。③でも②で生成したArrayListオブジェクトに変数$2経由でアクセスできています。 JShellを終了するには、/exitメタコマンドを利用します。

  • 20

    命名規則について 変数やメソッドを命名する場合は? クラス/インターフェイスは? 定数は?

    camelCase記法:先頭文字は小文字、単語の区切りは大文字(myNameなど) Pascal記法:先頭文字は大文字、単語の区切りも大文字(MyNameなど) アンダースコア記法:すべての文字は小文字、または大文字。単語の区切りはアンダースコア(MY_NAME、my_nameなど)

  • 21

    Javaの型推論とは?

    コンパイラが、初期値から型を推論すること。 つまり、データ型を指定しない変数宣言ができる。 package com.example.mynavi.basic;   public class VarBasic {   public static void main(String[] args) {     var num = 3.14;     System.out.println(num);    // 結果:3.14   } } 上の例であれば、変数の型は推論された結果は、doubleです。

  • 22

    javascriptなどと違う、JAVAの型推論の制限事項は4つあげよ?

    1 型推論によってコンパイラに定められた型は、変更不可能。 (スクリプトではないからしょうがない) 以下のようなコードはコンパイルエラーとなります。変数dataの型は、宣言時にdoubleで決まるので、これにString型の値を代入することはできません。 var data = 3.14; data = "Javaコード入門"; 2 初期値は省略不可 3 複数の変数を列挙できない var num1 = 1 , num2 = 2; 4 ローカル変数にしか使えない。 フィールド宣言では、初期値の有無に関わらず、varキーワードは利用できません。

  • 23

    変数の宣言について、同じ型が複数ある場合の省略記法は?

    カンマで区切る double num = 3.14, num2 = 1.414;

  • 24

    型推論はどのバージョンで利用可能か?

    Java10以降

  • 25

    定数の宣言のキーワードは?

    final public static void main(String[] args) { final String GREETING_MSG = "こんにちは、世界!"; System.out.println(GREETING_MSG); }

  • 26

    整数型の種類4つと説明をせよ

    byte バイトデータを示す型 1バイト符号付き整数(-128~127) short 2バイト符号付き整数(-32768~32767) int 4バイト符号付き整数(-2147483648~2147483647) long 8バイト符号付き整数(-9223372036854775808~9223372036854775807)

  • 27

    整数型の使用方針について説明せよ

    基本はint型を利用し、それで不足の場合のみlong型を利用してください。short型を利用する機会はほとんどありません。

  • 28

    整数型の接頭辞について、2進数、8進数、16進数の場合を、説明せよ

    二進数は0b、八進数は0、十六進数は0xを付与する int i2 = 010; // 8進数(0~) int i3 = 0xFF; // 16進数(0x~) int i4 = 0b0010; // 2進数(0b~。JavaSE 7以降)

  • 29

    数値リテラルでは、型を指定しなかった場合は何の整数型と見なされるか

    int型 System.out.println(21474);

  • 30

    数値リテラルの型を明示的に設定するには?

    「L」(long型)を値の末尾に付与してください。 System.out.println(2147483648L);

  • 31

    浮動小数点型について2種類、説明せよ

    float … 4バイト浮動小数点数(±1.40239846×10^-45~±3.40282347×10^38) double … 8バイト浮動小数点数       (±4.94065645841246544×10^-324~±1.79769313486231570×10^308)

  • 32

    floatとdoubleどちらを一般的に利用するか

    double

  • 33

    floatのリテラルはどうなるか?

    float値を表すには、リテラルのサフィックスとして「f」または「F」を指定してください。 float f = 1.1234f;

  • 34

    浮動小数点型で、指数表現するには?

    浮動小数点型では指数表現も利用できます。「1.234E5」は「1.234×10^5」の意味です。大文字小文字を区別しません。 double d1 = 1.1234; double d2 = 1.1234E5; // 指数表現

  • 35

    文字型について説明せよ

    char … UNICODE文字(u0000~uffff) リテラル値はシングルクォートで括ります。文字そのものを指定する他、uxxxxの形式で文字を表すこともできます。 char c1 = 'あ'; char c2 = '¥u5f01'; // 16進数の文字コード表現 ちなみに文字列型はクラスで基本型ではないとのこと

  • 36

    配列型はどうやって宣言するか2種類あげよ?

    int[] data = new int[5]; int[] data2 = { 1, 2, 3 };

  • 37

    多次元配列はどうやって宣言するか?

    int[][] data3 = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; System.out.println(data3[0][2]);

  • 38

    暗黙的な型キャストができないケースは?

    拡大変換可能だが縮小変換はそのままでは不可 基本型では、小さな型を大きな型に代入可能(たとえば、int型の値をlong型に代入) long型の値がint型に格納はできない

  • 39

    明示的に型キャストするには?

    「(型名)」を付与するだけ long l = 50; int i = (int)l; System.out.println(1+i);

  • 40

    クラスをキャストする際、キャスト変換可能かどうか調べるにはどうするか?

    instanceof演算子を利用する。 これは、オブジェクトが指定されたクラス、またはスーパークラスのインスタンスであるかを判定します。 クラス型のキャストにあたっては、あらかじめinstanceof演算子で実際の型を判定しておくことで、安全にキャストを実行できます。 Animal c = new Cat(); ※親の型でインスタンス可能! if (c instanceof Hamster) { Hamster h = (Hamster)c; } ※ハムスターもアニマル型を継承してると思うので、型変換可能

  • 41

    インクリメント、デクリメントについて前におくか後におくかちがいは?

    x++は代入した後にインクリメントしますが、++xは代入する前にインクリメントします。 int x = 1; int y = x++; System.out.println("yは" + y); // 結果:yは1 int a = 1; int b = ++a; System.out.println("bは" + b); // 結果:bは2

  • 42

    浮動小数点数の演算に関する懸念点をあげよ

    浮動小数点数は内部的に二進数で演算されてしまう。 例えば10進数の0.1ですら、2進数では0.000110011…のような無限循環小数となってしまう。 つまり計算に不向き。 System.out.println(1.0 - 0.1 - 0.2 - 0.3); // 結果:0.39999999999999997 といった感じになる。

  • 43

    厳密な小数点の計算をするには?

    厳密な結果を得る場合には、BigDecimalというクラスを利用してください BigDecimal bd1 = new BigDecimal("1.0"); BigDecimal bd2 = new BigDecimal("0.1"); BigDecimal bd3 = new BigDecimal("0.2"); BigDecimal bd4 = new BigDecimal("0.3"); System.out.println(bd1.subtract(bd2).subtract(bd3).subtract(bd4)); // 結果:0.4 だいぶめんどい subtractメソッドが減算を意味します。その他、add(加算)、multiply(積算)、divide(除算)などを利用できます

  • 44

    +演算子は 文字列がオペランドに含まれるとどうなるか?

    文字列連結演算子になる。 System.out.println("x" + 1); // 結果:x1 System.out.println(1 + "x"); // 結果:1x System.out.println("2" + 1); // 結果:21 代入

  • 45

    Javaのデータ型は何に分類されるか?

    基本型、参照型

  • 46

    Javaの渡しの戦略は?

    基本型は値渡し 参照型は参照の値渡し javascriptとおなじ https://yoshitaro-yoyo.hatenablog.com/entry/only_value_passing_in_java#Java%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E5%8F%82%E7%85%A7%E5%9E%8B ちなみに参照渡しとは 実引数と仮引数が完全に同じ実体を表すように引数を受け渡すこと 再代入すると、参照の変更が行われるのが参照渡し、そのまま再代入されるのが参照の値渡しということらしい

  • 47

    Javaの==演算子について説明せよ

    正しくは同一性(Identity)――同じモノであるかを確認するための演算子 基本型では、値が等しければ同じものであるので問題ありません。 しかし、参照型では同じ値であっても、同じものであるとは限りません。たまたま同じ値を持っているだけで、異なる場所に格納されている異なるものである可能性があるからです。 つまり、厳密な等価演算子である。

  • 48

    参照型における、同値性を確認する方法はなにか?

    参照型を比較するには、同値性(Equivalence)を確認するためのequalsメソッドを利用してください。 System.out.println(Arrays.equals(data1, data2));

  • 49

    単一コメント 複数行コメント Javadocコメント は?

    // 単一行コメントです。 /* 複数行の コメントです。 */ /** * javadocコマンドでドキュメント化されるコメントです。 */

  • 50

    switch式について説明せよ

    Java12以降に追加された。 まだプレビュー状態らしい (1)switch式 switchが式として表現できます。つまり、文の中でswitch命令を記述できます。なお、switch式では値を返さないパターンがあってはいけないので、default句は省略不可です。 (2)アロー演算子 case/default句を「値 -> 対応する式」の形式で表せます。アロー演算子では、句の末尾のbreak命令は不要となります。 (3)case値の複数列記 case句に、カンマ区切りで値を列記できます。従来のようにcase句そのものを列記する必要はありません。 String lang = "Ruby"; @SuppressWarnings("preview") String category = switch(lang) { case "PHP", "Python", "Ruby" -> "スクリプト言語"; case "Java", "C#", "C" -> "プログラミング言語"; default -> "不明"; }; System.out.println(category); // 結果:スクリプト言語 また、Preview版を利用する場合は、@SuppressWarningsアノテーションでPreviewに対する警告を無効化しておきましょう

  • 51

    代入演算子の結果は戻り値があるか?

    ある 多重代入可能 a = b = c = 10; つまり文中で代入できるってことね

  • 52

    Javaにはカンマ演算子があるか?

    ある。 int a = 1, b = 2; for文でもつかえる。 for(int i = 0, j = 10; i < 5; i++, j++) { System.out.println(i * j); }

  • 53

    入れ子になったループに対してbreakすると一つ親のブロックを抜け出すだけだが、 もう一つ親のブロックを含めて抜け出すにはどうするか?

    ラベル構文を利用することで、入れ子になったループをまとめて脱出することもできます。 ラベルは脱出したいループの先頭に付与します(この場合は「ext」) public static void main(String[] args) { ext : for (int i = 1; i < 10; i++) { for (int j = 1; j < 10; j++) { if (i * j > 50) { break ext; } System.out.print((i * j) + "/"); } System.out.println(); } }

  • 54

    定数は実際どのように基準するか?

    クラス直下にたいして フィールド宣言の頭にstatic final修飾子を付与することで宣言できます public static final double E = 2.7182818284590452354; public static final double PI = 3.14159265358979323846; 定数であることはfinal修飾子だけで表現できますが、static修飾子を付けるのがお作法です。static修飾子を付与することで、インスタンス生成のたびに同じ値をインスタンスにコピーするのを防ぐことができます

  • 55

    メソッドで、可変長引数を利用するにはどうするか?

    型名のうしろに「…」を付与することで、可変長引数を表す 可変長引数とは呼び出し側で自由に引数の数を変えられる引数のこと package com.example.mynavi.object; public class Util { public static double sum(double... values) { double result = 0; for (double value : values) { result += value; } return result; } } 呼び出し方はこう System.out.println(Util.sum(10, 30, 50)); // 結果:90.0 System.out.println(Util.sum(10, 30, 50, 70)); // 結果:160.0

  • 56

    可変長引数をメソッドに定義した際、そのメソッドではどのように扱われるか

    可変長引数は、内部的には配列として処理されます。前問題のサンプルでは引数valuesを拡張for命令で順に取り出し、順に足しこんでいるわけです。

  • 57

    オーバーロードとは

    同じ名前で、引数の型、並びだけが異なる」メソッドを複数定義すること public String getInfo() { return this.getInfo("%sは%s色のハムスターです。"); } public String getInfo(String format) { return String.format(format, this.name, this.color); }

  • 58

    コンストラクタが明示されない場合、どうなるか?

    デフォルトコンストラクター コンストラクターが明示的に定義されなかった場合、Javaは引数なしの空のコンストラクターを暗黙的に生成します。これをデフォルトコンストラクターと言います。

  • 59

    Javaの初期化ブロックとはなにか?

    コンストラクターによく似たしくみ 初期化ブロックは、classブロック直下で名前なしのブロック({…})として表します。 public class Animal { String name; String color; { this.name = 'ニンザブロウ'; this.color = 'White'; } } 記法そのものはシンプルですが、コンストラクターに比べると、引数を渡すことすらできませんので、自由度もあまりありません。

  • 60

    初期化ブロックの使用用途は?

    一般的には、オブジェクトの初期化にはコンストラクターを利用し、コンストラクターを複数定義(オーバーロード)した場合に、重複してしまった処理だけを初期化ブロックとして切り出す、という使い方になるでしょう。

  • 61

    完全修飾名とはなにか

    パッケージを含めたクラス名のこと

  • 62

    パッケージをインポートする利点とはなにか

    本来、クラスを一意に特定するためには、完全修飾名で記述しなければなりません。しかし、to.java.code.sample.basic.Animalのような名前を毎回記述するのは面倒です。 そこで、あらかじめ利用するパッケージをインポート(import)しておくことで、コード内ではパッケージを省略して記述できるようになります。 import com.example.mynavi.object.Animal; Animal a = new Animal(); ↓ com.example.mynavi.object.Animal a = new com.example.mynavi.objectAnimal();

  • 63

    オンデマンドインポートとは?

    パッケージ配下のすべてのクラスをまとめてインポートしたいときにアスタリスクでインポートするやり方 import com.example.mynavi.object.*; ただし、近年ではコード内で利用しているクラスを明確にするという意味で、できるだけオンデマンドインポートは利用しないのが慣例的です。

  • 64

    暗黙的にインポートされるパッケージはなにか?

    java.langパッケージは、頻繁に利用するという性質上、自動的にインポートされます。明示的にimport宣言する必要はありません。

  • 65

    クラスのメンバーをインポートしたい場合はどうするか?

    import static命令を利用することで、クラスのメンバーを呼び出すこともできます。 以下はabsメソッドをインポートしている package com.example.mynavi.object; import static java.lang.Math.*; public class ClassStaticImport { public static void main(String[] args) { System.out.println(abs(-10)); // 結果:10 } } import static java.lang.Math.abs でも可能

  • 66

    staticな内部クラスから外部クラスのインスタンスフィールド変数にアクセス可能か?

    できない。 staticな内部クラスは外部クラスのstaticなメンバーにのみアクセス可能なので、外部クラスのメンバーとの関係性は比較的薄くなり、通常の別のクラスとして宣言した場合に近くなります。

  • 67

    非staticな内部クラスの留意点は?

    非staticな内部クラスは、インスタンス化に際して外部クラスのオブジェクトへの参照を保持するためにメモリーを消費すること。 また、この参照によって外部クラスのオブジェクトの破棄が妨げられることもあります。 なるほど、ガベージコレクションが働かなくなる可能性があるらしい 非staticな内部クラスを利用するのは、外部クラスのオブジェクトのインスタンスフィールドにアクセスしなければならない状況に限定すべきです。 // 外部クラス class OuterClass { private String str = "OuterClassの変数"; // 内部クラス class InnerClass { public void innerSample() { System.out.println(str); } } } public class Main { public static void main(String[] args) { // 外部クラスのインスタンスの生成 OuterClass oc = new OuterClass(); // 外部クラスのオブジェクトから内部クラスのインスタンスを生成 OuterClass.InnerClass ic = oc.new InnerClass(); ic.innerSample(); } }

  • 68

    内部クラスはどのような用途で使用されるか?

    外部クラスへのアクセス権をもつ静的クラス、またはオブジェクトを生成をしたいとき。 継承するほどでもない時に利用する

  • 69

    モジュールとはなにか?

    Java9で導入された。 パッケージを束ねる機能で、モジュール内のパッケージのアクセス権を以下のように制御するということができる。 モジュール内のパッケージに対して ・現在のモジュールの中でだけpublic ・特定のモジュールに対してだけpublic ・すべてのモジュールに対してpublic が設定できるようになる。

  • 70

    モジュールの利用用途は?

    あるライブラリの中で利用しているパッケージのアクセス権を制御し、メインのプログラムからは不可視とすることができる。 従来のJavaでは 全てに対してpublicとなるため この制御ができなかった

  • 71

    標準ライブラリはJava9以降どうなったか?

    モジュール化された。 > java –-list-modules java.base@13.0.1 java.compiler@13.0.1 java.datatransfer@13.0.1 java.desktop@13.0.1 java.instrument@13.0.1 java.logging@13.0.1 java.management@13.0.1 java.management.rmi@13.0.1 java.naming@13.0.1 java.net.http@13.0.1 …中略… jdk.rmic@13.0.1 jdk.scripting.nashorn@13.0.1 jdk.scripting.nashorn.shell@13.0.1 jdk.sctp@13.0.1 jdk.security.auth@13.0.1 jdk.security.jgss@13.0.1 jdk.unsupported@13.0.1 jdk.unsupported.desktop@13.0.1 jdk.xml.dom@13.0.1 jdk.zipfs@13.0.1

  • 72

    モジュールの作成方法は?

    モジュール用のディレクトリを作成し、そのディレクトリにmodule-info.javaというファイルを作り、その他のソースファイルと共にコンパイルする。 module-info.javaには、以下の2点を記述する。 ・どのパッケージを公開するのか ・ほかのどのモジュールを使うのか module test { exports com.test; //exports パッケージ名 requires foo; //requires モジュール名 } 下記のような構成となる。 jp.mynavi.greeting/ └── src ├── jp │ └── mynavi │ └── imajava │ ├── hidden │ │ └── HiddenGreeting.java │ └── mylib │ └── Greeting.java └── module-info.java Greeting.java package jp.mynavi.imajava.mylib; public class Greeting { public static String hello(String name) { return "Hello " + name + "!"; } }

  • 73

    そのモジュールが依存する外部モジュールを記載するにはどうするか?

    モジュールの世界では、デフォルトでは異なるモジュールにはアクセスできません 別のモジュールを利用したい場合には、モジュール定義ファイルにrequires宣言を追加してください。たとえば以下は、java.net.httpモジュールを利用する例です。 module-info.java module mynavi { requires java.net.http; } requires宣言なしにjava.net.httpモジュールにアクセスした場合、「The type java.net.http.HttpClient is not accessible」のようなエラーとなります。

  • 74

    Java.baseモジュールを利用する際はrequires 宣言が必要か?

    別のモジュールであるにも関わらず、 requires宣言をしなくても、アクセスできる特別なモジュールとしてjava.baseモジュールがある

  • 75

    モジュールで、親の親のモジュールを利用したい場合、 宣言しなくても使えるようにするには、親モジュールでどう定義されてる必要があるか?

    requires宣言では、そのモジュールが利用可能なモジュールしか宣言できない。 requires transitive宣言では、自モジュールがrequiresされた際、requires transitiveされたモジュールへのアクセス権を宣言元モジュールに引き継ぎができる。 →mod1モジュールは、java.net.http やjava.sqlモジュールが利用できる。 module mod1 { requires mod2; } module mod2 { requires transitive java.net.http; requires transitive java.sql; } この場合、mod1モジュールはmod2モジュール経由でjava.net.http/java.sqlモジュールに依存していますが、mod1側でこれらのモジュールをrequires宣言する必要はありません。 これが推移的な依存関係を宣言する、という意味です(よって、太字を削除した場合、mod1モジュールはjava.net.http/java.sqlモジュールを明示的にrequires宣言しなければなりません)。

  • 76

    モジュール配下のパッケージを非公開にするにはどうするか?

    モジュールに束ねられたパッケージは 非公開となるので、記述は不要

  • 77

    モジュール配下のパッケージを公開するにはどうするか?

    モジュール配下のパッケージは、デフォルトでモジュールプライベート(=モジュールの外からはアクセスできない)と見なされます。 モジュールの外からパッケージへのアクセスを許可するには、exportsで公開したいパッケージを宣言してください。 たとえば以下はmynaviモジュールからcom.example.mynavi.basicパッケージを公開する例です。 module mynavi { exports com.example.mynavi.basic; }

  • 78

    特定のモジュールのみにしかパッケージを公開したくないときはどうするか?

    特定のモジュールに対してのみパッケージを公開したいならば、exports…to宣言を利用します。たとえば、以下はhoge/piyoモジュールに対してのみcom.example.mynavi.basicパッケージを公開する例です。 module mynavi { exports com.example.mynavi.basic to hoge, piyo; }

  • 79

    モジュールをコンパイルするにはどうするか?

    モジュール化するには、module-info.javaとソースファイルをコンパイルするファイルのパスとして、コンパイルする。コンパイル時には、javacコマンドの-dオプションを使う <構文> javac -d クラスファイルの出力先ディレクトリ コンパイルするファイルのパス <例> javac -d mods/test src/test/module-info.java src/test/com/sample/Main.java

  • 80

    モジュールを実行するにはどうするか?

    モジュールの実行には、javaコマンドの--module-pathオプションでモジュールを探すためのモジュールパスを指定し、-mオプションで実行したいモジュールのクラスを指定する。   <構文> java --module-path モジュールのルートディレクトリ -m 実行したいモジュールのクラス <例> java --module-path mods -m test/com.sample.Main //testモジュールのcom.sample.Mainクラスを実行

  • 81

    モジュールをJarファイルにまとめるには?

    モジュールはjarコマンドで1つにまとめることができる。 <構文> jar --create --file=jarファイル名 --main-class=エントリーポイントを持つクラス -C jarファイルに含めるファイルがあるディレクトリ <例> jar --create --file=mlib/test.jar --main-class=com.sample.Main -C mods/test

  • 82

    モジュールパスとはなにか?

    モジュールパスとは、モジュールの検索先を表すパスのことです。Eclipseであれば、プロジェクトのプロパティから[Javaのビルド・パス]-[ライブラリー]タブから確認できます。

  • 83

    自動モジュールとはなにか?

    非モジュールをモジュールとして扱えるようにするためのしくみが、自動モジュールです。 具体的には、モジュールパスに配置された.jarファイルで、モジュール定義ファイルを持たないコードは、自動モジュールと見なされます。