20210910のJavaに関する記事は11件です。

(JAVA勉強用メモ)2. データ型と文字列操作

リテラル 真偽値 boolean 文字 char char a = 'a'; // 文字は'' String b = "a"; // 文字列は"" char c = '\u30A2'; // Unicode(『\u』+『16進数4桁』) char d = 65; // 0 ~ 65535の数値 整数 byte … 8ビット short … 16ビット int … 32ビット long … 64ビット int a = 0b10010; // 2進数 int b = 0320560; // 8進数 int c = 0x10b2c; // 16進数 int d = 123_456_789; // 桁区切りの_(アンダースコア)は、先頭・末尾・記号の前後以外で使用できる 小数 float … 32ビット double … 64ビット 識別子 変数やメソッド、クラスなどの名前 予約語は識別子に使えない 使える記号は『_』(アンダースコア)と通過記号のみ 数字からは始められない 型推論 varを使った変数宣言。コンパイル時に型が推論される。 ローカル変数の宣言にのみ使用できる。フィールドやメソッドの引数などには使用できない。 var a = 10; // コンパイル時にint型と推論される。 var b = sample(); // メソッドの戻り値からも推論できる。 var c = () -> {}; // ラムダ式からは推論できない。 var d = {1, 2, 3}; // 配列の初期化式からも推論できない。 var e = new ArrayList<>(); // ダイヤモンド演算子で推論できないときは、Object型と推論される。 var f; // 初期化されていなかったり、 var g = null; // nullで初期化していると推論できない。 immutableなクラス 『mutable(可変)なオブジェクト』... フィールドの値を変更できる 『immutable(不変)なオブジェクト』... フィールドの値を変更できない(String, File, etc...)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

java swingでテトリス作ってみた(外部ライブラリなし)

javaを初めて約半年なので、何か作ってみたいなーと思い作りました。 ……テトリスとして最低限の機能しかないけど初心者なので多少はね? コードも見れなくはないと思いたい。 java version 16 外部ライブラリは使ってないのでそのまま使えると思います。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

(勉強用メモ)1. JAVAの基礎基本

パッケージ クラスなどの名称が重複して、予期せぬ不具合が発生することを防ぐための仕組み。使用目的は3つ 名前空間を提供して、名前が重複することを防ぐ アクセス修飾子と組み合わせてアクセス制御機能を提供する クラスを分類する package sample; // package宣言はソースコードの先頭行に書く import aaa.* public class Test { } javaコマンド javaコマンドで実行できるのは次の3つ mainメソッドをもつクラスファイル(.class) jarファイル(.jar)内のメインクラス モジュールに含まれるメインクラス $ java Main ソースファイルモード javacコマンドでのコンパイルなしでソースファイルを直接実行できる。(Java SE 11以降) ※メモリ上でコンパイル後のコードを扱っており、コンパイル自体を行っていないわけではない。 $ java Sample.java
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

(JAVA勉強用メモ)1. JAVAの基礎基本

パッケージ クラスなどの名称が重複して、予期せぬ不具合が発生することを防ぐための仕組み。使用目的は3つ 名前空間を提供して、名前が重複することを防ぐ アクセス修飾子と組み合わせてアクセス制御機能を提供する クラスを分類する package sample; // package宣言はソースコードの先頭行に書く import aaa.* public class Test { } javaコマンド javaコマンドで実行できるのは次の3つ mainメソッドをもつクラスファイル(.class) jarファイル(.jar)内のメインクラス モジュールに含まれるメインクラス $ java Main ソースファイルモード javacコマンドでのコンパイルなしでソースファイルを直接実行できる。(Java SE 11以降) ※メモリ上でコンパイル後のコードを扱っており、コンパイル自体を行っていないわけではない。 $ java Sample.java
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

@EqualsAndHashCode

@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode equals, hashCode 自動生成 equals : 二つのObjectの値が一致するか、同等性(equality)を比較する演算子 hashCode : 二つのObjectが同じであるか, 同一性(identity) を比較する演算子 Java beanで同等性の比較のためequalsと hashcode methodをoveridingして使うんだが、 @EqualsAndHashCode Annotationを使ったら自動的にこのメソッドを生成できる。 callSuper 属性を通じて、eqaulsと hashCode メソッド自動生成し親クラスのフィールドまでカバーするかを設定できる。 @EqualsAndHashCode(callSuper = true)の設定し、親クラスのFieldの値も同一であるか確認しfalse(Default)の場合 自身(this)クラスのFieldだけを考慮する。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【JSON】jackson で JSON化したくないプロパティをプログラムで設定

