見出し画像

08/14 Java Silver SE

■参考書

■第1章 簡単なJavaプログラムの作成

 現在、Java Bronzeを学習しているが、目指しているレベルがSilverのため同時進行で学習を行っている。BronzeとSilverの問題集の章を比較してみたが各分野ごと更に深い内容に触れるが流れがほぼ同じに見えるため同じ章を同時に学習するようにしている。

黒本 目次比較

■第1章 問題数 8問

 問題数 8問
目標速度 各問*30秒(読解力と速度を両立することを意識)
名目速度 各問*135秒(2分15秒)(本試験、180分/80問から算出)
解答時間 7.85分/18.0分
 正答率 2/8

■1周目

Bronze及びSilverにおける第1章の出題テーマ

 重複した問題はmainメソッドの1問のみ。せかチャンの第1章では出てなかったなと思い、受講中の入門書を見ると後半のオブジェクト指向についての章で触れられている内容だった。
 前提条件として入門書を終えた初学者レベルのBronze取得者を想定しているので入門レベルの土台がある状態で解く方が効率は良いだろう。
 どのみち勉強するので、このまま解説を読んで学習しようと思う。

■学習内容

01.パッケージの目的は3つ(パッケージに属さないクラスは存在しない)
 ①空間の提供 → 名前の衝突を防止
 →パッケージ名.クラス名.の完全修飾クラス名
 ②アクセス制御機能の提供
 →③の非公開クラスは他のパッケージからはアクセスできない
 ③公開・非公開のクラス分類を可能にする
 →public class xxx / class zzzで公開するクラスと非公開にするクラスに分類

02.パッケージ宣言のルールは2つ(パッケージ宣言は{}でブロックを作らない)
 ①必ずソースコードの先頭行に記述する
 →パーッケージ宣言前のコード記述はコンパイルエラーの元
 ②パッケージ宣言前に記述できるのはコメントのみ

03.クラスのインポートの特徴
 ①外部パッケージから読み込む完全修飾クラス名を省略する
 →冗長的なソースコードの省略化
 ②インポート宣言が省略可能な基本的パッケージもある
 →基本的なクラスがまとめられたパッケージは頻繁に利用するため
 例.java.langパッケージ
 ③指定したパッケージに属するすべてのクラスをインポートできる
 →アスタリスク「*」を入力することで可能
※ただし、「util」のサブパッケージに属するクラスはインポートされない

import java util.*;

04.パッケージとクラスのアクセス制御
問題文に承継(extends)の知識が必要なコードあり
 無名パッケージに属するクラスの特徴
 ①同じ無名パッケージに属するクラスからしかアクセスできない
 ②明示的にパッケージ宣言したクラスからはアクセスできない
 ③②のコードはコンパイルエラーになる

05.mainメソッドの特徴(クラスには複数のメソッドを定義できる)
 エントリーポイント(初めに開始するメソッド)の命名規則は5つ
 ①公開されている(public)
 ②インスタンスを生成しなくても実行できる(static)
 ③戻り値は戻せない(void)
 ④メソッド名はmain(main)
 ⑤引数はString配列型を1つ受け取る(String)
 ※上記のルールが反映されて以下のコードになる
上段:String配列型(定型)
下段:可変長引数のString型(可変長の引数の場合)

public static void main(String[] args){
 // 命令文
}

public static void main(String... args){
 // 命令文
}

06.javaコマンド(JVMを起動するため)の実行
 動作の流れ
 ①JVMを起動する
 ②指定されたクラスをクラスパスから探し出してロード
 ③String配列型オブジェクトを作成、起動パラメータを格納
 ④起動パラメータを保持したString配列型オブジェクトへの参照を引数に渡す
 ⑤mainメソッドを実行
 以下がjavaコマンドの構文

java 完全修飾クラス名 [引数1 引数2 …]
例.java Main one two
public class Main {
    public static void Main(String[] args){
        System.out.println(args[0] + " " + args[1]);
    }
}

例.
args[0]は引数1"one"、
args[1]が引数2"two"、
二つの引数の間に" "(スペース)、
を挟んで表示しなさいという命令
引数1 引数2
例.one two

07.javaコマンドが実行する3つ
 ①mainメソッドを持つクラスファイル
 ②jarファイル内のメインクラス
 ③モジュールに含まれるメインクラス

従来のコンパイルするためのjavaコマンド

javac Main.java

Java SE11から導入されたソースファイルモード

java Main.java

コンパイル後のクラスファイルがどのような中間コードに変換されたかを調べるためのjavaコマンド

javap Main

モジュール構造を調べるためのjavaコマンド

jmod Main.java

08.起動パラメータの指定のルールとして3つのポイント
 ①スペースが区切り記号として扱われる
 →「a \" a\" "a "b c」は文字列5つ
 ②スペースを含む文字列はダブルクォーテーションで括ると1つ扱い
 →”a ”は「a」とスペースの2文字で1つの文字列
 ③ダブルクォーテーション自体は文字として扱われない
 →文字として扱う場合はエスケープ文字「¥」を前につける「¥"」

java Sample a \" a\" "a "b c //Sampleクラスに引数を渡している
public class Sample{
	public static void main(String... args){
		System.out.println(args.length); // 引数の数を出力する命令
	}
}
java Sample a \" a\" "a "b c 
5
//上記引数の数は5つ


■学習時間

21:51-24:59 (実質3時間)
第1章 1~28P 3時間 

■学習内容

1.黒本 解答 7.85分
2.黒本 解説及びまとめ 180分 
合計 約3時間

■振り返り

Bronzeでも実感したが、黒本ベースで知識を増やす、理解を固める方がよいと感じた。入門講義を何かしら受けていたり、書籍で独学しているのであれば、解答→アウトプット→解答解説→ググる→インプットの繰り返しの方が時間効率は良いように感じた。ただ入門書を1冊通していない場合はまずBronzeを一通り通してからSilverを解いた方がよい。後半の学習内容が第1章から出るため、調べる工数が増える。

今後の方針
まず、Bronzeを1周させる。それからもう一度Silverを始める。

▼第1章
1.まずコードをリバースエンジニアリングで読解する。Google、chatGPT
を積極的に使う。学習効率を上げるためのツールの使い方を洗練させる。

2.サンプルコードはないため、自身でとにかく手を動かして実際にコードを動かすと理解が進む。

3.各問のテーマと質問の傾向をDB化する。
(1)テーマは何か?(命題)
(2)何を問われているか?(趣旨)
(3)(1)~(2)をまとめる流れで知識を体系化するように意識する。

この記事が気に入ったらサポートをしてみませんか?