Java

JJUG CCC 2018 Fall( #jjug_ccc ) - セッション資料の一覧

JJUG CCC 2018 Fall に行ってきました!今回、興味のあるディープな JVM の話とかアーキテクチャ設計をたくさん聞けて、個人的にはとてもテンションが上がりました! 「Deep dive into instanceof」のように、HotSpot VM の深い話を知れたり。仕事で役に立つ…

Arrays.asList(T... a) は、なぜ add や remove ができないのか?

Arrays.asList(T... a) というメソッドについてググると、「このメソッドで返ってくる List は、add や remove ができないので注意しましょう」ということが良く書かれています。 でも、「なぜできないのか?」という点については書かれていないことが多いの…

Java のリリース日とEOLのまとめ

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 ( #jjug_ccc ) - セッション資料の一覧

JJUG CCC 2018 Spring に行ってきました! 実は、仕事では最近 Java から離れているのですが*1、それでも CCC (クロスコミュニティカンファレンス)と銘打ってるだけあってやっぱり参考になる話がいろいろありました。 特に、同じ業界の方も登壇されていて…

Java 10 で変わる Java のバージョン表記

Java は、バージョン 10 以降タイムベースリリースに変わりました。 それに合わせて、バージョン表記がまた変わったので概要をまとめました。*1 詳細は JEP 322: Time-Based Release Versioning を参照。 バージョン番号 $FEATURE.$INTERIM.$UPDATE.$PATCH …

JJUG CCC 2017 Fall ( #jjug_ccc ) - セッション資料の一覧

JJUG CCC 2017 Fall に行ってきました! 今回は自分好みな「普段使ってるアレ、深掘りするとこうなってるんだぜ」的なセッションをいろいろ聞けて大満足でした。 印象に残っているのが「DBのTCPプロトコルとJDBC / yohei yamana さん」。 「かっちりした Pos…

今回も、JJUG CCC 2017 Fall の時間別タイムテーブル(セッション一覧)を作りました

11月18日(土) に開催されるJJUG CCC 2017 Fall の「時間別」&「カテゴリ別」タイムテーブル(セッション一覧)が欲しかったので、前回同様にページを作りました! JJUG CCC 2017 Fall - Timetable (非公式) 今回の改良点はお気に入りボタンがわかりやすくな…

Java9 で String クラスがリファクタリングされていました。(replace メソッド編)

前々からこの実装はどうなの!?と言われていた String クラスの CharSequence を引数に取る replace メソッド。 これがついに Java 9 でリファクタリングされていました! 今まであった問題 String クラスの replace (CharSequence target, CharSequence re…

Java9 でも String クラスがリファクタリングされていました (JEP 254: Compact Strings 編)

本日、ついに JavaSE 9 がリリースされました! そこで、かねてから噂になっていた JEP 254: Compact Strings がどのように実装されているのか調べてみました。 Compact Strings の概要 これまで String クラスや StringBuilder クラスなどの内部では、文字…

Java 6, 7 の API ドキュメントを開いた時に、自動で Java 8 のドキュメントにリダイレクトしてくれるツール "JavaAPI-Redirector" を作りました!

たまに検索エンジンなどからリンクを辿って Java API ドキュメント (Javadoc) のページを開くと、古い Java 6 や Java 7 のページが表示されて (´・ω・`) となることがあります。 自分は Java 8 の API ドキュメントが見たいのに…。 そんなときに、自動で J…

Duke 画像の再配布ページを作りました

かつて https://duke.kenai.com/ で配布されていた Duke の画像を再配布するページを作りました! Redistribution of Duke images これは何? Java のマスコットキャラクター "Duke" の画像は、これまで https://duke.kenai.com/ で BSDライセンスのもと配布…

JJUG CCC 2017 Spring ( #jjug_ccc ) - セッション資料の一覧

JJUG CCC 2017 Spring に行ってきました!(感想をあとで書く)さて、まだ公式で公開されていなかったので、残念ながら時間がかぶってしまって参加できなかったセッションもあったので、あとで読むために現時点で発表者の方が公開されている資料一覧をまとめ…

今回も、JJUG CCC 2017 Spring の時間別タイムテーブル(セッション一覧)を作りました

5月20日(土) に開催されるJJUG CCC 2017 Spring の「時間別」タイムテーブル(セッション一覧)が欲しかったので、前回同様にページを作りました! JJUG CCC 2017 Spring - Timetable (非公式) 新機能「お気に入り登録」 今回から「セッションのお気に入り登…

main メソッドは private クラスに書いても動く?

static なメンバー・クラス*1は、以下のように "private" として宣言できます。 この時、"java Main$Internal" と打ってこの private クラス内の main メソッドを起動できるのでしょうか。 class Main{ private static class Internal{ public static void m…

Java API の規模がどれだけ大きくなったか気になったので、コード行数を確認してみました

Java API は、バージョンが上がるごとにどんどん大きくなっています。 でも、「大きくなった」といってもピンとこなかったので、目安としてコード行数を確認してみました。 Java API のコード行数 調べた結果がこちら。 バージョン コード行数 jdk1.1.8 63,4…

Java で、NaN や Infinity を int にキャストしたときの値

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 8 Update 102 で、JAXB で XML を unmarshal したときの挙動が変わっていました。

Java SE 8 Update 92 では動いていたのに、Update 102 にしたら JAXB で XML を unmarshal したときにプロパティに値がセットされなくなるパターンがあるというお話。 自分は、RSS のパースではまりました。 どんなコード? 下記のようなデフォルト名前空間…

JJUG CCC 2016 Fall ( #jjug_ccc ) - セッション資料の一覧へのリンク

JJUG CCC 2016 Fall に行ってきました! 今回のセッションの中で一番気になったのが id:irof さんの「どうしようJUnit5」。 まだ、正式リリース前ですが次の JUnit はどうなっていく予定なのか、JUnit4 との関係はなどがコンパクトにまとまっていとても参考…

JJUG CCC 2016 Fall の時間別タイムテーブル(セッション一覧)を勝手に作りました

JJUG CCC の「時間別」タイムテーブル(セッション一覧)が欲しかったので、前回同様に調整したページを作りました。JJUG CCC 2016 Fall - Timetable (非公式) GitHub のページとして公開していますので、もっとこうした方がいいよ!というのがありましたら…

技術系の勉強会のスライドをツイートするbot @tech_slideshare を作りました!

勉強会スライドbot @tech_slideshare を作りました! ぜひ、ご利用ください! なにこれ? 技術系の勉強会だと、大変ありがたいことにたくさんの方があとでスライドを公開してくれています。 そこで、そんなスライドをまとめてツイートしてくれる bot があっ…

Javaのメソッド名の長さは、65535文字まで(正確には、UTF8でコード化したときの長さが65535byteまで)

Java のメソッド名の最大長は、以下のように規定されていました。 *1 アルファベットのみだと65535文字、日本語だとその半分以下になるようです。結構長いですね…。 フィールド名、メソッド名、フィールド・ディスクリプタ、メソッド・ディスクリプタ、その…

JJUG CCC 2016 Spring ( #jjug_ccc ) - セッション資料の一覧

JJUG CCC 2016 Spring に行ってきました! 今回は、改善系のネタを中心に聞いていました。 この手の話はやっぱり、勉強会っぽくて、そして自分の世界が広がる(そんなやり方があったのか!っておどろく)のでとても好きです。 最近、自分の仕事がプロジェク…

JJUG CCC 2016 Spring の スマートフォン用 タイムテーブル(セッション一覧)を勝手に作りました

JJUG CCC のタイムテーブル(セッション一覧)が、スマートフォンだと見づらかったので、スマートフォン用にレイアウトを調整したページを作りました*1。 JJUG CCC 2016 Spring - Timetable (非公式) GitHub のページとして公開していますので、もっとこうし…

Java で C# の out パラメータみたいなことをやってみる

Java で C# の out パラメータみたいなことができないかということを考えてみたので、ざっとまとめてみます。 そもそも、C# の out パラメータって? C# の out パラメータは、戻り値だけでなく、引数から値を返したいときに使います。例えば、文字列を数値…

JJUG CCC 2015 Spring ( #jjug_ccc ) - セッション資料の一覧 - 地平線に行く

JJUG CCC 2015 Spring に行ってきました! 今回、印象的だったのが「Java 8、私たちはこういう風に使っています!」という話が多数出てきたこと。 去年の JJUG CCC Spring だとまだ言語仕様の紹介程度だったので、この一年で一気に広がったんだなぁというの…

Java SE 8 の日本語 Java doc (API) のURLが変わっていました。

Java SE 8 の日本語 Java doc (API) のページが変更になっていました。 変更前 https://docs.oracle.com/javase/jp/8/api/ 変更後 http://docs.oracle.com/javase/jp/8/docs/api/ いつごろかわからないのですが、Twitter で検索してみた限り2015年3月7日頃?…

Java SE 8 Update 31 で、ByteArrayOutputStream のサイズ上限が拡大していました

ByteArrayOutputStream は、配列を出力ストリームとして扱うクラスです。 なので、このストリームのサイズ上限はシステムの配列サイズの上限に等しい…、はずでした。 しかし、Java SE 8 Update 25 まではそうなっていなかったようです。 [#JDK-8055949] Byte…

JJUG CCC 2014 Fall ( #jjug_ccc ) - セッション資料の一覧

JJUG CCC 2014 Fall に行ってきました! 今回は、前回とちょっと変わって、技術的な話だけでなくビジネス的な話もあってすごい面白かったです! (JJUG CCC なのに、Javaの話はあんまりないですよーw っていうお断りをたびたび聞きましたw)ちょっと意外でし…

Java8 で java.lang.Object#hashCode() の生成アルゴリズムが変更されていました。

java.lang.Object#hashCode()の性質という記事で書いたのですが、Java の Object#hashCode() の値はただの乱数となっています。 この乱数のアルゴリズムが、Java SE 8 で「線形合同法」から「XORシフト方式」に変更になっていました。 といっても、変更され…