Java
JJUG CCC 2023 Spring に参加しました! 今回、なんとJJUG CCC 参加9年目にして初登壇してきました。色んな人から「えっ、初?」って言われましたw1 セッションは、javap を使ってクラスファイルを読んでみよう という、ややマニアックな内容です。頑張って…
JJUG CCC 2022 Fall に参加しました! オンライン開催も、今回で4回目。 今回はスタッフとして参加1して、ちょっとだけ司会をしました。スムーズに進行できていたら幸いです。 今回、特によかったなーと思ったのが、完成度の高いもちださんのセッション。 ま…
Java のサポートされているエンコーディングの一覧を見ていると、UTF-16, UTF-16BE, UTF-16LE, x-UTF-16LE-BOM とあって、なにが違うんだろうと思って調べてみました。 まとめると、読み・書き時のバイトオーダー (BO) 1 と書き込み時の BOM (Byte Order Mar…
年が省略されている日付(月/日)の場合 まずは、DateTimeFormatter を用意します。 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd"); 次に、日付を MonthDay クラスでパースします。 MonthDay monthDay = MonthDay.parse("07/18", for…
Java のラムダ式が、どのようにコンパイルされ実行されているか気になりますよね。 そこで、クラスファイルを分析して、その中身を調べてみました。 なお、今回は OpenJDK 17.0.1 を使って調べています。 バージョンによって挙動が異なる場合があるので、ご…
前回の記事(Javaのバージョン別、1行ずつファイルを読む方法まとめ)への感想で、このような話がありました。 丸々読み込む方法のまとめもお願いします!— ユースケ (山本裕介) (@yusuke) May 3, 2021 というわけで、今回はテキストファイルを一括で読み込…
Java でファイルを読み込む処理は、バージョンが上がるごとにどんどん簡単に書けるようになっていきました。 今回は、どれだけ簡単になっていったかを Java のバージョンごとにまとめて説明します。 なお、ここでは以下の処理を行うコードをもとにしています…
JDK 1.0 (Java 1.0.2) を入手したので、GitHub に置いておきました。 https://github.com/YujiSoftware/JDK1.0 なんと、Windows 10 上でも動きます。 あと、src.zip も展開して置いた ので、GitHub 上で読めます。 Java 考古学者のみなさま、ぜひご活用くだ…
JJUG CCC 2020 Fall に参加しました! 今回は、初のオンライン開催ということで、いつもと違って自宅からの視聴。 でも、twitter のハッシュタグを見るとみんなでわいわいやってる感は変わらず、質疑応答もありでいつもと変わらず楽しめました。 それに加え…
Java の Object#Clone() メソッドは throws CloneNotSupportedException が宣言されています。 protected native Object clone() throws CloneNotSupportedException; しかし、クラスが Cloneable インタフェースを実装していれば CloneNotSupportedExceptio…
Stack Overflow の質問には、その内容を示すタグが付与されています。 このタグ、よく見ると「言語」+ 「フレームワークやライブラリの名称」という構成が多いです。 つまり、これを分析すれば、言語ごとに質問の多い(つまり、よく使われている、人気がある…
JJUG CCC 2018 Fall に行ってきました!今回、興味のあるディープな JVM の話とかアーキテクチャ設計をたくさん聞けて、個人的にはとてもテンションが上がりました! 「Deep dive into instanceof」のように、HotSpot VM の深い話を知れたり。仕事で役に立つ…
Arrays.asList(T... a) というメソッドについてググると、「このメソッドで返ってくる List は、add や remove ができないので注意しましょう」ということが良く書かれています。 でも、「なぜできないのか?」という点については書かれていないことが多いの…
Oracle JDK の場合 図にまとめてみました。 こうしてみると、サポート期間5~6年って結構長いなーと思います。 First Release Date Final Public Release Date Final Public Release Version Java 1.3 2000年5月8日 2006年12月 Java 1.3.1 Update 20 Java 1.…
JJUG CCC 2018 Spring に行ってきました! 実は、仕事では最近 Java から離れているのですが*1、それでも CCC (クロスコミュニティカンファレンス)と銘打ってるだけあってやっぱり参考になる話がいろいろありました。 特に、同じ業界の方も登壇されていて…
Java は、バージョン 10 以降タイムベースリリースに変わりました。 それに合わせて、バージョン表記がまた変わったので概要をまとめました。*1 詳細は JEP 322: Time-Based Release Versioning を参照。 バージョン番号 $FEATURE.$INTERIM.$UPDATE.$PATCH …
JJUG CCC 2017 Fall に行ってきました! 今回は自分好みな「普段使ってるアレ、深掘りするとこうなってるんだぜ」的なセッションをいろいろ聞けて大満足でした。 印象に残っているのが「DBのTCPプロトコルとJDBC / yohei yamana さん」。 「かっちりした Pos…
11月18日(土) に開催されるJJUG CCC 2017 Fall の「時間別」&「カテゴリ別」タイムテーブル(セッション一覧)が欲しかったので、前回同様にページを作りました! JJUG CCC 2017 Fall - Timetable (非公式) 今回の改良点はお気に入りボタンがわかりやすくな…
前々からこの実装はどうなの!?と言われていた String クラスの CharSequence を引数に取る replace メソッド。 これがついに Java 9 でリファクタリングされていました! 今まであった問題 String クラスの replace (CharSequence target, CharSequence re…
本日、ついに JavaSE 9 がリリースされました! そこで、かねてから噂になっていた JEP 254: Compact Strings がどのように実装されているのか調べてみました。 Compact Strings の概要 これまで String クラスや StringBuilder クラスなどの内部では、文字…
たまに検索エンジンなどからリンクを辿って Java API ドキュメント (Javadoc) のページを開くと、古い Java 6 や Java 7 のページが表示されて (´・ω・`) となることがあります。 自分は Java 8 の API ドキュメントが見たいのに…。 そんなときに、自動で J…
かつて https://duke.kenai.com/ で配布されていた Duke の画像を再配布するページを作りました! Redistribution of Duke images これは何? Java のマスコットキャラクター "Duke" の画像は、これまで https://duke.kenai.com/ で BSDライセンスのもと配布…
JJUG CCC 2017 Spring に行ってきました!(感想をあとで書く)さて、まだ公式で公開されていなかったので、残念ながら時間がかぶってしまって参加できなかったセッションもあったので、あとで読むために現時点で発表者の方が公開されている資料一覧をまとめ…
5月20日(土) に開催されるJJUG CCC 2017 Spring の「時間別」タイムテーブル(セッション一覧)が欲しかったので、前回同様にページを作りました! JJUG CCC 2017 Spring - Timetable (非公式) 新機能「お気に入り登録」 今回から「セッションのお気に入り登…
static なメンバー・クラス*1は、以下のように "private" として宣言できます。 この時、"java Main$Internal" と打ってこの private クラス内の main メソッドを起動できるのでしょうか。 class Main{ private static class Internal{ public static void m…
Java API は、バージョンが上がるごとにどんどん大きくなっています。 でも、「大きくなった」といってもピンとこなかったので、目安としてコード行数を確認してみました。 Java API のコード行数 調べた結果がこちら。 バージョン コード行数 jdk1.1.8 63,4…
NaN や Infinity を int にキャストなんて普通はしないと思うのですが、やってみたらこうなりました。 (int)Double.NaN == 0 (int)Double.POSITIVE_INFINITY == Integer.MAX_VALUE (int)Double.NEGATIVE_INIFINITY == Integer.MIN_VALUE public static void …
Java 8 Update 102 で、java.lang.VerifyError: Bad local variable type が発生するクラスファイルが生成されてしまうバグが修正されていました
Java 8 Update 102 のリリースノートを見ていたら、[JDK-8066871] java.lang.VerifyError: Bad local variable type - local final String - Java Bug System というバグがあったので調べてみました。 どんなバグ? バグが起きるのは、ローカル変数が "final…
Java SE 8 Update 92 では動いていたのに、Update 102 にしたら JAXB で XML を unmarshal したときにプロパティに値がセットされなくなるパターンがあるというお話。 自分は、RSS のパースではまりました。 どんなコード? 下記のようなデフォルト名前空間…
JJUG CCC 2016 Fall に行ってきました! 今回のセッションの中で一番気になったのが id:irof さんの「どうしようJUnit5」。 まだ、正式リリース前ですが次の JUnit はどうなっていく予定なのか、JUnit4 との関係はなどがコンパクトにまとまっていとても参考…