備忘録

備忘録用のブログ…雑多に色々書いていきます。

java:フィールドについて

「フィールド≒変数」について

まずフィールドとは変数のことだと思っておいてよい。

そしてフィールドの種類には形式(型)から見る種類と、スコープから見る種類がある。

スコープ…ある変数名や関数名といった名前を参照できる範囲
引用:スコープ - Wikipedia

形式から見る種類

形式から見るフィールドの種類は以下の2種類ある。

  • 基本型変数
  • 参照型変数

それぞれの違いは以下のようなものがある。

基本型変数
  • intやcharなどの小文字で宣言した変数。
  • 「プリミティブ型」とも呼ばれる。
  • C言語のようで手続き的 = 入れ物モデルである。
参照型変数
  • IntegerやCharacterなどの大文字で宣言した変数。
  • 「ラッパークラス」とも呼ばれる。
  • オブジェクト指向的 = 張り紙モデルである。


入れ物モデル…変数が箱のようなもの。その箱の中にデータを入れるイメージ。よくC言語の入門書で説明されている変数のイメージ。

張り紙モデル…変数が札のようなもの。その札をデータのある場所に貼り付けていくイメージ。家の住所のような…


この基本型変数と参照型変数、それとオートボキシングという機能によって、いろいろ混乱する処理が行われてしまうのだけれど…
オートボキシングの説明がめんどい…というか私も混乱してくるので今は割愛。いつか書くかも…

ただ、混乱しないために同値性(値の比較)をしたいなら「equals」メソッドを使う
これをしとけばif文の値の比較で混乱することはないと思う。

「==」は同値性ではなく同一性(住所が同じか)を比較しているんだよね。


まとめたくとも、時間がないし、著作権気にして書くのしんどい…

京都国立博物館に行ってきた

今週、京都国立博物館に行ってきました。

現在、京都国立博物館は、展示物の全てが国宝である特別展覧会を10/3 ~ 11/26日までしています。

全期間、同じ国宝を展示し続けるのは、展示物の維持?が大変だそうで4期に分かれて、展示物が変わるそうで…

詳しくは、京都国立博物館のサイトに書かれています。

(ページの最後の方にリンク貼ってます)


行ってきた感想

休日は人が多そうで嫌だったので、平日の午後、大学の授業が終わってから行ってきました。
2時前に京都国立博物館到着。

混んでいるのを予想して、オンラインでチケットを購入していたのですが、平日の昼ならわざわざオンラインで買わなくても数分の待機時間で買えそうな雰囲気でした。

チケットを記念物としてほしい方は、そんなに待たなくて大丈夫そうです。



係員さんにQRコードを見せて入場。

会場までの通り道に本館である明治古都館が見えましたが、どうやら耐震工事で入れない模様…残念…

会場に入ってからは、書かれている順序通りに見ていくだけ。

外は人は少なかったんですが中はかなり多かったです。特に考古を展示している場所はものすごく人が多かったです。

どれほど時間がかかるのか分からない事もあって、考古は第Ⅱ期も展示されているものがほとんど(というか全部?)だったので第Ⅱ期に見ようとスルーしました。

全て見るのにかかった時間は3時間ほど…

途中で映像室だったかな、そこによってタッチディスプレイで「鳥獣人物戯画」を見ていたので、そこによらないなら考古を見る時間は十分にありそうです。

ただその映像室、「鳥獣人物戯画」も途中しか解説を見れていなくて、戯画以外にも他2つあって解説もあったので、じっくり見ると3時間はゆうに超えそう…


教科書でよく見る風神・雷神など、国宝をよく知らない方でも知ってるようなものもあるので、皆さんも一度くらいは見にきてみてはいかがでしょうか。



OpenCV:UnsatisfiedLinkErrorの解決法

OpenCV3.3.0でMatクラスを使ったらコンパイル時に以下のエラーを吐かれた。

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_Mat(DDI)J
	at org.opencv.core.Mat.n_Mat(Native Method)
	at org.opencv.core.Mat.<init>(Mat.java:50)
	at tkrb.tkrb.main(tkrb.java:41)

ググって見たらeclipseを使ってる場合、「UnsatisfiedLinkError」が発生する理由は、ネイティブライブラリが組み込まれていない場合が多いらしい。
native library locationに正しいパスを入力すると解決できる。

が、私の場合は違った。