まえがき ・Jackson を使ってオブジェクトを JSON 形式に変換 ・アノテーションを使わない(使えない)場合 ・具体的には "beanClass" を除外したかった 環境 Java 8 jackson 2.6 ObjectMapper で設定 sample.java ObjectMapper mapper = new ObjectMapper() // ... 設定 mapper.setAnnotationIntrospector(new JacksonAnnotationIntrospector() { private static final long serialVersionUID = -1L; // <- 適宜設定 @Override public boolean hasIgnoreMarker(final AnnotatedMember m) { List<String> exclusions = Arrays.asList("beanClass"); return exclusions.contains(m.getName()) || super.hasIgnoreMarker(m); } }); 以上、お疲れさまでした!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Springbootでhelloworldを表示(InteliJ利用)

私はプログラミングの勉強を始めてまだ1週間も経ちませんが、メモがわりに投稿します。 少し長い説明になってますが、飛ばしているようなステップは無く、下記の通りにやればできるはずだと思います。 対象読者: Javaの超初心者(1ヶ月以内) コードの内容は分からないが、とりあえずブラウザ上に「HelloWorld」を表示させてみたい方 InteliJで下記のYoutubeサイトを見たがよく分からない人 内容に関しては、以下のInteliJが上げているYoutubeサイトの内容ほぼそのままです。 https://www.youtube.com/watch?v=5kOGdZmpSDI 目次 1.プロジェクトの新規作成 2.Springbootアプリの実行(test) 3.HTTP Responseチェックの作成 4.Spring Controllerの作成 5.ブラウザへのHelloworld表示 1.プロジェクトの新規作成 1-1.New Project InteliJを開き、「New Project」ボタンをクリック 1-2.Spring Initializr ①「Spring Initializr」を選択 ②「Next」ボタンをクリック ※その他の入力値は下記表示画面の通り、デフォルト値にしてます。 1-3.Spring web ①「web」と入力し検索 ②「Spring Web」にチェックを入れる ③「Finish」ボタンを押す 1-4.新規プロジェクト作成完了 以下のような画面が出てきます 2.Springbootアプリの実行(test) 2-1.ApplicationTests ①「src->test->java->com.example.demo」配下にある、「DemoApplicationTests」をダブルクリックすると、画面右にコードの内容が表示される事を確認します。 ②Runボタンを押し、ApplicationTestsを実行します。 2-2.ApplicationTestsの実行結果 コンソール画面に、「Tomcat started on port(s): 8080 (http) with context path ''」と表示されていることを確認します。つまり、Tomcatがポート8080で正常起動しているようなので、ブラウザに表示されるかも次で確認してみます。 2-3.ブラウザで確認 ブラウザを開き、「http://localhost:8080」をタイプしましたが、以下のように「Whitelabel Error Page」で戻ってきてしまいました。このYouTubeによると、springcontrollerが無いのが原因のようですので、以下で作成します。 2-4.Tomcatを一旦停止 画面右上の■ボタンを押し、Tomcatを停止ます。 3.HTTP Responseチェックの作成 3-1.HTTP Responseチェックの作成 HTTP Responseをチェックするクラスを以下のように作成します。 ①「com.exmaple.demo」をクリックします。 ②「New」をクリックします ③「Java Class」をクリックします。 3-2.CheckHTTPResponseクラスの作成 「New Java Class」のウィンドウが表示されるので、「Class」が選択(ハイライト)されていることを確認し、「CheckHTTPResponse」(名前は任意)と入力し、Enterキーを押します。 3-3.CheckHTTPResponseの確認 画面左に「CheckHTTPResponse」クラスが作成されている事と、画面右のサンプルコードができていることを確認。 3-4.CheckHTTPResponse内にコードを記述 「CheckHTTPResponse」クラス内に、以下のようにコードを記述します。 以下注意点です。 下記コード内にimportが6行ありますが、これはその下のアノテーションを入力すると自動的に入力されます。 「package com.example.demo;」のpackage以降は初めのプロジェクト作成時に変更した場合は、本例と異なる名前になります。 asserEqualsが何故かうまく入力できず、エラー(赤色表示のまま)になってしまうことがあります。対処法はassertEqualsの左にカーソルを持っていき、Macであれば「Option」ボタンをenterキーを同時に押すと赤色表示から白っぽい文字に変わりエラーが消えます(何故だか不明)。 CheckHTTPResponse package com.example.demo; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.client.TestRestTemplate; import org.springframework.boot.web.server.LocalServerPort; import static org.junit.jupiter.api.Assertions.assertEquals; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class CheckHTTPResponse { @LocalServerPort private int port; @Autowired private TestRestTemplate testRestTemplate; @Test public void shouldPassIfStringMatches(){ assertEquals("Hello World from Spring Boot", testRestTemplate.getForObject("http://localhost:" + port + "/", String.class)); } } 4.Spring Controllerの作成 4-1.Spring Controllerの作成 Spring Controllerクラスを以下のように作成します。 ①「com.exmaple.demo」をクリックします。 ②「New」をクリックします ③「Java Class」をクリックします。 4-2.HelloWorldControllerクラスの作成 「New Java Class」のウィンドウが表示されるので、「Class」が選択(ハイライト)されていることを確認し、「HelloWorldController」(名前は任意)と入力し、Enterキーを押します。 4-3.HelloWorldControllerの確認 画面左に「HelloWorldController」クラスが作成されている事と、画面右のサンプルコードができていることを確認。 4-4.HelloWorldController内にコードを記述 「HelloWorldController」クラス内に、以下のようにコードを記述します。 以下注意点です。 下記コード内にimportが2行ありますが、これはその下のアノテーションを入力すると自動的に入力されます。 「package com.example.demo;」のpackage以降は初めのプロジェクト作成時に変更した場合は、本例と異なる名前になります。 HelloWorldController package com.example.demo; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloWorldController { @RequestMapping public String helloWorld(){ return "Hello World from Spring Boot"; } @RequestMapping("/goodbye") public String goodbye(){ return "Goodbye from Spring boot"; } } 5.ブラウザへのHelloworld表示 5-1.CheckHTTPResponseに移動 「CheckHTTPResponse」クラスを開いてください。 Macであれば下記絵のように「Command」ボタンを押しながら、「E」ボタンを押すと、最近開いたファイルが表示されるので、「CheckHTTPResponse」を選択しEnterキーを押します。 5-2.CheckHTTPResponseの実行 「CheckHTTPResponse」クラスが開いていることを確認し、右上の「Run」ボタンをクリックし、プログラムを実行します。 5-3.Tomcat起動の確認 下記絵のように、コンソール画面でTomcatが起動していることを確認します。 5-4.ブラウザでHelloWorldの確認 先ほど開いたブラウザに戻り、リフレッシュすると下記のように「HelloWorld from Spring boot」が表示されます。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[備忘録]バッチ処理的なものを作成

