- 0.0.1. 【Java】Javaを基礎から固めてオブジェクト指向を身につける①
- 0.0.2. Java Silver SE11を90%正解で合格するまでの道のり
- 0.0.3. Java再入門 ~Java11 ジェネリクス、ダイアモンド演算子
- 0.0.4. 勉強会用のJavaの資料を作った話
- 0.0.5. プログラミング初心者が書いたオブジェクト指向について①
- 0.0.6. javaでCUIオセロの制作 その2
- 0.0.7. XiaomiADBFastbootToolsが文字化けしていたときの対処法
- 0.0.8. [Java17] 新機能 Sealed Classes の詳細
- 0.0.9. Java17でEither書く
- 0.0.10. WSL2上でIntelliJ IDEAでJava開発
- 0.0.11. (JAVA勉強用メモ)8. 関数型インタフェース、ラムダ式
- 0.0.12. [Java基礎⑧] 二次元配列の基本・for文/拡張for文で出力
- 0.1. 初めに
- 0.2. 二次元配列とは
- 1. JavaGold 11とは
【Java】Javaを基礎から固めてオブジェクト指向を身につける①
#目的
* DMMWEBCAPカリキュラムのアウトプット
* Javaを通してオブジェクト指向について知る#実際の手順と実例
###1.オブジェクト指向とはカリキュラムに入る前にオブジェクト指向が何かわからなかったので、そこから触れていきます。
カリキュラム内の定義だと下記の通り
> オブジェクト指向とは、拡張性や保守性の高いプログラムを書くための考え方です。
プログラムが大規模になると複雑になりすぎて、プログラムの追加や修正が難しくなります。オブジェクト指向プログラミングであれば、そのような問題に悩まずに、大規模なプログラムを作成できます。これもJavaが普及した1つの要因です。それならオブジェクト指向は?と聞かれたら、
「拡張性や保守性の高いプログラムを書くための考え方です。」と
答えればいいのか!と思った矢先に、他の記事を見てみると、> オブジェクト指向とは?その答えは1つじゃない!
という記事を発見。
開発工程によってオブジェクト指向の捉え方が違うらしい。参照
https://products.sint.co.jp/topsic/blog/obje
Java Silver SE11を90%正解で合格するまでの道のり
# はじめに
この度、Java Silver SE11 を受験し、無事合格しました!
合格するまでの道のりを、備忘録として残したいと思います。
どの教材を何%正解して受験に挑んだのか、具体的な記録も残してあるので、よければのぞいていってください。# 目次
* [Java Silverってなに?](https://qiita.com/uzura56/items/767915fd42525e052dee#java-silver%E3%81%A3%E3%81%A6%E3%81%AA%E3%81%AB)
* [勉強スタート時の私のレベル](https://qiita.com/uzura56/items/767915fd42525e052dee#%E5%8B%89%E5%BC%B7%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E6%99%82%E3%81%AE%E7%A7%81%E3%81%AE%E3%83%AC%E3%83%99%E3%83%AB)
* [受験前の準備](https://qiita.com/uzura56/items/767915fd42525e
Java再入門 ~Java11 ジェネリクス、ダイアモンド演算子
# ジェネリクス
ジェネリクスは型をパラメータ化することができる仕組みで、Java11どころかJava5からあります。
使わないとListとかMapとかを使えないに等しいような状態になるので、まったく知らないという人もいないと思いますが、自分で型パラメータの宣言をしたことはなかったり、extendsやsuperが出てくると自信がなくなったりする人は少なくないのではないでしょうか。自分で宣言して利用しようとしたときに、まず悩むのはどこに書いたらいいのかです。以下の3パターンあります。
1. クラスに宣言する
2. メソッドに宣言する
3. コンストラクタに宣言する個人的にコンストラクタに宣言したくなったことは一度もないのですが、できるかどうかでいうとできます。
クラスやコンストラクタに宣言する場合の例は以下です。“`java
public class GenericsClass{ T obj;
A piyo;
Huga huga;
public Gener
勉強会用のJavaの資料を作った話
# まとめ
勉強会用の資料を作ったので、共有を楽にするためにアップロードしておいたという話。
# 勉強会について
現在の自分の職場にて新しく勉強会を開くことになり、自分が先陣を切ることにした。
ただし、SESで単独で派遣されている身なので、他の社員の技術レベルは一切わからない。
そのため、下記のような思考で勉強会用の資料を作成した。* すくなくとも、文法を調べる資料は社内にある
* 相手の技術レベルはわからない
* 低いレベルの人でもわかる課題を作りたい
* できるだけ、次回に「良い設計とはなにか」を伝えられるような課題にしたい
* できる人用の内容も盛り込んでおきたい
* どこにでもありそうなかんたんな課題を比較的高度な設計方法によって作成すると新規性が出そう# 資料
そうした結果できたのが、下記の資料である。
プログラミング初心者が書いたオブジェクト指向について①
はじめに
————-
今までPHP/Laravelと学習を進めてきたのですが、そもそもコードの内容をあまり理解しきれていない現状に気づき
色々ありまして現在はJavaの学習を進めています。Javaではオブジェクト指向という考えが非常に重要であり、またその考え方は他の言語にも
共通していくというのを知ったのでアウトプットとして基礎的なことをまとめていきたいと思います。オブジェクト指向とは
———–
**プログラムの機能や役割を区別し、それぞれを部品(オブジェクト)として組み合わせることで1つのプログラムを作ること。**こうやって書くとふーんって感じですが、**現実の世界でも色んな物体が存在して組み合わさっている**と考えると僕は腹落ちしました!
例えば…
・車
→タイヤ、ハンドル、アクセル、ブレーキなどなど
・家
→屋根、扉、壁、床などなど
・人間
→手、足、頭、胴体などなど**現実の世界と同じようにプログラミングの世界も考えた方がわかりやすいね!的な発想がオブジェクト指向なのかなぁと感じました。**
オブジェクト指向の専門用語
–
javaでCUIオセロの制作 その2
#これまで
[前回](https://qiita.com/ymt8781/private/e11a4a70a1cbbbebb55b)でオセロを完成させました。そこにさらにプラスで機能を付けます。今回は対戦相手(CPU)の追加をしていこうと思います。#やり方
CPUのターンで置ける場所を探してから、そこに置くようにします。端からマスに置けるか(裏返せる駒があるか)をチェックしていき、該当したらその場所に置きます。前回は裏返しと可否のチェックが一つのメソッドになっていたので、それを分けようと思います。##変更前
上方向のマスをチェックするメソッドです。これと同じようなものが9方向分あります。裏返せる駒があるかチェックし、裏返せた分だけの数字を返します。“`java:前回
public int turnUp(int y, int x) {int targetY = y – 1;
if(targetY < 0) { return 0; } while(bored[targetY][x] != 0 &&
XiaomiADBFastbootToolsが文字化けしていたときの対処法
私の使っているスマホ、RedmiNote9Tで充電ケーブルを挿すたびに画面が暗転しめっちゃ早く充電してまっせ〜!感を出すだけのこの表示を消したいと思いXiaomiADBFastbootToolsをインストールしてみました。
XiaomiADBFastbootTools
https://smartasw.com/archives/8039
サイトの通りにJava SE v17をMacにインストールし再起動してからXiaomiADBFastbootToolsを起動すると以下のように文字化けをしてしまいました。
[Java17] 新機能 Sealed Classes の詳細# この記事について
Java15からpreview機能としてテストされ,Java17で正式に導入された sealed class について紹介します.クラスやインターフェースを継承・実装できるものを制限できます.
以下のように,既存の要素を変更するものではありません.
+ `friend` のような新しいアクセス制御を提供するものではない
+ `final` のはたらきを変更するものでは決してない## 出展
この記事は基本的に [JEP 409](https://openjdk.java.net/jeps/409) に基づきます.また,各所で[Java言語仕様](https://docs.oracle.com/javase/specs/jls/se17/html/index.html)を参照しています.
# Sealedクラスの宣言
クラスに `sealed` 修飾子をつけるとSealedクラスになります.さらに,`extends`節や`implements`節の後に`permits`節を付けて,自身を継承可能なクラスを明示できます.
次の例では,`Shape`
Java17でEither書く
# はじめに
たまたま最近、業務でエラーかノーマルを保持するオブジェクトのレビューが上がってきた時に、「Eitherにすれば?」と言ったのだが、Javaには`Optional`はあるが`Either`に相当するようなクラスがない。
作るとしたらこんな感じかな〜、というのをリリースされたLTS版Java17を使いながら書いてみる。(結局、レビュー指摘はコミットされなかったが・・・。)# Either
“`java:Either.java
import java.util.function.Function;
import java.util.function.Consumer;//Eitherインターフェイス
public sealed interface Eitherpermits Either.Left,Either.Right{
public boolean isLeft();default boolean isRight(){
return !this.isLeft();
}public Either
f
WSL2上でIntelliJ IDEAでJava開発
## WSL2上の実行環境で、WindowsからIntelliJ IDEA Communityを起動して開発する
### Windows側
– IntelliJ IDEA Communityをインストール
– WSL2をインストール### WSL2側
– WSL2上にJDKをインストール
“`sh
$ sudo apt update
$ sudo apt install openjdk-11-jdk#確認
$ sudo update-alternatives –list java
/usr/lib/jvm/java-11-openjdk-amd64/bin/java# JAVA_HOMEの設定
$ export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64$ java -version
openjdk version “11.0.11” 2021-04-20
OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.20.04)
OpenJDK 64-
(JAVA勉強用メモ)8. 関数型インタフェース、ラムダ式
## 関数型インタフェース
抽象メソッドを1つだけ持つインタフェース## ラムダ式
関数型インタフェースの実装を簡易に行う記述方法“`java:Sample.java
public interface Sample {
void sample(String val);
}
“`“`java:Main.java
public class Main {
public static void main(String[] args) {
Sample s = (val) -> {
System.out.println(“Hello, ” + val);
};
s.sample(“Qiita”); // “Hello, Qiita”
}
}
“`## ラムダ式の記述省略
“`java
Function f = (int a, int b) -> { return a * b; }; // 基本形
Function f = (a, b) -> { return a * b; }; // 引数の型を省略可
Fu
[Java基礎⑧] 二次元配列の基本・for文/拡張for文で出力
初めに
今回、二次元配列を学習し、その中身をfor文で取り出すということを
行いました。二次元配列とは
2つのインデックスで要素を指定する配列のこと
“`java:
//ひとまず3つの配列を用意します。
String[] teamA = {“りんご”,”なし”,”洋梨”};
String[] teamB = {“青森”,”岩手”,”宮城”};
String[] teamC = {“お皿”,”コップ”,”茶碗”};//配列に配列を格納します。
String[][] teams = {teamA,teamB,teamC}//以下では、「りんご」が出力されます。
System.out.print(teams[0][0])
//以下では、「青森」が出力されます。
System.out.print(teams[1][0])
//以下では、「コップ」が出力されます。
System.out.print(teams[2][1])//インデックスの更新 「りんご」→「みかん」へ
team[0][0] = “みかん”;
//「みかん」が出力されます
【初心者】インターフェースについて
#はじめに
社内研修で、インターフェースについて教えてもらった。「インターフェースとは、メソッドの定義と変数の定義を行うだけで、処理は一切行わない。」
なんとなく意味はわかったのだが、より理解を深めるために記事を書いていこうと思う。
#インターフェースとは
どのようなものなのかネットで調べていき、次のような内容であることがわかる。「変数の定義をしておらず、抽象メソッド(処理内容を記述していないメソッド)のみを
定義したものである。」より理解を深めていくために、ソースコードを書いていこうと思う。
#インターフェースの実装
インターフェースの宣言から実装までの流れを次のように行う。・インターフェースの宣言
クラス名の前に「interface」を付けてクラス宣言を行う。
メソッドの宣言のみを行い(戻り値、引数の指定はできる)、処理は記述しない。“`
public interface test1{
public void method();
//処理は記述しない。
}“`
・インターフェースの実装
クラス作成後、「impleme
【初心者】抽象クラスについて
#はじめに
会社でJavaの研修を受けた時、なんとなくわかったという感じだった。
自分の中で理解を深めるために、記事を書いておく。#社内で教えてもらった抽象クラス
社内研修で説明では、次のような説明をされた。
「継承し、オーバーライドすることを前提としてクラスであり、
そこで定義されたメソッド名を統一して子クラスで使用したい時に使用するものである。」・・・この説明だけをされても意味が分からなかった。
そこで、調べて理解を深めていくことにした。#調べた結果
調べていくとつぎのような内容が多くあった。「抽象クラスとは抽象メソッドをもつクラスのことである。」
「抽象メソッドって何?」となった。そこで、抽象メソッドについて調べていく。
#抽象メソッドとは
調べると、「処理内容を記述しないメソッドである」との記述があった。
これを見た時、抽象メソッドとは次のようなものであると勝手に解釈した。処理が書いてあるメソッドが、何(処理)をするかが「具体的」に宣言されたものがメソッド
である一方で、何(処理)をするかが「わからない、抽象的」に宣
実務未経験でJavaGold SE11を2か月で取得したお話
JavaGold 11とは
JavaGoldは運営団体『オラクル社』が発行するベンダー資格になります。
そのなかでも、Javaは Bronze Silver Gold の3つに分かれており
その中でも最上位最新の資格であるのが『JavaGold SE 11』になります。
なお、読みやすいためみんなが省略していますが資格の正式名称は『Oracle Certified Java Programmer, Gold SE 8』です。
資格取得にあたる試験
(JAVA勉強用メモ)6. インスタンスとメソッド
## ガベージコレクション
インスタンスはメモリ上に生成されるため、メモリ空間を使い切ってしまいかねない。
JAVAでは`ガベージコレクタ`が使わなくなったインスタンスをメモリ上から探して破棄し、メモリを解放する。
これを`ガベージコレクション`と呼ぶ。GCはプログラマが制御することはできず、JVMがタイミングを判断し実行する。
gcメソッドというGCを促すメソッドもあるが、必ずGCが起こるものではない。GCが起こる代表的なタイミングは『nullが代入されたとき』。
“`java
Object a = new Object(); // ①
Object b = new Object(); // ②
Object c = b; // ②
a = null; // メモリ①への参照がなくなるのでGC対象になる。
b = null; // メモリ②はまだ`c`から参照されているのでGC対象にならない。
“`## Staticフィールド
クラスファイルのロード後、
staticフィールド・staticメソッドは『s
Java再入門 JVMオプション
JVMオプションについてのまとめです。
以下が前提になっているので、前提が合わない場合はスルーしてください。* サーバサイドのオンライン処理や常駐処理向けに書いています。
* 想定しているJavaのバージョンは11です。
* リソースは結構贅沢に割り当てられる環境です。# JITコンパイラ
| 設定値 | 開発 | 性能 | 本番 | 用途 |
| ———————————————————— | —- | —- | —- | ———————————————————— |
| server
Java17の新機能をざっくり紹介
# この記事について
2021/9/14 にリリースされた JDK17 の新機能をざっくりまとめます.[^sad] 情報源は基本的に[OpenJDKのサイト](https://openjdk.java.net/projects/jdk/17/)です.
[^sad]: 以前はリリース前から新バージョンの記事がたくさんあったのに,最近減ってきた気がする…
特に筆者が詳しくない分野については雑に要約してあります.それぞれの詳細は JEP の原文や他の記事などを参照してください.
## [JEP 306](https://openjdk.java.net/jeps/306): 常に厳密な浮動小数点演算の復活[^restore]
[^restore]: Java SE 1.2 より前と同じ挙動に戻ったらしいです.
`strictfp` 指定時と通常時の差を無くし,浮動小数点演算が常に厳密になりました.ほとんどのユーザーには大して影響がないと思われます.
現代のプロセッサでは厳密・非厳密に分けるメリットが薄れたということのようです. `strictfp` の使用は無意味になったので,
【Java】 spullara/mustacheを使ってRuby風の文字列の式展開を行う
## 概要
Javaで文字列中に変数の値を埋め込みたいという場合、+演算子でつなぐか`String.format`を使うかと言ったところが、主な選択肢になるような気がします。ただ、どちらの方法も個人的にはあまりソースの可読性が良いとは感じず、できれば[【Ruby】 式展開を使って文字列の中で変数を使おう](https://pikawaka.com/ruby/formula-expand)の記事にあるような形で、変数を埋め込みたいところです。
ということで、今回はなんとかRubyのような感じでJavaでも書けないかということで、記事を書いてみます。## 対応方針
* [こちら](https://ja.stackoverflow.com/a/2974)のstackoverflowの記事にあるように、`Mushtache`というテンプレートエンジンを使えば、それっぽく書けるように感じました。ということで、Mushtacheを使って実装してみる方針とします。## 前提など
* Mushtacheについて、調べるといくつかライブラリが存在するようですが、今回は[spullara/must
初心者が1から始めるJava開発-Vol.6- Javaの可視性
Javaには可視性という概念があります。(ほかの言語にもありますが、使いこなせないのでちゃんと説明することはできない)
可視性を理解せずに実装すると、危険なので必ず理解しましょう。
といいつつ、この記事ではメソッド形式での紹介にとどめます。※毎度のことながら、こう書いた方がわかりやすい、そこちょっと認識違うとかあればぜひコメントなどで教えてください。
#可視性とは?
可視性とは「どこまで見えるか」「どこまで使えるか」のようなイメージです。
Vol.5まで見ている前提でいうと、可視性によって「どのクラスで使えるか」という観点になります。#可視性の種類
Javaにはクラス、メソッド、などに用いるか姿勢の種類が大きく4つあります。
– public
– protected
– package private
– private上から順に広範囲で利用することができます。
※下記ページのAccess Levelsの表を参照
https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html##