パスはあってるはずなのに、エラーが吐かれるので他を探していたら以下の記事を発見。

stackoverflow.com


読んで見たら、ネイティブライブラリをロードしていないことが原因らしい。
以下の行を追加せよ、と書かれていた。

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

Matクラスを呼び出す前に書いてみたら無事コンパイルが通った。

かなり解決するのに時間がかかったのに、たった1行で…
でもそれがプログラミングだよなー…


System.loadLibrary(Core.NATIVE_LIBRARY_NAME);を少し調べて見た


JNI(Java Native Interface)という仕組みを使ってるらしい。
これを使うと、JavaからC++/Cなどの他の言語と連携することが可能。
System.loadLibrary()は、JNIのネイティブコードをロードするためのもの。

JNIについては以下を見るのが良さそう
Java Native Interface仕様の目次

リンク先から一部抜粋

JNIを必要とする場合
  • 標準Javaクラス・ライブラリが、アプリケーションに必要なプラットフォーム依存機能をサポートしない場合。
  • ほかの言語で記述されたライブラリをすでに持っており、そのライブラリからJNIを経由してJavaコードにアクセスさせる場合。
  • 一部のタイムクリティカルなコードをアセンブリなどの低レベル言語で実装する必要がある場合。
JNIを使うと可能になること
  • Javaオブジェクト(配列と文字列を含む)の生成、検査、更新。
  • Javaメソッドの呼出し。
  • 例外のキャッチおよびスロー。
  • クラスのロード、およびクラス情報の取得。
  • 実行時の型チェック。


「JNIを使うと可能になること」にある一覧って普段Javaを書いてる時していることでは?と思ったのだけれど違うのだろうか…?

それと一見、便利に見えたのだが、どうやら色々と問題点もある模様。
以下の記事にて、メモリ管理やパフォーマンスの低下が問題点として取り上げられている。

smys0515.hatenablog.com


んで、それらを改善したものであるJava FFIなるものがJava SE10で導入する予定らしい。
最近SE9にバージョンアップしたばかりだし、SE10は3年後くらいかなぁ。

調べたらJavaは約3年ごとにバージョンアップしてた。


余談

JNIについて調べてたら以下のリンクからJavaCVというものを知ったんだけど!!
OpenCVよりもセットアップが簡単って書いてある(´;Д;`)
めっちゃ時間かけたのに…

でも得た知識は無駄にならないはず…!!

Javaにおけるネイティブコード連携の各種手法の紹介

ブログしたくなったから初めてみた

このブログについて


初めまして。閲覧ありがとうございます。

このブログでは以下のことについて書く予定です。

 

・IT系(主にJava
・その他

 

一覧にするまでもなかったね。

このブログを作ったきっかけが数十分前に「なんかわからけど、ブログ書きたい」って思ったからだから、予定なんてほとんど決めてないんだ…

 でも全く決めないわけにはいけないし、とりあえず自身で調べていったことをここにまとめていこうかと思って。

んで、今私が大学で学んでることがIT分野についてだったからそれが主になると思う。

 

他の分野についての授業や趣味から派生したものも、まとめる予定だからそっちも少しは書くかな?
今、学んでるIT分野以外のことだと、安全保障、文化財
興味のあるものなら演劇とかも…。でも劇って見に行くと高いんだよなぁ。

学生にはツライお値段。

 

プロフィール

好きなもの

ゲーム
  • MGS(1,2はしてない)
  • Minecraft (稀にサーバ建ててマルチしてる。)
  • BattleField4(もう古いだろうけど数年前めっちゃハマってた) 
  • 刀剣乱舞(貴重な気軽にできるゲーム)

いずれもPCゲーム。他に持ってるものはPortal, skyrim, etc....

最近、時間とお金がなくて、前ほど読めてない&買えてない。
今は、短編の怪談小説を少しずつ読んでる。


アニメ・映画

Huluに登録してるから色々みてるはずなんだけど、流し見が多すぎてあまり覚えてないことに今気がついた。

演劇・ミュージカル

演劇は授業での映像でしかみれてないから書けること全然ないや…ライオンキングとか見にいってみたいなーと思ってる。あと歌舞伎も。

 

プロフィールはこんなものかなー。

書いてる間に、OpenCVのインストールが終わってたので弄ってくる。
後々、編集して使いしていくかも。