20200629のJavaに関する記事は4件です。

所有図書のデータ管理(ポートフォリオ)

初投稿をいたします。中小企業に勤務している新卒1年目の者です。勉強のためにポートフォリオを先輩社員からアドバイスをいただきながら作成しています。使用するコードの意味や働きを誤解していたらご指導のほどよろしくお願いします。使用している開発ソフトは「Eclipse」です。太字がコード、//が下のコードについて解説しています。

ポートフォリオ内容


・所有している本の簡易管理システム(所謂My図書館)

コードでしたいこと


・所有している本の検索

使うファイル


・Own.java(jspから最初に入るjavaファイル)

コード

Own.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//ownBook.jspで受けとった3つのデータの型を指定 送られてきたデータ(request.getParameterの後のデータ名とその中に格納されているデータのこと)にそれぞれString型のこのメソッドで使うデータ名に置き換える 送られてきたのは検索したい本のタイトル、著者、出版社↓
//書いていて思った。request.getParameterは親インターフェースでHttpServletRequestの定義がされてる必要があるのなら、いつ満たした?上のHttpServletRequestでいいのか?↓

String bookTitleSerch = request.getParameter(“bookTitleSearch”);
String bookWriterSerch= request.getParameter(“bookWriterSearch”);
String bookCompanySerch= request.getParameter(“bookCompanySearch”);

//book型のownBookList変数を作成 取り出したいデータ型がString型のみ、int型のみとは限らないためbookというデータ型を作成(voidと定義していることもあって型の名前は分かりやすければなんでもいい) ArryListはデータの集まりを配列のように取り扱うもの。当てはめて詳細に説明するとbook型のownBooksListというメソッドを作成。
ArrayList ownBooksList = new ArrayList();

//例外処理 エラーの起こるであろう場所を指定 なぜここだったのだろう?
try {
// リストを取得 =メソッドに格納する情報 OwnDBAccess.javaのSelectに処理を委託し、その際に上記のownBookList変数を一緒に引数として渡す。

ownBooksList = OwnDBAccess.Select(bookTitleSerch, bookWriterSerch , bookCompanySerch);
//例外処理 エラー発生時にフロント側には何も表示されない
} catch (SQLException e) {
e.printStackTrace();
}

// リクエストに設定 リクエストスコープを使ってインスタンスを保存。これにより、検索したい3つのワードを受け取るまで所持できる
request.setAttribute(“ownBookList”, ownBooksList);

//リクエストしたsetAttributeを表示したいjspファイルの指定 決まり文句の為省略
ServletContext context = getServletContext();
RequestDispatcher dis = context.getRequestDispatcher(“/OwnReslut.jsp”);
dis.forward(request, response);
}

・DBAccess.java
public static ArrayList Select(String bookTitleSerch , String bookWriterSerch , String bookCompanySerch) throws SQLException {
//Daoファイルのdao変数にはなにも入れない 明日、Daoについてアウトプットします。Dao型の変数(?)を定義。Daoは主にデータベースの操作に関するコマンドを入力する為のファイル。ここでnullとするのは処理したいこと、送られたものを広義に受け取るため。メソッド内で変数の定義をしていないと突然現れた変数に対する処理が出来ない為。

Dao dao = null;

//上記に同意味。resultという名前の変数を作成、受け取りたいがためにnull。また、検索結果によって返ってくるデータが変わるため。
ArrayList result = null;

//例外処理。

try {

//daoインスタンスを作成。ここで作る意味は検査例外が発生する可能性がある処理を含むため。データベースとの接続を行い、SQlのパスワード等の不一致により例外が発生しやすい。
dao = new Dao();

//DaoファイルのOwnメソッドに引数として()内の変数を渡す。並びに受け取ったデータを上記result変数に代入

result = dao.Own(bookTitleSerch , bookWriterSerch , bookCompanySerch);
}finally {

//リソースの開放。必要な情報のみを取り出す為。

if(dao != null) dao.close();
}

//一つ上のreslutに渡す。

return result;
}

・Dao.java
//以下のメソッドではデータベースの操作と取り出したいデータの指定を行っております。あと、例外処理がしたいのでthrowsを書いてもらいました。()内は引数としてDBAccessから送られてきた三つの変数です(受け取ったら戻り値になるんでしたっけ?)。

