概要
本書では,プログラミングを仕事にしたい,エンジニアとして働きたい方,およびほかの言語で開発しているがJavaも使えるようになりたいという方を対象に,Javaでプログラミングができるようになるための解説をわかりやすく丁寧に行います。
Javaは,企業システムの構築を得意とするプログラミング言語で,銀行でお金を振り込む,宅配便で荷物を送るといった業務システムで多く使われているほか,検索サイトやSNS,買い物サイトなどサービスの構築でも広く使われています。多くの業務システムで利用されており,Javaプログラマーの人材募集も多いことから,Javaエンジニアになりたい人も比較的多いという状況があります。本書では,そうした中でプロとしてJava開発に携われるようになるために必要なプログラミングの知識をゼロから解説しています。Javaをすでに使っているがもっとプログラムをきちんと書けるようになりたいという人にもおすすめです。
多くの「プログラミングの入門書」では,プログラミング言語の構文は丁寧に解説されていますが,プログラムの書き方の説明はあまりありません。本書ではJavaを対象として,プログラミングに入門できるように解説しています。プログラムを作るという体験を通して,プログラムが動くことの楽しさやまた難しさを感じてもらえることを目標としています。自転車に乗れるようになるために何が必要かというと,自転車のパーツの名前や働き,原理を知ることではありません。自転車に実際に乗って,何度かこけそうになったりこけたりして,徐々にうまく乗ることができるようになるものです。プログラミングも技能なので,文法を覚えてライブラリの使い方を知るだけではプログラムが組めるようにはなりません。実際にプログラムを組んで,動かなかったり動いたりしながら徐々にうまくプログラムが組めるようになります。本書ではこうしたプログラムの組み方をわかりやすく解説します。
本書では,第1部「Javaを始める準備」では,Javaの基本および開発環境のインストール方法について解説します。第2部「Javaの基本」では,JShellを使って基本的な計算や変数,標準API,GUI開発について解説します。第3部「Javaの文法」では,条件分岐と繰り返し,データ構造,メソッドについて解説します。第4部「高度なプログラミング」では,ファイルやネットワークでの入出力と例外,処理の難しさ,クラスとインタフェースを使ったプログラムの構成について解説します。第5部「ツールと開発技法」では,Maven,Javadoc,JUnit,IDE,バージョン管理,Gitについて解説します。第6部「Webアプリケーション開発」では,Spring Bootやデータベースを用いたWebアプリケーション開発について解説します。
本書で,プロとして仕事ができるためのJavaの基礎をしっかりと習得していきましょう。
こんな方におすすめ
- 開発現場で使えるJava開発のノウハウを身に付けたい方
- Javaによる開発を業務で行っている方
サポート
補足情報
練習問題の解答について
(2022年7月15日更新)
本書に掲載している「練習問題」の解答を下記にて掲載します。
正誤表
本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。
P.31:「最初のプログラムを書いてみよう」の前に下記を追加
Touch Barを搭載していないキーボードを使っている場合は,fnキーを押さずにファンクションキーを使えるよう,「キーボード」→「キーボード」→「F1,F2などのキーを標準のファンクションキーとして使用」にチェックを入れることを検討してください(図2.42)。これにチェックが入っていない場合,ファンクションキーを押す操作を行う場合はfnキーを押すことを覚えておいてください。
▼図2.42 fnキーを押さなくてもファンクションキーを使えるようにする設定
P.32:「プロジェクト形式の選択」
最新版のIntelliJ IDEAでは新規プロジェクトのダイアログのデザインが少し異なっています。
紙面のスクリーンショットを参考にすると,「Maven Archtype」を選んでしまいがちですが,下記のように一番上の「新規プロジェクト」を選択してください。
P.458:■application. propertiesファイルに設定を追加
誤 |
spring.datasource.initialization-mode=always
|
正 |
spring.sql.init.mode=always
|
※spring.datasource.initialization-modeは最新版では廃止されました。
訂正情報
※電子版では修正済み
P.18:コラム8行目
誤 |
再び用途を問わず無償で |
正 |
再びデスクトップ用途では無償で |
P.59:本文6行目
「、戻り値の種類」は不要です。
P.136:「7.2.3 else if」
誤 |
下部のソースコードの上にキャプションを追加 |
正 |
src/main/java/projava/IfSample.java |
P.168:練習
この練習問題は削除します。
P.205:「基本のStream処理」本文3行目
P.313:1行目のソースコード
誤 |
System.out.println("こんにちは%sさん".formatted(p.getName()));
|
正 |
System.out.println("こんにちは%sさん".formatted(p.getName()));
System.out.println(p);
|
P.313:本文1行目
誤 |
実行すると、インタフェースのときと同じく次のように表示されます。 |
正 |
実行すると、次のように表示されます。 |
「インタフェースのときと同じく」は不要です。
P.313:実行結果
誤 |
|
正 |
こんにちはkisさん
projava.InheritSample$Student@3c153a1
こんにちはhosoyaさん
projava.InheritSample$Teacher@b62fe6d |
P.315:ソースコード
誤 |
System.out.println("こんにちは%sさん".formatted(p.getName()));
|
正 |
System.out.println("こんにちは%sさん".formatted(p.getName()));
System.out.println(p);
|
P.318:「15.1.4 メソッドのオーバーライド」本文1〜2行目
誤 |
projava.InheritSample$Student@27d6c5e0 のような表示
|
正 |
projava.InheritSample$Student@3c153a1 のような表示
|
P.367:最終行のソースコード
誤 |
assertEquals(6, new Calc().add(2, 4), "2 + 4 = 8");
|
正 |
assertEquals(6, new Calc().add(2, 4), "2 + 4 = 6");
|
P.368:図18.7 ● テストが失敗した状態
正 |
|
P.421:図21.6 ● Spring Initializr
正 |
|
P.421:表21.1 ● タスク管理アプリケーション用の設定 Spring Bootの行
誤 |
2.6.3、または「SNAPSHOT」や「M1」などが付いていない最新バージョン |
正 |
2.6.3 |
「、または「SNAPSHOT」や「M1」などが付いていない最新バージョン」は不要です。
P.421:表21.1 ● タスク管理アプリケーション用の設定 Dependenciesの行
誤 |
Spring Web |
正 |
ADD DEPENDENCIES…を押してSpring Webを追加 |
P.437:本文7〜8行目
誤 |
メソッドと同様の理由でインスタンス変数として |
正 |
メソッドと同様の理由でstatic変数ではなくインスタンス変数として |
P.439:「21.4.3 タスクを一覧表示するエンドポイントの作成」本文 下から6行目
誤 |
addTask メソッドと同様に |
正 |
addItem メソッドと同様に |
P.458:■ application.propertiesファイルに設定を追加 最終行
誤 |
spring.datasource.initialization-mode=always
|
正 |
spring.sql.init.mode=always
※バージョン2.4.x以前では「spring.datasource.initialization-mode=always」
|
P.459:表22.1 ● application.propertiesファイルの設定項目 項目名「spring.datasource.initialization-mode」
誤 |
spring.datasource.initialization-mode
|
正 |
※バージョン2.4.x以前では「spring.datasource.initialization-mode」 |
P.459:本文最終行
誤 |
spring.datasource.initialization-modeについては後ほど説明します。 |
正 |
spring.sql.init.mode※については後ほど説明します。
※バージョン2.4.x以前では「spring.datasource.initialization-mode」 |
P.470:「22.3.3 テーブル初期化用のスクリプトを用意する」本文3行目
誤 |
spring.datasource.initialization-mode プロパティの値 |
正 |
spring.sql.init.mode※ プロパティの値
※バージョン2.4.x以前では「spring.datasource.initialization-mode」 |
P.v:本文6行目
誤 |
設定によっては「\」が「¥」が |
正 |
設定によっては「\」が「¥」 |
「が」が不要です。
P.4:本文下から4行目
誤 |
Java Development Environment |
正 |
Java Development Kit |
P.21:本文3行目
「0」が不要です。
P.21:本文4行目
「0」が不要です。
P.28:最下部「MEMO」欄
誤 |
この本では、以降の解説は日本語化を行った状態のIntelliJIDEAの画面で行っていますが、英語表記で困らない方、またはスキルアップのため英語に慣れたい方は是非英語のままで利用してみてください。 |
正 |
この本では、以降は日本語化を行った状態のIntelliJ IDEAの画面を掲載しています。英語表記で困らない方や、スキルアップのため英語に慣れたい方は是非英語のままで利用してみてください。
一周目を日本語で演習し、二周目は英語で演習することで英語に慣れていく方法もお勧めです。 |
P.32:本文下から6行目
誤 |
Software Development Tool |
正 |
Software Development Kit |
P.88:「練習3.」
誤 |
String.formatted("%tY年", today)を |
正 |
String.format("%tY年", today)を |
P.153:本文4行目
誤 |
student ==> [kis, math, 80]
|
正 |
|
P.177:本文10行目
誤 |
System.out.print("o".repeat(i));
|
正 |
System.out.print("O".repeat(i));
|
P.188:src/main/java/projava/ForEachListSample.java 2行目
誤 |
package projava;
public class ForEachListSample {
|
正 |
package projava;
import java.util.List;
public class ForEachListSample {
|
P.236:実行結果
P.272:図13.1キャプション
P.309:「14.3.3 コメント」前のパラグラフ
誤 |
このときIntelliJ IDEAのリファクタリング機能が使えます。リファクタリング機能については、第19章「IntelliJ IDEAを使いこなす」で説明します。クラスが多くなってきたらパッケージに分類します。何度か経験すると、最初からある程度の目安がつくでしょう。 |
正 |
クラスが多くなってきたらパッケージに分類します。何度か経験すると、最初からある程度の目安がつくでしょう。IntelliJ IDEAでは[Ctrl] + [Alt] + [Shift] + [T]([Ctrl] + [T])を押すと、このような構成の変更を行う「リファクタリング」機能を呼びだすことができます。 |
P.320:図15.7キャプション
誤 |
インスタンス化できない |
正 |
インスタンス化できないことを示すエラー |
P.325:src/main/java/projava/DiffSampleInherit.java P.325の17行目,19行目
誤 |
var image = new BufferedImage(600, 400, BufferedImage.TYPE_INT_RGB);
var graphics = image.createGraphics();
graphics.drawLine(10, 10, 400, 300);
|
正 |
var image = new BufferedImage(250, 200, BufferedImage.TYPE_INT_RGB);
var graphics = image.createGraphics();
graphics.drawLine(10, 10, 220, 180);
|
P.325:src/main/java/projava/DiffSampleInherit.java P325の23行目、25行目
誤 |
var image = new BufferedImage(600, 400, BufferedImage.TYPE_INT_RGB);
var graphics = image.createGraphics();
graphics.drawRect(10, 10, 400, 300);
|
正 |
var image = new BufferedImage(250, 200, BufferedImage.TYPE_INT_RGB);
var graphics = image.createGraphics();
graphics.drawRect(10, 10, 220, 180);
|
P.326:グレー背景箇所の1行目,3行目
誤 |
var image = new BufferedImage(600, 400, BufferedImage.TYPE_INT_RGB);
var graphics = image.createGraphics();
graphics.drawLine(10, 10, 400, 300); // ここだけ違う
|
正 |
var image = new BufferedImage(250, 200, BufferedImage.TYPE_INT_RGB);
var graphics = image.createGraphics();
graphics.drawLine(10, 10, 220, 180); // ここだけ違う
|
P.326:■src/main/java/projava/DiffSampleInherit.java(1つめ)
誤 |
var image = new BufferedImage(600, 400, BufferedImage.TYPE_INT_RGB);
|
正 |
var image = new BufferedImage(250, 200, BufferedImage.TYPE_INT_RGB);
|
P.326:■src/main/java/projava/DiffSampleInherit.java(2つめ)
誤 |
g.drawLine(10, 10, 400, 300);
|
正 |
g.drawLine(10, 10, 220, 180);
|
P.327:■src/main/java/projava/DiffSampleInherit.ja(1つめ)
誤 |
BufferedImage lineImage() {
|
正 |
static BufferedImage lineImage() {
|
P.327:■src/main/java/projava/DiffSampleInherit.ja(2つめ)
誤 |
g.drawRect(10, 10, 400, 300);
|
正 |
g.drawRect(10, 10, 220, 180);
|
P.327:■src/main/java/projava/DiffSampleInherit.ja(2つめ)
誤 |
BufferedImage rectImage() {
|
正 |
static BufferedImage rectImage() {
|
P.327:■src/main/java/projava/DiffSampleInherit.ja(3つめ)
誤 |
BufferedImage lineImage() {
|
正 |
static BufferedImage lineImage() {
|
P.327:■src/main/java/projava/DiffSampleInherit.ja(3つめ)
誤 |
g.drawLine(10, 10, 400, 300);
|
正 |
g.drawLine(10, 10, 220, 180);
|
P.328:■src/main/java/projava/DiffSampleInherit.java(1つめ)
誤 |
var image = new BufferedImage(600, 400, BufferedImage.TYPE_INT_RGB);
|
正 |
var image = new BufferedImage(250, 200, BufferedImage.TYPE_INT_RGB);
|
P.328:■src/main/java/projava/DiffSampleInherit.java(2つめ)
誤 |
BufferedImage lineImage() {
|
正 |
static BufferedImage lineImage() {
|
P.328:■src/main/java/projava/DiffSampleInherit.java(2つめ)
誤 |
g.drawLine(10, 10, 400, 300);
|
正 |
g.drawLine(10, 10, 220, 180);
|
P.329:■src/main/java/projava/DiffSampleInherit.java(1つめ)
誤 |
BufferedImage lineImage() {
|
正 |
static BufferedImage lineImage() {
|
P.331:■src/main/java/projava/DiffSampleInherit.java(2つめ)
誤 |
BufferedImage createImage(Consumer drawer) {
|
正 |
static BufferedImage createImage(Consumer drawer) {
|
P.332:■src/main/java/projava/DiffSampleInherit.java
誤 |
BufferedImage lineImage() {
return createImage(g -> g.drawLine(10, 10, 400, 300));
}
BufferedImage rectImage() {
return createImage(g -> g.drawRect(10, 10, 400, 300));
}
|
正 |
static BufferedImage lineImage() {
return createImage(g -> g.drawLine(10, 10, 220, 180));
}
static BufferedImage rectImage() {
return createImage(g -> g.drawRect(10, 10, 220, 180));
}
|
P.356:本文4行目
誤 |
図17.5がjava.util.ListのJavadocです。 |
正 |
するとjava.util.ListクラスのJavadocのページにジャンプします(図17.5)。 |
P.371:本文2行目
誤 |
バグを健在化させることができる |
正 |
バグを顕在化させることができる |
P.388:本文最終行
誤 |
て使いこなせるようにしておきましょう。 |
正 |
て使いこなせるようにしておきましょう。最後に補完関連操作で紹介したIntelliJ IDEAのショートカットを表19.1に挙げておきます。 |
P.421:表21.1 設定項目「Spring Boot」の「設定値」
誤 |
2.6.3、または「SNAPSHOT」や |
正 |
デフォルト、または「SNAPSHOT」や |
P.428:「プロジェクトを実行する」の下2行目
誤 |
〜右側にある再生アイコンを |
正 |
〜右側にある実行アイコンを |
P.428:図21.17 キャプション
誤 |
プロジェクトの再生アイコン |
正 |
プロジェクトの実行アイコン |
P.444:図21.31
P.444:図21.31
誤 |
Javaプログラム |
正 |
Javaプログラムで用意したデータ |