これは Java Advent Calendar 2014 の13日目です。昨日は @skrb さんの「Duke で Swing」、明日は @bitter_fox さんです。 いきなりですが、テーマ変更します。ごめんなさい。Mayaaのことは書きません。 実は登録時には「Mayaaのことを書く」みたいなことを書いていました。確かにMayaaを扱って通算5年、かなりマニアックなことを書くこともできますが、マニアックなことを書いても誰も相手してくれないと思うので、そういうのは別の日にひっそりと書こうと思います。 そこで方針を変えようと思った時、僕の勤務先では開発者同士のコードレビューが盛んに行われ、特に現場に古くからいた僕は後から入ったほぼ全員の人のソースコードのレビューを求められて、日々の時間の多くをレビューに費やしていることを思い出しました。レビューを行う際はどうしてもこのコードは良いとか
Throwable、Exception、RuntimeException(RTE)、Errorあたりを整理しながら、色々考えてみた。私見に基づくので、間違っているかもしれないけれど、自分としては頭が整理できたかな、と感じたので晒してみる。異論があったらコメントください。 まず、一番基礎的なところで、継承関係の整理から。こんなツリーになっています。 Throwable Error Exception RuntimeException そして、本稿での用語の定義。caller=呼出す側のコード callee=呼出される側(throwする側)のコードとします。 Throwable Throwableは「throw文に指定できる何か」という意味ですね。 Instances of two subclasses, Error and Exception, are conventionally used
こんにちは。4月2日に発売される小室さんのソロアルバムが楽しみで仕方がないGTOです。 先日、Javaの方が圧倒的に実行速度が速いことが証明されたにも関わらず、社内は”ぺちぱー(PHPer。PHPを使っている人)”が増殖中。 そんな流れを断ち切って、もっとJavaに慣れ親しんでもらおうと、今回はJavaにおける定数の使い方をご紹介したいと思います。 目次 「Enumとは何か」から始まり「Enumを使った処理を共通化する」まで、ステップを踏んで理解していきましょう! 【STEP0】Enum(列挙型)とは 【STEP1】ごく簡単なEnum 【STEP2】Enumで名称を定義する 【STEP3】コード値から名称を取得する 【疑問】Enum毎に同じ処理を書かなければいけない? 【STEP4】Enumを使った処理を共通化する まとめ 手っ取り早くEnumを使った処理の共通化について知りたい方は、「【
Seasar2の機能追加停止が宣言されてから、すでに6年弱たっています。 Seasar2.4に対する追加要望があれば、もちろん検討します。ただし、大きな変更や追加はもうないでしょう。 Seasar2の今後のロードマップ 2008-01-29 - ひがやすを blog 後継になる予定だったSeasar3も開発が中止されて3年たちました。 Seasar3開発中止 2010-08-06 - ひがやすを blog ここでSeasar2.5を出す方向で動くということでしたが、実現しませんでした。 あのころSeasar2に関わっていた人も、ScalaがメインになったりNode.jsをさわったり、不本意ながらPHPをさわったり、さわってみるとPHPもそれほど悪くなかったり、やっぱりPHP気に食わなかったりと、いろいろな道を進んでいます。 DIコンテナ自体の機能も時代遅れ感がでてきており、関連プロダクトも
SLF4J & Logback JavaのLoggerといえばlog4jで十分なのでlog4jを使ってる場合も多いと思います。 ログの出力性能は最終的にはディスクの速度で決まり、ログ出力の要件は案件が変わってもそれほど変化することもないのでlog4jの定義ファイルもコピペして再利用すればいいですし、新たなLoggerを使うのは手間でしかありません。 今回紹介するSLF4J & Logbackは既存のソースコードに手を入れること無く、しかも他のLoggingライブラリのログ出力も統合できます。 SLF4J SLF4Jはロギング実装を持たず、出力先毎のライブラリを入れ替えることで色々なLoggingライブラリに対応しているFacadeです。 SLF4Jには標準でplaceholderを使えるAPIもあるのでlog4jなどでよく書いてたlog出力前に不要な文字列結合を避けるためのif文は必要なく
値渡しと参照渡しは、分かってしまえば何も難しいところはないんだけど、分かるまでにちょっとした壁があるというかなんとうか・・・ てことでちょっとまとめておきますねー 値渡し (call-by-value) と参照渡し (call-by-reference) の違い 値渡しと参照渡しの違いは、「呼出し元の値自体を変更できるかどうか」と説明されることが多い。 しかし、例えば Java ではミュータブルなオブジェクト *1 を渡した場合、呼出し元の値自体を変更できるという勘違いをする可能性があるため、この説明はあまり好ましくない。 そのため、参照渡しを「呼出し元の別名を渡している」と覚えるのが分かりやすいと思う。 値渡しは「何かの値をコピーして渡している」と覚える*2。 Java の場合 Java には値渡ししか存在しないが、「参照型」のためにややこしく感じる。 参照型は参照渡しとは無関係で、C
jar(ジャー)ファイル Javaのアーカイブファイル。(Java Archiveを縮めてjar) 複数のclassファイルを圧縮して1つのアーカイブにまとめるので、配布するのに便利。 jarファイル 作成 / 確認 / 解凍 / 実行 異常なjarファイル [2008-12-20] 実行可能jarファイル [2007-01-09] 実行方法 [2007-01-09] 作成方法(マニフェストの作成) [/2008-08-01] -classpathとの併用 [/2009-04-12] jarファイルを動的に読み込む [/2014-04-16] jarファイル内のファイル一覧取得 [/2014-04-16] マニフェストの読み込み [/2009-01-15] jar(zip)ファイル内のファイルの読み込み [/2014-04-16] jarファイル内のメソッドの呼び出し [/2014-04-
JavaアプリケーションはJavaソースを(C言語やC++等と同様に)コンパイルし、コンパイルして出来たファイルを実行するもの。 (実際にはJavaで作った全てのプログラムがコンパイル・実行するものだけれども、ここではJavaアプレットやサーブレットと区別する意味で「Javaアプリケーション」と呼んでいる) javacコマンドでコンパイルし、javaコマンドで実行する。 実行は、クラス内のpublic static void main(String[] args)メソッド(あるいは...)から行われる。 JDK1.5から、main()が実行される前にメソッドpremain()を呼ぶこともやろうと思えば出来るようになった。[2007-11-12] コンパイル方法と実行方法 [/2008-12-20] 単一ファイルソースコードの実行 [2018-10-01] クラスパスを指定する例 [/201
何度か書いているけど、整理的な意味で。今後は「このエントリ参照」にするつもりで書いてみる。 文字列連結から見るシステム内で扱う型について - 日々常々 Javaプログラマであるかを見分ける10の質問 に答えてみる - 日々常々 String の連結ネタの続き - 日々常々 前書き Stringなんてboxed primitive*1でもないただのクラスのくせに、中途半端に贔屓されて*2てムカつく*3し、その中途半端ぶり*4がなお腹立たしい……。そして +演算子 で連結して問題が起こるような状況、つまりそんな長々と文字列連結したいような場合は、きっと他の適した型がある。StringBuilderじゃなく、もっと別の何か。業務要件で文字列を組み立てる目的を考えれば、たぶんテンプレート的なものに落ち着くんじゃ無かろうか。ライブラリ的な所でなら逐次書き出し等になるような。どちらにせよ文字列の組み立
Webサービス系の会社の隆盛があって、人材流出が騒がれたのが1−3年ぐらい前だろうか。 SIの産業の人材動向が、今どうなってるかって? 大方の予想より凄惨ですよ。 それが分かる方法がある。JavaWeb技術者に技術力を問う8つの質問によってだ。 SI業界のエンジニアの平均レベルを知りたくって、いろんな会社さんのJavaWeb開発者(経験者)向けに以下のような8つの質問を継続的にしている。 対象者としては、Java経験3から10年ぐらいの現役バリバリのはずのJavaエンジニアだ。 その8つの質問というのはこんな問題だ。 JavaWeb技術者に技術力を問う8の質問 インターフェイスのメリットを一言で表して下さい。(筆記解答) HttpRequestオブジェクトからPostされたデータを取得するServletのメソッドは何ですか?(筆記解答) Sessionのスコープを端的に説明してください。(
2020-07-22更新: 以下の投稿で情報をアップデートしています。 https://blog.kengo-toda.jp/entry/2020/07/21/223136 いつも購読させていただいている id:teppeis さんのブックマークに以下のエントリが流れてきて、なるほどこいつはたしかに厄介だと思いました。 javaのロガーが多すぎて訳が解らないので整理してみました - 文系プログラマによるTIPSブログ ただSLF4Jが最も先進的かつ著名なインタフェースである以上、配布側としてはSLF4Jを使いつつ問題を解決したいところです。他のインタフェースを使ったりオレオレ実装を使ったりしてしまうと、それこそユーザの自由度を奪ってしまう形になります。 実際、SLF4Jを配布パッケージに含めないという簡単な解決法がありますので、簡単に紹介します。悲劇を繰り返さないためにライブラリ開発者がす
Section Navigation [Toggle] 24.4.4 Connector/J (JDBC) の参考24.4.4.1 Connector/J の Driver/Datasource クラス名、URL シンタックス、および構成プロパティ 24.4.4.2 JDBC API 実装についての注記 24.4.4.3 Java 、JDBC および MySQL のタイプ 24.4.4.4 文字セットと Unicode の使用 24.4.4.5 SSL を使用して安全に接続する 24.4.4.6 ReplicationConnection でマスタ/スレーブ複製を使用する MySQL Connector/J は、MySQL データタイプと Java データタイプ間の変換の扱い方に柔軟に対応します。 丸めやオーバフロー、もしくは精度の損失がおこることはありますが、一般的に、どんな
Effective Java 第2版 (The Java Series) 作者: Joshua Bloch,柴田芳樹出版社/メーカー: ピアソンエデュケーション発売日: 2008/11/27メディア: 単行本(ソフトカバー)購入: 77人 クリック: 936回この商品を含むブログ (264件) を見る Arrayクラスがjava.util.Arraysでバイナリサーチやソートが簡単にできるのに比べて、ArrayListはどうなんだろうなどと思っていたらCollections.sortでソートできるとの@nise_nabeさんからのアドバイス。 ソートの比較関数を変えるには、java.util.Comparatorを継承してcompareメソッドをオーバーライドしたクラスを定義して、Collection.sortの呼び出し時にそのインスタンスを第2引数として渡す。 まずは、基本型の昇順ソート
EclipseによるJava開発環境構築手順 - Archit!! の続きのようなもの。これもたびたび生徒さんから質問されるので、EclipseのPleiades All in OneでTomcatプロジェクトの作成方法をまとめておこう。 Eclipseを起動し、Javaパースペクティブを選択する。 左側に「パッケージ・エクスプローラー」があることを確認する。ない場合は、「ウィンドウ」<「ビューの表示」<「パッケージ・エクスプローラー」を選択する。 パッケージ・エクスプローラーの白い部分(何も表示されていない部分)を右クリックするか、ファイルメニューから、「新規」<「その他」を選択する。「Java」<「Tomcatプロジェクト」を選択し、「次へ」をクリック。 「プロジェクト名」に好きなプロジェクト名(たとえば「HogeProject」)を入力し、「デフォルト・ロケーションの使用」のチェック
「Webアプリケーション」と一口にいって、その内容は(当然のことながら)単一のものではありません。静的なHTMLファイルからユーザーインターフェイスをつかさどるJSPファイル、サーブレットやJavaBeansを含むクラスファイル、リソースを管理するプロパティファイル、設定情報を記述したXMLファイル、「.jpg」や「.png」のような画像ファイル……などなど、Webアプリケーションを構成するコンテンツの種類はあまりに多様です。 このようなWebアプリケーションをパッケージとして配布するに際しては、どのような方法があるでしょう。フォルダイメージをそのままにファイルサーバ、FTPサーバ上に格納してもよいかもしれません。フォルダ全体を圧縮して、おなじみの「.zip」や「.lzh」のような形式で配布するのもよいでしょう。 しかし、J2EEにおいてはアプリケーションを配布するに際して、より標準的な方
久々にJavaを使うと忘れてたりするのでメモっとく。 対象のJavaはJava6です。 Javaはバージョンによってコーティングの常識が違うので注意が必要、 特にfor文は色々な書き方が出来るので非常に紛らわしい。 Listのfor文 // 例:ArrayList List<SomeClass> list = new ArrayList<SomeClass>(); // 拡張for文:推奨 for (SomeClass item : list) { // itemを処理 } // イテレータ:拡張for文が使えない場合に使用(要素の追加や削除が必要な場合など) for (Iterator<SomeClass> it = list.iterator(); it.hasNext(); ) { SomeClass item = it.next(); // itemを処理 } // インデックス:
Hibernate、ActiveObjects、S2Dao、Apache Cayenne、iBATISなどORMフレームワークが群雄割拠状態なJavaですが、使い方を勉強したり設定ファイル書いたりするのが少し面倒かなと思っている人がいるかもしれません。 特にちょっとしたアプリケーションを作るならば、素のJDBCを使うのは嫌だけど、それに近い形で使えるORマッパーが欲しいと思うことがたびたびありました。 ということで以下の条件でJDBCを薄くラッピングしているJavaのライブラリを探して発見したものを紹介します。 レコードをオブジェクトに自動的にマッピングしてくれる できるだけSQLを書く量を減らすことができる いざとなったら生SQLを書くことができる 導入が簡単である 依存ライブラリが少ない 以下に挿入、検索、更新、削除を実行するコードを書いています。 今回はDBがMySQLだったので、M
部分一致検索はとても簡単 データベースの文字列データを検索する場合はSQLを利用しますが,ファイルやそのほかのリソースに対して文字列検索を行う場合は,Stringクラスの比較や検索機能を実装したメソッドを利用します。例えば,文字列が完全に一致するかどうか調べるならequalsメソッドを利用するわけです。実際にプログラムで利用する場合は,完全一致よりも部分的に一致するかどうかを調べることがあります。ここでは,部分一致検索を行うためのメソッドの使い方をまとめて紹介します。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く