目的 初めてバッチ処理のようなものを作ったので備忘録として記述。 挙動は以下の通り。 ・CSVファイルからデータを受け取り、DBへインサート。 ・DBの内容を受け取り、CSVファイルとして保存。 用語 Q . バッチ処理とは? A . 任意のタイミングでデータの処理を自動で行うプログラムのこと。 Q . CSVファイルとは? A . 「,」で区切られたテキストデータのこと。 コード ・CSVファイルからデータを受け取り、DBへインサート。 この挙動を実現するコードが以下の通り。 InsertItemCSV.java package com.example.common; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class InsertItemCSV { public static void main(String[] args) { // 入力値のバイト(容量)を取得するクラス FileInputStream fi = null; // 受け取ったバイトから文字を復元 InputStreamReader is = null; // 文字列を効率的に読むクラス BufferedReader br = null; try { // MySQLを呼び出すためのドライバを設定 Class.forName("org.postgresql.Driver"); // MySqlの接続のためにURL,ユーザー名、パスワードを変数に入れる String url = "jdbc:postgresql://localhost:5432/student"; String user = "postgres"; String password = "postgres"; // URL,ユーザー名、パスワードを用いてMySqlに接続 Connection connection = DriverManager.getConnection(url, user, password); // ステートメント(Updateなどの処理を呼び出すもの)を作成 Statement stmt = connection.createStatement(); // 1行ずつcsvファイルを読み込む try { // FileInputStream等をインスタンス化して、 // csvフォイルを読み込む fi = new FileInputStream("item_20210701_001.csv"); is = new InputStreamReader(fi); br = new BufferedReader(is); // 読み込み行 String line; // 分割後の(後に , で区切る)データ保持のための配列 String[] data = null; // 1行ずつcsvファイルを読み込み、Insertを行う while ((line = br.readLine()) != null) { // ,(コンマ)区切りで情報を分ける data = line.split(",", 0); // ItemsテーブルにInsertを行う stmt.executeUpdate( "INSERT INTO items(id, name, description, price_m, price_l, image_path, deleted) VALUES (" + data[0] + ",'" + data[1] + "','" + data[2] + "','" + data[3] + "','" + data[4] + "','" + data[5] + "','" + data[6] + "')"); } // Insertが終わり次第、ファイルを閉じる br.close(); } catch (IOException io) { System.out.println(io); } finally { br.close(); } // ステートメントをクローズ stmt.close(); // 接続をクローズ connection.close(); } catch (Exception e) { System.out.println(e); } } } ・DBの内容を受け取り、CSVファイルとして保存。 この挙動を実現するコードが以下の通り。 OutputOrders_and_UsersCSV.java package com.example.common; import java.io.File; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class OutputOrders_and_UsersCSV { public static void main(String[] args) { try { // 保存先とファイル名設定 PrintWriter pw = new PrintWriter(new File("/Users/nayuta/Desktop/test1.csv")); StringBuilder sb = new StringBuilder(); // SQLへの接続のためのCOnnectionクラスに、CONNECTION_DBで作ったMethodの値を格納 Connection connection = null; CONNECTION_DB conection_db = new CONNECTION_DB(); connection = conection_db.getConnection(); // 実行のためのrs準備 ResultSet rs = null; // SQL文作成 String sql = "select id, user_id, status, total_price, order_date, destination_name, destination_email, destination_zipcode, destination_address, destination_tel, delivery_time, payment_method from orders;"; // PreparedStatement ps = connection.prepareStatement(sql); // sql文を実行 rs = ps.executeQuery(); System.out.println(rs); // 繰り返し処理 while (rs.next()) { sb.append("id"); sb.append(rs.getString("id")); sb.append(","); sb.append(rs.getString("user_id")); sb.append(","); sb.append(rs.getString("status")); sb.append(","); sb.append(rs.getString("total_price")); sb.append(","); sb.append(rs.getString("order_date")); sb.append(","); sb.append(rs.getString("destination_name")); sb.append(","); sb.append(rs.getString("destination_email")); sb.append(","); sb.append(rs.getString("destination_zipcode")); sb.append(","); sb.append(rs.getString("destination_address")); sb.append(","); sb.append(rs.getString("destination_tel")); sb.append(","); sb.append(rs.getString("delivery_time")); sb.append(","); sb.append(rs.getString("payment_method")); sb.append("\n"); // 改行 } // 保存場所/ファイル名(=pw)に内容(=bf)を格納 pw.write(sb.toString()); pw.close(); System.out.println("保存が完了しました。"); } catch (FileNotFoundException fe) { System.out.println(fe); } catch (SQLException sql_e) { System.out.println(sql_e); } } } こちらはDBへの接続の役割を担うクラス。 CONNECTION_DB.java package com.example.common; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class CONNECTION_DB { public static void main(String[] args) { // 下記のオブジェクト呼び出し CONNECTION_DB conect_bd = new CONNECTION_DB(); System.out.println(conect_bd.getConnection()); } public Connection getConnection() { Connection connection = null; try { // MySQLを呼び出すためのドライバを設定 Class.forName("org.postgresql.Driver"); // MySqlの接続のためにURL,ユーザー名、パスワードを変数に入れる String url = "jdbc:postgresql://localhost:5432/student"; String user = "postgres"; String password = "postgres"; // URL,ユーザー名、パスワードを用いてMySqlに接続 connection = DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException cn) { System.out.println(cn); } catch (SQLException sql_e) { System.out.println(sql_e); } return connection; } } [改善点] ・MVCモデルと全く関係ない ・常駐のプログラムではない RepositoryもServiceもControllerもつかっていないので、ただのJavaの実行ファイル。0点。 CSVファイルからInsertも、DBからCSVファイルの書き出しもできたが、これでバッチ処理ができたと勘違いし、ドヤ顔でいたのが恥ずかしい。 [参考文献] Export MySQL Table in to CSV file using JAVA 公式APIマニュアル
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Java] Long型とlong型の比較メモ

Javaで社内システムを作ってるときに、Long型の値とlong型の値を「==」で一致判定しようとしたら一致しなくて詰まったのでメモ。まだまだ未熟なエンジニアなので許してください_m(-_-)m_ プリミティブ型の数値と参照型の数値をそのまま比較したいときは? 参照型のequalsメソッドを使いましょう。 compare.java Long num1 = 1L; long num2 = 1l; if(num1==num2) { //1 System.out.println("true"); } else { System.out.println("false"); } if(num1.equals(num2)) { //2 System.out.println("true"); } else { System.out.println("false"); } 「1」のような比較を行うと、必ずfalseになりますが、「2」のような比較を行えば、数値が合っていればtrueになります。 後書き 記念すべきQiita初投稿記事でした。 プリミティブ型と参照型はスクリプト言語しかやったことない人には馴染みがない概念だと思いますが(僕も最初そうでした)、しっかり理解しておくべきことなので、Java初心者の方は頑張って理解しましょう(何様)。 僕も初心者赤ちゃんエンジニアなので頑張ります。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[paiza]スキルチェック見本問題 Java 一番小さい値 (paizaランク D 相当)

初めに 今回はpaizaラーニングの以下のスキルチェック見本問題に挑戦します。 見本問題なのでコードの公開は自由です。 一番小さい値 (paizaランク D 相当) 問題: 5 つの正の整数が入力されるので、最も小さい数字を出力して下さい。 入力例1 10 12 4 8 46 出力例1 4 解答コード 以下が、正解のコードですが、なかなかできませんでした。 public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); //100までの数字なので、answerに最大値を設定しておく int answer = 101; //数字は5つ与えられるので、iは0-4までの変化をする for(int i = 0; i < 5; i++){ //標準入力の値をnに代入する int n = sc.nextInt(); //nがanswerより小さければansewerにnを入れる //最終的にanswerに最小値が入る if(n < answer){ answer = n; } } System.out.println(answer); } } 自分なりに考えたけどできなかった記録 import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String line = sc.nextLine(); System.out.println("XXXXXX"); } } まずは、全行読み込みする import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 行がある間は読み込み while(sc.hasNextLine()){ String line = sc.nextLine(); System.out.println(line); } } } この時点での出力結果 10 12 4 8 46 配列に格納する import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); ArrayList<String> array = new ArrayList<String>(); // 行がある間は読み込み while(sc.hasNextLine()){ String line = sc.nextLine(); array.add(line); } for(String i :array){ System.out.println(i); } } }
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

VCに誰かが入った時に通知してくれるbotを作る【Discord/Java】

はじめに 身内用に誰かがDiscordのVCに入ったときに通知してくれるbotを作ったので覚え書き。 環境 Java Gradle Javacord Javacordの導入 JavacordはDiscord botをJavaで開発するためのライブラリです。 以下のようにgradleファイルに記述します。 gradle.build repositories { mavenCentral() } dependencies { implementation 'org.javacord:javacord:バージョン' } Discord botアカウントの設定 こちらとかを参考にしつつbotを作成する。 ログインする DiscordApi api = new DiscordApiBuilder() .setToken("ここにbotトークンを入れる") .login().join(); botトークンに関しては直接記述したり、環境変数に入れてSystem.getenv().get("TOKEN")とかで取得すると良いと思います。 VCに誰かが入ったときを検知する api.addServerVoiceChannelMemberJoinListener(event -> {}); addServerVoiceChannelMemberJoinListenerはサーバー上の誰かがVCに接続したときに呼ばれます。 ラムダ式を用いてeventにイベント情報を格納します。 メッセージを送る String user = event.getUser().getName(); String channel = event.getChannel().getName(); if (event.isMove()) return; new MessageBuilder() .append(user, MessageDecoration.UNDERLINE) .append(" が ") .append(channel, MessageDecoration.BOLD) .append(" に入ったよん") .send(api.getTextChannelsByName("通知先のチャンネル名").iterator().next()); userにVCに接続した人の名前、channelに接続したチャンネル名を格納します。 ユーザが移動する度にメッセージが送られるとうるさいのでisMove()の際は処理を終了します。 MessageBuilderを生成してメッセージを作り、送信します。 MessageDecorationをパラメータに指定すると文字を太字にしたり下線を引いたりできます。 appendで文字列の結合、sendで指定先のテキストチャンネルにメッセージを送信します。 getTextChannelsByName()を用いて名前でチャンネル名を検索し、検索結果のコレクションの先頭のチャンネルを取得します。 メッセージのところは自分の好きなように編集すると良いと思います。 動かす プログラムを実行してDiscordサーバーで動かします! botが通知メッセージを送ってくれます。 おわりに このbotを導入したら作業VCに人が集まりやすくなりました。 VCに入った時に通知があれば気づきやすいですからね。 最終的なコードを貼っておきます。 参考文献
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む