昨日、クラムボンがツイッターのトレンド入りしてみたい。どうやらフジロックがあったみたいで、
波よせて
1.KANADE DANCE
2.シカゴ
3.Lush Life!
4.nein nein
5.グラデーション
6.yet
7.タイムライン
8. reflection eternal with toe.徳澤青弦
のセットリストだったらしく、特にラストの「reflection eternal with toe.徳澤青弦」が「感動すぎた」「やばい」といった感じで絶賛の嵐だったそうよ。
あ〜いいなー。そういう感動体験、味わいたいね。
マイナスの方向の感動体験ばかりよ。そんな今日も、家でjavaのコード見ないといけない。
なんてったって、やるって決めたからには、簡単に逃げ出すわけにもいかない。
負け犬になっちゃう、そんなすぐ、自分のやると決めたこと曲げるなんてな。
1年やった負け犬と、3年やった負け犬なら、3年やった負け犬の方が信頼できるっていうか、評価できるはず…とはいえ誰かに評価してほしいとかいう人の目をそんな気にしてるというわけではないんだけど。
とかいって、変に自分を鼓舞したり、熱いメッセージ言ったり、人から聞かされるの、すごく苦手というかこそばゆい感じになる。
いわゆるルーキーズ的な、ちょっと喩えが古いけど。佐藤隆太的な熱血教師とか、夢を追う若者みたいな、そりゃステキかもしれんけど、ドラマなら耐えられるけど、そういうムードが日常にふと出てくると、ちょっと寒気が走る。
そういう時、なんて俺は冷たい人間だと思う時もあったが、そうでもないことに気付いた。
寒気が走ったのは、たぶん、美化してるからだろうからな。
自分の人生とか、仕事とか、活動とか、熱い思いを、美化して語る。
そのパフォーマンスが、「すごいですね」待ちみたいになって、疲れるんだよな。
そんなに自分の人生を美化したり、神聖化して語るけど、それ自慢と変わりないし。聞かされて太鼓持ちする方の気持ちも考えてくれということね。まあ太鼓持ちが嫌ってわけじゃないけど。「もうそのぐらいでええでしょ」というラインはあるのに、度が過ぎて語りをやめないケースもあったりね。
かといって俺のように自分の人生を卑下する方向に走りがちなのもよくないかもしれんけど。
「もうかりまっか」と言われたら、「ぼちぼちでんな」「全然ですよ」というコミュニケ―ションは実は温かくて、ここで「いや〜調子いいですよ!」とか「ばんばん売れてますね」みたいに正直に自慢するの、まあすごく正直な感じだと逆に気持ち良かったりするけど。
それがうまくないと、自慢にしか聞こえなくて。
謙虚に「ぼちぼちでんな」「全然ですよ」といって、変に自分のライフワークを美化したりせずに、相対的に自分ばかりが持ち上がらないように、ピエロになるまではいかなくと主役感を出し過ぎないというこの応え方は、デリカシーがあると思うね。
俵万智のサラダ記念日にある「「寒いね」と話しかければ「寒いね」と答える人のいるあたたかさ」は、「ぼちぼちでんな」「全然ですよ」にあるってことよ。相手に共感して、自分を持ち上げない謙虚さね。
とかだらだら、全然、プログラム書いてない。前に書いた?というか、古いメールに残ってて記載されてたコードが、エラーだったせいもある。
そのプログラムは、
public static void main(String[] args) throws IOException
の1行だけに、
この行に複数マーカーがあります
- 変数 main に void は無効な型です
- トークン "(" に構文エラーがあります。正しくは ; です
- 構文エラーがあります。";" を挿入して LocalVariableDeclarationStatement を完了し
てください
っていうエラーがあって。そのコードに「うーん」と昨日、スタバで1〜2時間は悩まされたりしたけど。
大したミスでもなくて、
package dj_shikabane;
public class Game {
{
public static void main(String[] args) throws IOException
public class Game {
{
public static void main(String[] args) throws IOException
・・・
の全文のコードで、中括弧 "{"が1個、いらなったってことだった。そんで、
package dj_shikabane;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Game {
public static void main(String[] args) throws IOException
public static void main(String[] args) throws IOException
・・・
の3つの「import java.io.BufferedReader;」「import java.io.IOException;」「import java.io.InputStreamReader;」の3文が足りなかった。ioライブラリのBufferedReader、IOException、InputStreamReaderクラス入れてなかったから、そのクラスにあるreadLine();メソッドも、使えないわな。
「Integer.parseInt」のころではエラーはなかった。IntegerクラスのparseIntメソッドは、imput文を省略してもいいlangライブラリに属してるからだろうな。
あと、他クラスのメソッド呼んでたのも気付くのにすごい時間かかった。
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
new BufferedReader(new InputStreamReader(System.in));
っていうコードも、すぐには読み解けない。
まずBufferedReaderクラスの型を、クラス型の変数brに格納してる。
InputStreamReader(System.in)は何だ、これよくわらかん。
たぶんInputStreamReader型の、引数にSystem.inってことは…わからん。
入力のあるプログラム(演習2)http://www.ibe.kagoshima-u.ac.jp/edu/gengo2j/p6.html に、解説があった。
Systemクラスのinフィールドで標準入力を取得、まずこれが最初っぽいな。Systemクラスは、Exlipse上でF3キーを押せば、その中身が読める。たしかにフィールドの部分に、
// フィールド記述子 #21 Ljava/io/InputStream;
public static final java.io.InputStream in;
public static final java.io.InputStream in;
って、記述されてた。まあここまではよしとしよう。
全体を見ると、インスタンス、オブジェクトを生成しているのはわかる。new演算子があるからな。
・・・
解説
• readLineメソッド
▫ String line = reader.readLine(); ▫ 文字列を1行分取得するメソッド
• readerは?
▫ BufferedReader型の変数 ▫ 参照型のクラス
▫ データの読み込みを行うためのクラス
• new
▫ newの後にクラス名と()を付けると、そのクラスに属するオブジェクト生成を行う →これをインスタンス生成と言う
を読むと、何かわかってきそうな気がする。BufferedReaderクラスとInputStreamReaderクラス使うには、単にimport文だけ書けばいいってわけじゃなくて。クラス使うためのオブジェクト(インスタンス)を生成しないといけないって話。
よくわからないのは、BufferedReader(new InputStreamReader(System.in))と、入れ子構造みたいに、BufferedReaderクラスとInputStreamReaderクラスが、同時にインスタンス生成してるっぽくなってる点よ。
たぶん、引数とコンストラクタについて、まだ俺がちゃんと理解してないからだろうな。
コンストラクタはクラス名と同じ、というルールがある。
いや、違うな…コンストラクタは、この段階では出てきてない。
まだインスタンスを生成しただけの段階。
InputStreamReaderはInputStreamからbyte型データを受け取りUnicodeの文字に変換して文字(char型)として読み取れるようにするオブジェクトです。
byteデータをSystem.inから読み、JISの文字コードを自動判定し、Unicode文字に変換して読むインスタンスは次のように作ります。このインスタンスからreadメソッドを使ってchar型のデータを読み出せます。http://www.ibe.kagoshima-u.ac.jp/edu/gengo2j/p6.html
new InputStreamReader(System.in, "JISAutoDetect");
っていう解説が、たぶん正しいんだと思う。Systemクラスのinフィールドから読み込む、どういう機構なのかわらないが、標準入力の仕組みは脇に置いとこう。それで沼にはまってる場合じゃないし。
つまり、まとめると。
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
new BufferedReader(new InputStreamReader(System.in));
は、オブジェクト生成してる。BufferedReaderクラスを使うためのオブジェクトと、InputStreamReaderを使うためのオブジェクトの2つを。
そんでオブジェクトを作る時に、事前に処理を定義しておけば、それを自動的行ってくれる。いわば初期処理がコンストラクタ。
でもそれは勘違いで、コンストラクタ作ってるわけじゃなくて。
そもそもBufferedReaderクラスとInputStreamReaderクラスは、ioライブラリにある既に完成されたクラスだから、なんでjavaの利用者がコンストラクタを定義せないかんの?って話だ。
だからコンストラクタの話は関係ない。
これはフィールドとかメソッド、を呼び出すための準備。
オブジェクト生成なんだから。
InputStreamReaderクラスを使うためのオブジェクト生成時に、引数としてSystem.inからbyteデータを受け取る。
BufferedReaderクラスを使うためのオブジェクト生成時に、引数として、InputStreamReaderクラスによってUnicode文字に変換された文字「new InputStreamReader(System.in)」を、受け取る。
一旦、そういう風な理解で留めておこう。
おまじない、で覚えておいて、さっさと色々なコードを書いて慣れた方が気もするけどな。
どうも性格的に、一行一行、理屈を知りたくなるんだな、ほんとに。