- 1. Helo page
- 2. はじめに
- 3. Builderパターン
- 3.0.1. CodeSignal – firstNotRepeatingCharacterにチャレンジ
- 3.0.2. 【Java】新卒が初めてのコードレビューで受けた指摘5選
- 3.0.3. Javaで経過日数を計算したい
- 3.0.4. 文字列の出現回数を数えたい
- 3.0.5. 【俺的】COBOL→Java言語移行ガイド(導入)
- 3.0.6. @JvmStaticと@JvmFieldをobject(またはcompanion object)のフィールドに付与した場合の違いについて
- 3.0.7. NLP4J – 構文解析した結果からキーワードを抽出する
- 3.0.8. Java開発の技術用語
- 3.0.9. Java独習(第6章)
jarファイルをjdbcドライバも含めて作成する
## 概要
jdbcドライバも含めたjarファイルを作成する方法。
ここでは、Sample.javaというファイルと、sample-jdbc-1.0.0.jarというjdbcドライバを使う例を書く。## Classファイル生成
まずはjarファイルの作成方法ではないが、classファイルを作成し実行する方法。“`
$ javac -classpath ./sample-jdbc-1.0.0.jar Sample.java
“`実行
“`
$ java -cp .:./sample-jdbc-1.0.0.jar Sample
“`## jarファイル作成
以下コマンドでjarファイルを作成する。“`
$ jar cvf Sample.jar *.class
“`jarの中身を見てみるとこんな感じ。このまま実行するとエラーになるので、MANIFEST.MFに追記をする必要がある。
“`
$ jar tvf Sample.jar
0 Wed Aug 04 09:47:44 JST 2021 META-INF/
66 Wed Aug
Java入門[Javaとは〜型と変数、定数]
Javaの基本的な学習を終えたので、思考整理のための投稿になります
もしも間違っている部分などがあれば、ご指摘などを頂けると幸いです。## Javaとは
1995年に登場したプログラミング言語であり、世界的に有名。
RedMonkが2021年3月に公開した言語ランキングでは以下のような順位
1.JavaScript
2.Python
3.Java
4.PHP
5.C### Javaで開発されたもの
https://evernote.com/intl/jp
https://www.minecraft.net/ja-jp/store/minecraft-java-edition
## Javaの開発
`コード作成 → コンパイル → 実行`になる。
#### コンパイルとは
プログラム言語をコンピュータが理解できる言語に変換すること。
JavaはWindowsでもMacでも環境に左右されずに動作する。**WindowsOSにだけわ
【VBscript、Java】Tumblrのエクスポートファイルからホームページを生成する。
こんばんは。
写真共有サービスのTumblrをご存じですか?写真に特化したSNSで、世界中の写真好きの投稿を見る事ができます。ユーザー数はtwitterやfacebookには及びませんが、SNSのデメリットの誹謗中傷なども(自分が知る限りは)殆ど目に触れる事はなく、とっても快適なサービスです。自分は2014年頃から愛用しており、ほぼ毎週投稿しているので、300件くらいの投稿があります。
今回は、Tumblrに投稿した記事を、ホームページ風にアレンジするプログラムを作りましたのでご紹介します。
事情により、VbscriptとJavaの合わせ技という事もあり、またTumblrのアーカイブも(Tumblr社には申し訳ないですが)非常に使い辛く苦慮しました。
空き時間にちょこちょこプログラムを作り、テストでもバグが大量に出まして、結果6か月かかりました(途中でモチベーションが下がりサボった期間含む・・)。全体像はこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402
Javaにおけるアノテーションの復習メモ
## アノテーションとは
– ソースコードの注釈
– コンパイラやJVMに付加情報を伝える
– 目印のようなもの## 主なアノテーション
– @Override→スーパークラスのメソッドをオーバーライド– @FunctionalInterface→関数型インターフェイス
→単一の抽象メソッドを持つインターフェイス(1つだけ持てる)
→staticメソッド、デフォルトメソッドは複数可
→Objectクラスのpublicメソッドである抽象メソッドは含まない(複数定義可)“`java
package cp2.no3;@FunctionalInterface
public interface FunctionalInter{ // 単一の抽象メソッド(抽象メソッドは1つしか定義できない。2個以上は不可)
void foo(T t);// Objectクラスのpublicメソッド
String toString();// Objectクラスのpublicメソッド
boolean equals(Object object);// static
[JAVA][SpringBoot]HttpClientが通信の際に利用しているTLSのバージョンを確認する
## やりたいこと
* SpringBoot(2.3.3.RELEASE)で作成されたWebアプリが、ある外部APIに接続する際に、HttpClientがセキュリティ通信方式としてTLSのバージョンのいくつを利用しているのかを調べる## 解決できた方法
* 出力するログレベルをDEBUGにした上で実際に通信させたところ、SSLConnectionSocketFactory がログに情報を出力した## 解説
### HttpClientのバージョン
* 4.5.3
* build.gradle に記述があった
`implementation ‘org.apache.httpcomponents:httpclient:4.5.3’`
* gradleでの記述を検索する際、「HttpClient」「httpClient」みたいに大文字を入れて検索してる間は見つからなかったので全部小文字で検索すべきだった### 直面した困難
* 検索したところ、HttpClientが利用するTLSのバージョンの設定方法はヒットするが現在実際にどれを使っているのかの調べ方はヒットしなかった
Thymeleaf
#基本は変数式とOGNL
Thymeleafの基本は、「値を出力する(表示する)」ということです。これは、${{○○}}という形で記述されます。この${0}という書き方は「変数式」と呼ばれます。変数式の中に記述されるのは、「OGNL」(Object-Graph Navigation Language)式という、Javaの値にアクセスするための式言語です。Thymeleafに限らず、各種のライブラリやフレームワークなどで使われています。OGNLは、Javaの簡易版のような書き方をするので、Javaプログラマであればそれほど難しくはありません。基本的に「Javaで式を書けば、シンプルなものならたいていはOGNLの式になる」と考えてしまっていいでしょう。既に基本的なOGNLは使っていますが、もう少し違ったサンプルを挙げてみましょう。
“`
タグの部分をこのように書き換えてみてください。
リスト4-1
Helo page
JavaGold学習メモ(第一章)
## 主旨
– JavaGold資格取得に向けて学習したことの内容メモ(黒本をまずは読んでみる)
– 記憶の怪しい項目や知らなかったことをまとめる
– あとで見返せる程度で備忘録を残す(多分意味が自分しか理解できない記載も多い)
– 完全なメモなので誤字などもあるかもしれないが細かいことはひとまず気にしないでおく## Javaのクラス設計について
■カプセル化
・外部に公開するアクセス手段のメソッド→アクセサメソッド o r アクセサ
・finalやstaticを実装することとカプセル化は無関係
・トップレベルクラス→ネストされたクラスでない通常のクラス→ファイル名がFoo.javaでクラスがFooの場合、トップレベルクラス
・一つのソースにおいて、宣言できるpublicなトップレベルクラスは一つだけ■継承
・is-a関係(AはBである) or kind -of-a関係(AはBの一種である)
・has-a関係(AはBを持っている)は、集約の関係。構成集約とも呼ばれる。
・集約は関係するオブジェクトのライフライクルが同じではない→親クラスと学生クラス。親クラスを削除しても子クラス
JSFを環境構築してみた!
仕事でJSFを使うので、独学でも触りたいと思い、環境構築しました。
##開発環境
Windows10 home
Java SE8
netbeans 8
GlassFish 4.1.1#Javaのインストール
[こちらのサイト](https://www.oracle.com/java/technologies/javase-downloads.html)から、**Java SE 8**をインストールします。
最新版のJDKだと、netbeansをインストールする際にエラーが排出されてしまう為、**SE 8**をインストールしましょう。#環境変数の設定
次に、「コントロールパネル」→「システムとセキュリティ」→「システム」の「システムの詳細設定」から環境変数の設定を行います。
「システム環境変数」の中に「Path」という変数があるので、編集ウィンドウから新規ボタンを押してJDKをインストールした場所のbinディレクトリのパスを追加します。
「Path」に追加後、コマンドプロンプトを立ち上げ、“javac“とコマンドを打って、きちんと環境変数が設定できているか、確認します。
以
【Jackson】JSONから特定プロパティだけデシリアライズする
## やりたいこと
以下のような`JSON`から、`value`プロパティだけを、型を付けてデシリアライズします。“`javascript
{
“value”: “10”, // このプロパティは有ったりなかったりする/* 他にも沢山のフィールド */
}
“`## やり方
以下のような読み出し関数を作ることでできます。
サンプルコードは`Kotlin`ですが、`Java`でも問題なく動くと思います。“`kotlin
import com.fasterxml.jackson.databind.JsonNode
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapperval mapper: ObjectMapper = jacksonObjectMapper()
/**
* @param json 読み出し対象JSON
* @param targetPropertyNam
TomcatとJerseyでトランザクション管理してみる
# はじめに
Tomcat + Jersey という構成の Web アプリケーションの動作を理解するために、[Tomcat Embed](https://mvnrepository.com/artifact/org.apache.tomcat.embed) を使って実験をしていきます。
いまどきこんな構成で開発を始めることは少ないかと思いますが、レガシーソフトウェアと戦う人たちの助けになれば幸いです。## 関連記事の一覧(予定)
– [埋め込みTomcatでJerseyを動かしてみる](https://qiita.com/atti/items/fa3843f75c4bd669059a)
– [HK2でDIしてみる](https://qiita.com/atti/items/3f6f43c5168323344427)
– [BeanValidationで入力値検証してみる](https://qiita.com/atti/items/2267a4b52b033dfabcca)
– TomcatとJerseyでトランザクション管理してみる ← イマココ## リポジトリ
http
デザインパターン勉強会⑦Builder
はじめに
ZOOM勉強会の議事録です。
第7回はBuilderパターンです。Builderパターン
オブジェクトの生成における呼び出すメソッドの順序と具体的な生成メソッドの分離をします。
分離することにより、オブジェクト生成の順序を使い回すことができます。
特に、コンストラクタの引数が多いときに有効です。ビルダーパターンの役割は以下です。
- Builder
一つのBuilderに依存しないようにするインタフェース、建築材料を持っている
- ConcreteBuilder
インスタンス生成時に使用するメソッドの具体的な実装
- Director
設計図のようにインスタンス生成時の順序を知っている、材料を組み上げる役割
- Client
ビルダーパターンを利用してオブジェクトを生成するコード
今回はRefactoring.GuruのJ
CodeSignal – firstNotRepeatingCharacterにチャレンジ
コーディングしなさすぎてコーディングを忘れたエンジニアがコーディングを思い出すためにコーティングします。
今回は、アメリカのコーデイング練習サイトCodeSignalの問題「firstNotRepeatingCharacter」を解いていきます。
サイトによると、この問題はAmazonの面接で出されたことがあるようです。##問題
“abacabaed”のような文字列sが渡されるので、最初に出てくる重複していない文字を探します。
上の例だと、重複していないし最初に出てくるのでcが答えです。もし重複している文字がない場合は、’_’を返します。
##考え方・解説
最初は単純に、文字を一つずつループして、もう一つループを回して他の文字と比較し、重複がない文字を探す方法が浮かびました。
しかしこの方法で回答すると、実行時間超過でテストが一部通りませんでした。そこで、この解き方の無駄を探すと、それぞれのループで全ての文字をチェックしていたので、重複した文字を何度も比較してしまっていることに気づきました。
たとえば、文字列の中にaが1000回あれば、2回目のaでその文字は重複しているた
【Java】新卒が初めてのコードレビューで受けた指摘5選
## はじめに
新卒でSIerのJavaプログラマとして働き始めて2ヶ月が経ちました。
忙しい中、自分の拙いコードを見てくださる先輩方には感謝しかありません。今後同じ指摘を受けないように、コードレビューでの指摘をまとめようと思います。
## ①Nullぽを起こさないようにチェックを入れる。
“`Java
Customer customer = getCustomer(request);
System.out.println(“ようこそ、” + customer.getName() + “さん”);
“`もしgetCustomerで顧客情報が取得できなかった場合、customerはnullとなり、getNameメソッドを呼び出す時点でヌルポが発生します。
Nullチェックするときは、CollectionUtils.isEmptyとか、StringUtils.isEmptyとかを使いましょう。
https://qiita.com/mtanabe/items/fdfd304e461fd50e10ff
https://qiita.com/mtanab
Javaで経過日数を計算したい
Javaで経過日数を計算したい場合、もっともシンプルなのは`LocalDate`と`ChronoUnit`を利用するものです。
“`java
public static long diff(LocalDate localDate1, LocalDate localDate2) {
return ChronoUnit.DAYS.between(localDate1, localDate2);
}
“`しかしライブラリや開発環境の都合上、`Date`や`Calendar`を利用せねばならないということもあります。この場合、`Date`や`Calendar`を`LocalDate`に変換してしまうのがもっともわかりやすいと思います。
“`java
public static long diff(Date date1, Date date2) {
LocalDate localDate1 = date1.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate localDate
文字列の出現回数を数えたい
特定の文字列の出現回数を数えたい場合、たとえばPythonだと
“`
$ python3
Python 3.8.5 (default, Jul 28 2020, 12:59:40)
[GCC 9.3.0] on linux
Type “help”, “copyright”, “credits” or “license” for more information.
>>> “AABABAAAB”.count(“AB”)
3
“`というように、非常に簡単に書けるのですが、Javaでは一工夫が必要になります。
“`java
public static int count(String string, String target) {
int i = -1;
int c = 0;
while ((i = string.indexOf(target, i+1))!=-1) c++;
return c;
}
“`実際に使ってみると、次のようになります。
“`java
System.out.println(count(“AABABAAAB”,
【俺的】COBOL→Java言語移行ガイド(導入)
## はじめに
__検証環境__
PC: MacBook Air(mid2020)
OS: macOS Big Sur 11.5.1
COBOL: GnuCOBOL 3.1.2.0
C: 12.0.5 (`gcc -dumpversion`の結果)Javaのタグを付けましたが、今回はあまり関係ありません。
## COBOLからJavaへの移行について
COBOLが生まれてから60年以上たった今、COBOLを採用している企業の一部では、Javaなどオープン系言語へのマイグレーションが進みつつあります。
実際ググると、なぜマイグレーションが進んでいるのかはあちこちに書かれているのですが、自身で調べたことや考えを、勉強としてまとめてみようと思います。
また、別記事(後日)では、COBOLとJavaで書き方がどう変わるのかも書いてみようと思います。## なぜCOBOLからJavaへの移行が進むのか
これにはいくつか理由があります。
### 1. COBOLの運用ができる人がいない
このご時世、入社していきなり「私COBOLできます!」なんて人は超超稀ではないでしょうか。自分
@JvmStaticと@JvmFieldをobject(またはcompanion object)のフィールドに付与した場合の違いについて
基礎的な部分にはなりますが、一瞬迷ってしまうのでいろんなパターンを試してみました。
## JvmStaticアノテーション
・メソッドに付与すると、INSTANCE・Companionオブジェクトを経由せずアクセスできるようになる。
・フィールドに付与すると、getter/setterを作成してくれる。## JvmFieldアノテーション
・メソッドに付与はできない。(構文エラーが出ます。)
・フィールドに付与すると、INSTANCE・Companionオブジェクトを経由せずアクセスできるようになる。## 上記を踏まえて
とりあえず使ってみました。
適当なフィールドを持つクラスを作成。
JvmTestKotlinObject.ktの方はobjectキーワードで定義しているので、それ自体がシングルトン。
JvmTestKotlinClass.ktの方はclassキーワードで定義しcompanion objectを宣言しているので、シングルトンを内包しているクラスです。“` JvmTestKotlinObject.kt
object JvmTestKotlinObj
NLP4J – 構文解析した結果からキーワードを抽出する
[Index](https://qiita.com/oyahiroki/items/ba79a759c599d3459d29)
# 構文解析した結果からキーワードを抽出する例
「車が高速道路で急に停止した。エンジンから煙がもくもくと出た。」
という文から
「なにがどうした(名詞 … 動詞)」
の関係を抽出することにしてみます。日本語話者であれば
「車が … 停止する」
「煙が … 出る」
という関係を見つけ出すことができると思います。これを自然言語処理で行ってみたいと思います。ここでいう「キーワード」は「切り出したい意味のある文字列」です。
# 構文解析をする
構文解析のエンジンとして、構文解析器として著名な「Cabocha」を利用します。
NLP4JでCabochaを利用する方法については以下の記事で紹介しております。
[NLP4J – Java で構文解析(Cabochaを利用)](https://qiita.com/drafts/b6e68e1f4e3925dc6d6a)Cabochaで処理を行った結果、以下のような係り受け解析の結果(=構文解析
Java開発の技術用語
# Javaサーブレット
・webサーバー上(バックエンド)で動くJavaプログラム“`サーブレットのコード(HelloWorld.java)
import java.io.*;import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException {
response.setContentType(“text/html;charset=Shift_JIS”);
PrintWriter out=response.getWriter();
out.println(“
”);out.println(“
Hell
Java独習(第6章)
この記事ではJava独習の第6章(コレクションフレームワーク)についてのまとめを行います。
コンテンツは以下の通り
・コレクションフレームワークの基本
・リスト
・セット
・マップ
・スタック/キュー6-1 コレクションフレームワークの仕組み
コレクション=オブジェクトの集合を表す仕組み
配列との違いは以下のようなものがあげられる
・既知のデータ構造やアルゴリズムを取り込むことができパフォーマンスが高い
・共通的な操作をインターフェイスとして定義しているのでデータ構造やアルゴリズムにとらわれず同じように操作可能
Collectionのサブインターインターフェイスとして以下のようなものがある
・リスト(順序を持ち重複OK)-ArrayListとLinked List
・セット(重複NG)-hashSetとLinkedHashsetとTreeSet
・マップ(キーと値の組み合わせで管理)-HahsMapとTreeMap
・スタック/キュー(戦闘と末尾の追加や削除が可能)-ArrayDequeとLinkedListコレクションのインターフェイス化は
インターフェ