public ArrayList Own(String title , String writer , String company) throws SQLException{
// SQLで行う処理を記入 今回はbooksテーブルの条件に合致するすべてのデータを取り出したいので以下のコードです。
sql = “select * from books where title like ? and writer like ? and company like ?”;

//以下はSQLを実行するためのコードだったと思います(うろ覚え)。これ書かなきゃいけない理由は分かりません。調べてもこう動く、こう書くとしか出てきませんでした。ご教示よろしくお願いします。

PreparedStatement ps = null;
//これが確か、dtoにつなげるためのコードだったと思います。結果が検索内容によって変わるのでnull。
ResultSet rs = null;

// Listメソッドの作成 メソッドには上記sqlの?に入れるカラム名が入る
ArrayList list = new ArrayList();
//例外処理ですね。起こりそうな例外を書きます。
try {
// プレースホルダを設定 やはりprepareStatementがあるためSQLを動かしたい
ps = con.prepareStatement(sql);

//上記sql=の中の?に入る変数。昨日のファイルにもあるtitleという引数を入れます。
ps.setString(1, “%”+title+”%”);

//上記にほぼ同様の処理です。
ps.setString(2, “%”+writer+”%”);

//上記にほぼ同じです。
ps.setString(3, “%”+company+”%”);

// SQL実行
rs = ps.executeQuery();
//検索したデータがすべて表示されるまで繰り返し取り出す
while(rs.next()) {
//itemメソッドの作成 ここでdtoファイルのitemインスタンスを作成。dtoファイルにとびます。
book item = new book();
// 本のタイトルを取得してitemへ格納
item.setTitle(rs.getString(“title”));
//本の著者を取得、itemへ
item.setWriter(rs.getString(“writer”));
//本の出版社を取得、itemへ
item.setCompany(rs.getString(“company”));
//itemメソッドに格納
list.add(item);
}

//これもリソースの開放
rs.close();
}finally {

//これもリソース(ry
ps.close();
}

//呼び出し元の上記listメソッドに返す
return list;
}

Dto
//このファイルは今まで登場した三つの変数を一つの箱として結果に渡すダンボール箱の役割を持っています。変数を受け取ってもどこに格納するかを指定します(自信あり)。

//前言撤回です。こんな感じだろうなとかいたので細かいところは説明できません。

public class book implements Serializable{
private static final long serialVersionUID = 1L;

// タイトル
public String title;
// 著名
public String writer;
// 出版社
public String company;

// ゲッター/セッター
public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getWriter() {
return writer;
}

public void setWriter(String writer) {
this.writer = writer;
}

public String getCompany() {
return company;
}

public void setCompany(String company) {
this.company =company ;
}

}

本の検索に関してはこの辺で。 諸先輩方、ご意見や間違いの指摘、お願いします。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

マッスルJavaオブジェクト指向 2日目 ~継承~

継承とは

  • クラスの定義内容を受け継ぐこと
    • メソッド・フィールドを定義し直さなくてもそのまま使える:便利

Javaにおける継承

  • 拡張:継承したクラス(子クラス)で独自のメソッドやフィールドを追加
  • 再定義(オーバーライド):継承したクラス(子クラス)で元のメソッド・フィールドの定義を変更できる

継承のイメージ

  • 親よりも子の方が強い
    • 亀仙人(親クラス)と弟子の悟空(子クラス)
      • 弟子の悟空は かめはめ波(親の定義をそのまま使える) + 3倍かめはめ波(オーバーライド) + 舞空術(拡張)

継承の用語

  • 元のクラス(継承されるクラス)

    • 親クラス
    • スーパークラス
    • 継承元
  • 元のクラスを継承したクラス

    • 子クラス
    • サブクラス
    • 派生クラス
    • 継承クラス
    • 継承先

継承のコード例:定義の仕方

  • extendsキーワード
  • 子クラスでは、親クラスのフィールドやメソッドを書かなくても使える
  • 親クラスは1つしか指定できない
class 子クラス名 extends 親クラス名{

}

継承のコード例

  • 親クラス
public class Animal{
  public void eat(String f){
    System.out.println(f+"を食べます");
  }
  public void sleep(){
    System.out.println("眠ります");
  }
  public void wakeUp(){
    System.out.println("起きます");
  }
}
  • 子クラス
    • Birdクラスは、親クラスのAnimalクラスのsleepメソッドやwakeUpメソッドを呼び出せる
    • ①:拡張
    • ②:オーバーライド
public class Bird extends Animal{

  // ①:拡張
  public static int wing = 2;
  pulic void fly(){
    System.out.println("飛びます");
  }

  // ②:オーバーライド(上書き)
    // 親と同じメソッド名
  pulic void sleep(){
    System.out.println("木の上で眠ります");
  }
}

「super」 キーワード

  • オーバーライドを行う際に、親クラスの定義を利用できる
  • オーバーライドした子クラスのメソッドの中から、親クラスのメソッドやフィールドにアクセスしたいときに用いる
public class Bird extends Animal{

  pulic void sleep(){
    System.out.println("木の上で眠ります");

    // super
    super.sleep();
}
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

私の学習記録

私の学習記録

 4月から6月にかけて、自己学習をする機会がありました。
 私はシステムエンジニアとして、自宅学習ならではの学習テーマを選びました。以下の点を踏まえるように心がけました。

・プログラミング(コーディング)がプロジェクトの全てではない
・プログラミングはスキルの全部ではなく一部である
・業務の幅の拡大あるいは業務効率化のために役立つが、今の自分に抜けがあるものは何か

 実際に学んだのは以下のテーマです。OSは Windows 10 Home です。(Github)

プログラミング "周り" のスキルに関する学習

プロジェクトの "流れ" に関する学習

"コンピュータサイエンス" に関する学習

"業務自動化" に関する学習

"Javaが一定以上できるようになったときに合わせて身に付けたい技術" に関する学習

"JavaScriptフレームワーク" に関する学習

"Java関連のスキルアップ" に関する学習

 今後は、資格取得を目指したり、これらの学習内容を線で結んで(勿論、抜けのある、身に付ける必要のある技術はまだまだ盛沢山です)大規模なアプリケーションを自分の手で実装してみる(Githubで星の数を上げられるようにしたい)といったことをしようと考えています。さらには、ITの専門職大学院で専門性をさらに極めていくということも検討しています。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Java Silverに合格するのに必要な知識まとめ

はじめに

仕事でJavaを使う必要があり、とりあえず体系的に学ぶためにJava Silverを取ろうと思ったので、そこで学んだことをキーワード的に簡単にまとめて行きます。

Javaの基本

クラス宣言

クラス宣言はフィールドとメソッドで構成される。コンストラクタはメソッドの一部

パッケージの目的

  • 名前空間を提供し、名前の衝突を避ける
  • アクセス修飾子と組み合わせてアクセス制御機能を提供する
  • クラスの分類を可能とする

パッケージ宣言

  • パッケージ宣言は、必ずソースコードの先頭行に記述する
  • パッケージ宣言よりも前に記述出来るのはコメントだけ

クラスのインポート

  • java.langパッケージは基本的なクラスがまとめられたパッケージであり、インポート宣言省略可能
  • 指定したパッケージに属するクラスはインポートされるが、サブパッケージはインポートされない

パッケージとアクセス制御

パッケージに属するクラスは、同じパッケージのクラスからしかアクセスできない。無名パッケージに属するクラスは同じ無名パッケージに属するクラスからしかアクセスできない

staticインポートの書式

本来、staticなフィールドやメソッドは、クラス名.フィールド名(メソッド名)の書式でどのクラスのものか明示する必要がある。それらを名称だけで省略表記するようにするための物がstaticインポート

import static パッケージ名.クラス名.フィールド名メソッド名

メソッドのstaticインポート宣言では、メソッド名にかっこや引数をつけない

staticインポートの仕様

  • インポートしたクラスに、インポートされたメソッドやフィールドと同名の物が存在した場合、そのインポートは無視される
  • 複数の同名のフィールドや、メソッドをインポートした場合、コンパイルエラーになる

mainメソッド

クラスには複数のメソッドを定義出来るが、処理を始めるためのメソッド、エントリーポイントの記述やルールは以下のようになる

public static void main(String[] args) {

}
  • 公開されてること(Public)
  • インスタンスを生成しなくても実行出来ること(Static)
  • 戻り値は戻せない(Void)
  • メソッド名はmain
  • 引数はString配列型を1つ受け取ること

javaコマンド

javaコマンドは、JVMを起動するためのコマンド。構文は以下の通り

java 完全修飾クラス名 [引数 引数 ・・・]

Javaのデータ型の操作

Javaのデータ型

Javaのデータ型は、プリミティブ型(整数、浮動小数点数、真偽値、文字)と参照型(オブジェクト型、列挙型、配列型)がある。
プリミティブ型のデータ型は以下の通り
bool型はない

データ型
boolean true,false
char 16ビットUnicode文字
short 16ビット整数
int 32ビット整数
long 64ビット整数
float 32ビット単精度浮動小数点数
double 64ビット単精度浮動小数点数

整数リテラル

リテラルとはソースコードに記述する値のことで、Javaでは、整数値はint型、浮動小数値であれば、double型、真偽値であれば、boolean型、文字であればchar型で扱われる。

接尾辞、接頭辞

接尾辞、接頭辞をつけることで、データ型を明示したり、10進数以外の表記が可能

・接尾辞の例
long型・・・L、float型・・・f

・接頭辞の例
0・・・8進数
0x・・・16進数
0b・・・2進数

アンダースコア

アンダースコアを使った数値表記は、桁数の多い数値リテラルの見やすさを向上させる目的で使用され、以下のルールがある

  • リテラルの先頭と末尾には記述ができない
  • 記号の前後には記述できない

文字リテラル、文字列リテラル

charは文字を表すデータ型
chara型に代入できるのは以下の通り

  • シングルクォーテーションで括った文字(文字リテラル)
  • シングルクォーテーションで括った¥uから始まるUnicode番号(文字リテラル)
  • 0~65535までの数値(数値リテラル)

文字リテラルはシングルクォーテーションで括る
文字列リテラルはダブルクォーテーションで括る

識別子の命名規則

識別子とは、変数、メソッド、クラスなどの名前の事。基本は自由に決められるが、以下の規則がある

  • 予約語は使えない(int,ifなど文脈表現など)
  • 使える記号は、アンダースコアと通貨記号($)のみ
  • 数字から始めてはいけない(2文字目以降)

null

nullは参照型の変数が参照を保持していないことを表現するためのリテラル。空文字("")とは異なる

メソッドの呼び出し方

メソッドの呼び出し方は以下となる

  • メソッド名(引数)・・・同じインスタンスに定義されているメソッド
  • 変数.メソッド名(引数)・・・インスタンスに定義されているメソッドの場合
  • クラス名.メソッド名(引数)・・・staticなメソッドの場合

シグニチャ

シグニチャとは、メソッド名と引数のリストのセットのこと。Javaにはオーバーロードという仕組みがあり、同名のメソッドが複数存在する可能性があるため、シグニチャを使って、メソッドを見分ける。

ガーベッジコレクション

C言語などではメモリを確保したり、解放したりするコードをプログラムに記述する必要があるが、Javaには自動メモリ管理機能がある。
カーベッジコレクタが不要なインスタンスを探し、破棄することをガーベッジコレクションという。ガーベッジコレクションの対象は、どこからも参照されなくなったインスタンスで、代表的なタイミングとして、変数にnullが代入されたとき。

演算子と判定構造の使用

代入演算子

代入演算子の種類と意味は以下の通り

演算子 使用例 意味
= a = 10; aに10を代入する
+= a += 10 aにa+10を代入する
-= a -= 10 aにa-10を代入する
*= a *= 10 aにa*10を代入する
/= a /= 10 aにa/10を代入する

マイナス演算子

マイナス演算子(-)には、引き算と正負反転の2種類がある。

型変換

大きな範囲の値を小さな変数に代入するときは、明示的なキャストが必要

int a = 15;
short b = (short) a;

整数の数値リテラルはint型、浮動小数点の場合はdouble型が基本のため、その値を小さな変数にいれる場合、原則明示的なキャストをしなくてはならない。byte型、short型の変数に代入する変数リテラルの場合、その値が方の範囲内であれば、コンパイルエラーとならない。

・byte型とshort型の範囲

型名 範囲
byte -128~127
short -32768~32767

インクリメントとデクリメント

インクリメント(++)とデクリメント(--)は変数の値に1を加算したり、減算するための演算子。
他の演算子と組み合わさった場合、前置きした場合、インクリメント(デクリメント)されてから代入され、後置きした場合、代入されてからインクリメント(デクリメント)される。

int a = 10
int b = 10
int c = ++a //aをインクリメントしてからcに代入 a=11,c=11
int d = b++ //bを代入してからインクリメント d=10,b=11

随時追記しています。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む