K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[2197] Re:オブジェクト指向について
投稿者:(ぱ)こと管理人
2019/10/17 01:47:29

>Javaのメソッド呼び出しの文法が、C++におけるオブジェクトの実体へのアクセスと >同じであるため、混乱していました。 C++はオブジェクトの実体とポインタの両方を扱えるので obj.hoge(); と obj->hoge(); は別の意味ですが、 Javaはポインタしかないので、Javaにおける obj.hoge(); は、C++における obj->hoge(); と同値です。ポインタしかないJavaではわざわざ1文字多い「->」を使うより、 全部「.」を使う方が打鍵数が少なくてよいとは思いますが、紛らわしいのは 確かですね。 ただ、なんにせよ、オブジェクト指向においては「どのオブジェクトに仕事を 頼むのか」が重要なので、「ポインタ(参照)でオブジェクトを指す」のは 概念的にわかりやすく、C++のように実体を扱える言語より、なんでも参照 (ポインタ)の言語の方がとらえやすいかとは思います。どちらが実用的かとか、 そういう話は置いておくとして。 継承を考えればなおのこと、です。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2196] Re:オブジェクト指向について
投稿者:C××
2019/10/14 18:40:43

回答ありがとうございます。 Javaのメソッド呼び出しの文法が、C++におけるオブジェクトの実体へのアクセスと同じであるため、混乱していました。 C++からJavaを学ぶ場合(あるいはその逆) 文法が似ているから楽だと書いているサイトをよく見ますが、 かえって紛らわしいなと感じました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2195] Re:オブジェクト指向について
投稿者:(ぱ)こと管理人
2019/10/13 01:47:58

はじめまして。 > ここの記事やほかのサイトを読んでるうちに、結局のところ >「オブジェクトというのはプログラム(ソフトウェア)を保持することができる変数」で >「小規模なソフトウェアの組み合わせで1つのソフトウェアを作るのがオブジェクト指向」 >という結論にたどり着いたのですが、実際のところこの解釈はどうなのでしょうか。 まず、C++を除くたいていのオブジェクト指向言語では、オブジェクトを変数に 格納することはできません。変数に格納できるのはオブジェクトへの参照だけです。 そのうえで、オブジェクトという「小規模なソフトウェア」の組み合わせで それなりの規模のプログラムを作る、というのはそれなりによさげな解釈かと 思います。単に「小規模なソフトウェアの組み合わせで1つのソフトウェアを作る」 だけだと、「モジュール化」と区別がつきませんし。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2194] オブジェクト指向について
投稿者:C××
2019/10/10 00:25:10

 初投稿です  オブジェクト指向についてわかったような気になったり、急にわからなくなったりという哲学じみた事を繰り返している内に、最近このサイトに行き着いた者です。  ここの記事やほかのサイトを読んでるうちに、結局のところ 「オブジェクトというのはプログラム(ソフトウェア)を保持することができる変数」で 「小規模なソフトウェアの組み合わせで1つのソフトウェアを作るのがオブジェクト指向」という結論にたどり着いたのですが、実際のところこの解釈はどうなのでしょうか。  犬猫や、レストランの例えよりは一番しっくり来た表現なのですが、厳密には違うような気がします。( operator=() などで定義しないと代入できない辺り)  はっきりとしない質問で恐縮ですが、意見を聞かせてくだされば幸いです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2193] Re:Webアプリケーション開発入門のP132について
投稿者:(ぱ)こと管理人
2019/09/10 00:25:20

>② C:\Users\java\expand_downloads\src\p77\chap03\Henacat_0_1\com  > >にクラスパスを通してみようとしましたら、エラーが発生してしまいました。 >大変恐縮ですが、ご教授頂けましたら幸いです。よろしくお願い致します。 エラーを見ると、 >PostBBS.java:2: エラー: パッケージcom.kmaebashi.henacat.servlet.httpは存在しません このように、Henacatで作成したサーブレット関連のパッケージやクラスが見えていない ことがわかります。つまり、クラスパスが通っていません。 実行したコマンドラインは以下ですが、 >C:\Users\java\expand_downloads\src\p77\chap03\testbbs\WEB-INF\classes>javac -classpath C:\Users\java\expand_downloads\src\p77\chap03\Henacat_0_1\com *.java これを見ると、「C:\Users\java\expand_downloads\src\p77\chap03\Henacat_0_1\com」に クラスパスを通していますが、p.132冒頭の記載は、 | この修正を加えたうえで、Henacatのクラスファイルのルートであるcomディレクトリが | 存在するディレクトリ(「com\kmaebashi\henacat\……」というディレクトリ階層の | 根元)にclasspathを向けてコンパイルし、クラスファイルを作ります。 です。「comディレクトリが存在するディレクトリ」ですから、comディレクトリの ひとつ上です。 この場合なら、以下のようにすれば通るかと思います。 > javac -classpath C:\Users\java\expand_downloads\src\p77\chap03\Henacat_0_ *.java
[この投稿を含むスレッドを表示] [この投稿を削除]
[2192] Webアプリケーション開発入門のP132について
投稿者:javajava
2019/09/08 15:19:21

いつも大変お世話になっております。P132の文章を理解できていない為と思うのですが、私なりに、 ① chap03\testbbs\WEB-INF\classes の3ファイルのP131に該当する部分を修正し、 ② C:\Users\java\expand_downloads\src\p77\chap03\Henacat_0_1\com  にクラスパスを通してみようとしましたら、エラーが発生してしまいました。大変恐縮ですが、ご教授頂けましたら幸いです。よろしくお願い致します。 【以下エラー文】 C:\Users\java\expand_downloads\src\chap03\Henacat_0_1\com\kmaebashi\henacat\webserver>cd C:\Users\java\expand_downloads\src\p77\chap03\testbbs\WEB-INF\classes C:\Users\java\expand_downloads\src\p77\chap03\testbbs\WEB-INF\classes>javac -classpath C:\Users\java\expand_downloads\src\p77\chap03\Henacat_0_1\com *.java PostBBS.java:2: エラー: パッケージcom.kmaebashi.henacat.servlet.httpは存在しません import com.kmaebashi.henacat.servlet.http.*; //javax.servlet.http.*; ^ PostBBS.java:4: エラー: シンボルを見つけられません public class PostBBS extends HttpServlet { ^ シンボル: クラス HttpServlet PostBBS.java:6: エラー: シンボルを見つけられません public void doPost(HttpServletRequest request, HttpServletResponse response) ^ シンボル: クラス HttpServletRequest 場所: クラス PostBBS PostBBS.java:6: エラー: シンボルを見つけられません public void doPost(HttpServletRequest request, HttpServletResponse response) ^ シンボル: クラス HttpServletResponse 場所: クラス PostBBS ShowBBS.java:2: エラー: パッケージcom.kmaebashi.henacat.servlet.httpは存在しません import com.kmaebashi.henacat.servlet.http.*; //import javax.servlet.http.*; ^ ShowBBS.java:4: エラー: シンボルを見つけられません public class ShowBBS extends HttpServlet { ^ シンボル: クラス HttpServlet ShowBBS.java:13: エラー: シンボルを見つけられません public void doGet(HttpServletRequest request, HttpServletResponse response) ^ シンボル: クラス HttpServletRequest 場所: クラス ShowBBS ShowBBS.java:13: エラー: シンボルを見つけられません public void doGet(HttpServletRequest request, HttpServletResponse response) ^ シンボル: クラス HttpServletResponse 場所: クラス ShowBBS PostBBS.java:5: エラー: メソッドはスーパータイプのメソッドをオーバーライドまたは実装しません @Override ^ ShowBBS.java:12: エラー: メソッドはスーパータイプのメソッドをオーバーライドまたは実装しません @Override ^ エラー10個 C:\Users\java\expand_downloads\src\p77\chap03\testbbs\WEB-INF\classes>
[この投稿を含むスレッドを表示] [この投稿を削除]
[2191] Re:Webアプリケーション開発入門のP99について
投稿者:javajava
2019/09/08 15:06:31

>>早速ですが、ご指摘にしたがってP.97のようにコンパイルしてみましたが、 >>下記のようなエラーが出ます。Message.javaはできたようです。 >>しかし、PostBBS.javaで躓きます。 > >すみません、前回の例示は不正確でした。p.97のとおりにやるなら > >javac -classpath C:\Tomcat8\lib\servlet-api.jar *.java > >ですね。私の環境ではこれで通りました。 > >-classpathでクラスパスの指定をすると、カレントディレクトリがクラスパスから >抜けてしまうので、PostBBS.javaをコンパイルするときにMessage.classが参照できなくて >エラーになっているわけです。以下のようにカレントディレクトリ「./」を >-classpathに加えてもコンパイルできますが、この規模なら*.javaで十分でしょう。 > >javac -classpath ./;C:\Tomcat8\lib\servlet-api.jar PostBBS.java ご回答、ありがとうございます。ご指摘頂いたように「*.java」の方で実行したところ、うまくいきました!ありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2190] Re:Webアプリケーション開発入門のP99について
投稿者:javajava
2019/09/08 15:06:26

>>早速ですが、ご指摘にしたがってP.97のようにコンパイルしてみましたが、 >>下記のようなエラーが出ます。Message.javaはできたようです。 >>しかし、PostBBS.javaで躓きます。 > >すみません、前回の例示は不正確でした。p.97のとおりにやるなら > >javac -classpath C:\Tomcat8\lib\servlet-api.jar *.java > >ですね。私の環境ではこれで通りました。 > >-classpathでクラスパスの指定をすると、カレントディレクトリがクラスパスから >抜けてしまうので、PostBBS.javaをコンパイルするときにMessage.classが参照できなくて >エラーになっているわけです。以下のようにカレントディレクトリ「./」を >-classpathに加えてもコンパイルできますが、この規模なら*.javaで十分でしょう。 > >javac -classpath ./;C:\Tomcat8\lib\servlet-api.jar PostBBS.java ご回答、ありがとうございます。ご指摘頂いたように「*.java」の方で実行したところ、うまくいきました!ありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2189] Re:Webアプリケーション開発入門のP99について
投稿者:(ぱ)こと管理人
2019/09/03 01:08:02

>早速ですが、ご指摘にしたがってP.97のようにコンパイルしてみましたが、 >下記のようなエラーが出ます。Message.javaはできたようです。 >しかし、PostBBS.javaで躓きます。 すみません、前回の例示は不正確でした。p.97のとおりにやるなら javac -classpath C:\Tomcat8\lib\servlet-api.jar *.java ですね。私の環境ではこれで通りました。 -classpathでクラスパスの指定をすると、カレントディレクトリがクラスパスから 抜けてしまうので、PostBBS.javaをコンパイルするときにMessage.classが参照できなくて エラーになっているわけです。以下のようにカレントディレクトリ「./」を -classpathに加えてもコンパイルできますが、この規模なら*.javaで十分でしょう。 javac -classpath ./;C:\Tomcat8\lib\servlet-api.jar PostBBS.java
[この投稿を含むスレッドを表示] [この投稿を削除]
[2188] Re:Webアプリケーション開発入門のP99について
投稿者:javajava
2019/08/31 22:18:55

回答ありがとうございます! メッセージの件、申し訳ありませんでした。以後、注意します。 早速ですが、ご指摘にしたがってP.97のようにコンパイルしてみましたが、下記のようなエラーが出ます。Message.javaはできたようです。しかし、PostBBS.javaで躓きます。 C:\Users\java\expand_downloads\src\p77\chap03\testbbs_jsp\WEB-INF\classes\bbs>javac -classpath C:\Tomcat8\lib\servlet-api.jar Message.java C:\Users\java\expand_downloads\src\p77\chap03\testbbs_jsp\WEB-INF\classes\bbs>javac -classpath C:\Tomcat8\lib\servlet-api.jar PostBBS.java PostBBS.java:10: エラー: シンボルを見つけられません Message newMessage = new Message(request.getParameter("title"), ^ シンボル: クラス Message 場所: クラス PostBBS PostBBS.java:10: エラー: シンボルを見つけられません Message newMessage = new Message(request.getParameter("title"), ^ シンボル: クラス Message 場所: クラス PostBBS PostBBS.java:13: エラー: パッケージMessageは存在しません Message.messageList.add(0, newMessage); ^ エラー3個 C:\Users\java\expand_downloads\src\p77\chap03\testbbs_jsp\WEB-INF\classes\bbs> このようなエラーが出るのですが、何かお気づきの点等ございますでしょうか? ご教授の程、よろしくお願いします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2187] Re:Webアプリケーション開発入門のP99について
投稿者:(ぱ)こと管理人
2019/08/27 01:01:19

>ただ、今度はP102のPostBBS.javaをコンパイルしようとするとエラーが。 エラーが出たというのであれば、せめてエラーメッセージは書いてください。 >普通に >javac PostBBS.java としてるのですが・・・。 p.102にPostBBS.javaはないので、どこのソースのことかわかりませんが、 Tomcatで動かすサーブレットをコンパイルするのであれば、 > javac PostBBS.java ではなくて、p.97にあるとおり、 >javac -classpath C:\Tomcat8\lib\servlet-api.jar PostBBS.java のように、servlet-api.jarをクラスパスに入れてコンパイルする必要があります。 (Tomcatのバージョンや配置先が違うなら、適宜読み替えてください)
[この投稿を含むスレッドを表示] [この投稿を削除]
[2186] Re:Webアプリケーション開発入門のP99について
投稿者:javajava
2019/08/25 19:14:00

ご回答ありがとうございます!素晴らしい書籍の執筆ありがとうございます! 時間がとれたので、早速回答に従ってやってみます・・・のような返信を入れたのですが、Upされてないのか、私が不慣れなのか・・・w とにもかくにも、本日もう一度最初からやり直してみましたら、ちゃんと動きました。 ありがとうございました。 ただ、今度はP102のPostBBS.javaをコンパイルしようとするとエラーが。 普通に >javac PostBBS.java としてるのですが・・・。 ご教授いただければ幸いでございます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2185] Re:Webアプリケーション開発入門のP99について
投稿者:(ぱ)こと管理人
2019/08/17 16:12:02

>いつもお世話になっております。初めて投稿します。 はじめまして。 >書籍「Webアプリケーション開発入門」のP99で、「http://localhost:8080/ShowBBS」を >ブラウザで実行すると、書籍の中にあった、「ごめんねごめんねごめんねごめんねごめ >んね・・・」と続くページが表示されてしまい、掲示板が表示されません。 書籍の通りの順番でp.99だとすると、「3.3.3.Tomcat で掲示板を作る」のところです。 章タイトルの通り、ここでは、へなちょこサーブレットコンテナHenacatを作る前に、 Tomcatで掲示板を作ろうとしています。 そして、「ごめんなさいごめんなさいごめんなさいごめんなさいごめんなさい ごめんなさい…」と続くページは、p.74にあるWebサーバもどき「Modoki/0.2」の 404ページです。 Tomcatの設定をわざわざ変えたのでなければ、TomcatがModoki/0.2の404ページを 返すわけがないので、ここではTomcatではなくModoki/0.2を叩いているのでは ないでしょうか。 ただし、Modoki/0.2のポート番号は8001で、Tomcatのポート番号は8080です。 Modoki/0.2のポート番号をわざわざ変えたのでなければ、 「http://localhost:8080/ShowBBS」 であればTomcatが動くはずです。 考えられる可能性としては、 ①本当は「http://localhost:8001/ShowBBS」を叩いていた。 ②Modoki/0.2のポート番号を8080に変えて実行していて、  Tomcatはポートが塞がっているので起動に失敗している。 のどちらかですかねえ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2184] Webアプリケーション開発入門のP99について
投稿者:javajava
2019/08/15 12:22:47

いつもお世話になっております。初めて投稿します。 書籍「Webアプリケーション開発入門」のP99で、「http://localhost:8080/ShowBBS」をブラウザで実行すると、書籍の中にあった、「ごめんねごめんねごめんねごめんねごめんね・・・」と続くページが表示されてしまい、掲示板が表示されません。 Tomcatも動いているようですし、書籍の通りやったつもりなのですが、どこが良くないのかがわかりません。同じようなところで躓いて、ピンときた方、いらっしゃいましたら、ご教授お願いします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2183] Re:汎整数拡張について
投稿者:d_kuma
2019/08/12 21:46:36

お世話になっております。 細かい内容について答えていただき、ありがとうございます。 char,shortと、intでの処理速度やサイズの違いについて、よく分かりました。 現在の処理環境なら、あまり気にする必要は無いのかな、という気がしました。 スカラの変数ならintを使うということも理解できました。 お忙しいところ、ありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2182] Re:汎整数拡張について
投稿者:(ぱ)こと管理人
2019/08/11 01:20:26

『CプログラミングFAQ』は、持ってたはずなのですが、どこを探しても見当たらない…… >①汎整数拡張により、char型やshort型は、値を取り出す時に32ビットに変換されるので、 >int型より処理時間がかかったり、int型より実行ファイルが増大したりするのでしょうか? この手の性能問題は私は全然詳しくないのですが(アプリケーションプログラマですので…)、 今時のCPUを相手に、どちらが良いとか悪いとかそう一概に言えるものではないと思っています。 たとえば先のchar_test.sとint_test.sをそれぞれGAS(GNU assembler)にかけてみると、 movsblの命令長はmovlよりも確かに長いのですが、int int_var = 5; の「5」が 32ビット幅になるので、結局のところ実効形式のサイズとしてはint_test.sの方が 微増しているようです。 char_test.s 17 0008 C645FF05 movb $5, -1(%rbp) 18 000c 0FBE45FF movsbl -1(%rbp), %eax 19 0010 89C6 movl %eax, %esi int_test.s 17 0008 C745FC05 movl $5, -4(%rbp) 17 000000 18 000f 8B45FC movl -4(%rbp), %eax 19 0012 89C6 movl %eax, %esi 特に配列なら、主記憶は十分にあっても、今時キャッシュに乗らないと性能は出ないので、 小さな型を使った方が早いケースはあるかもしれません。 配列でないなら、どちらにしても、そう大差があるとは思えませんが。 >②汎整数拡張があるので、char型やshort型を使わずに、int型を使った方が良いのでしょうか? 配列でないスカラの変数であれば、たとえば1バイト文字しか入らないとわかっていても、 私ならintを使います。「ポインタ完全制覇」にも書きましたが、getchar()の 戻り値やputchar()の引数も、実際intですし。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2181] Re:汎整数拡張について
投稿者:d_kuma
2019/08/08 17:42:29

ご連絡遅くなりました。 アセンブラの解説をしていただき、ありがとうございます。 char型はアセンブラ上で変換が入るということで理解しました。 会社内で汎整数拡張について聞いてみたら、アセンブラ上で差異は無いと言われたので、間違って理解していました。 movsblというのが分からず、ネットで調べました。 movsはsign extension(符号拡張)によるコピー、blはfrom byte(8ビット) to long(32ビット)ということで理解しました。 これに付随して、さらに質問があります。 ①汎整数拡張により、char型やshort型は、値を取り出す時に32ビットに変換されるので、int型より処理時間がかかったり、int型より実行ファイルが増大したりするのでしょうか? ②汎整数拡張があるので、char型やshort型を使わずに、int型を使った方が良いのでしょうか? ①については、char型やshort型を使うと、アセンブラ上で余計な変換が入って実行ファイルが増大してしまう、ということが書かれた技術書を読んだことがあります(『CプログラミングFAQ』だったと思います)。 ②については、C言語ではint型が基準なので、できるだけint型を使うべきなのかなと思っています。 巨大な配列を扱う時にメモリのサイズを減らしたいのでchar型やshort型を使うのはいいと思うのですが、 そうでないなら、できるだけint型を使うべきではと思っています。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2180] Re:汎整数拡張について
投稿者:(ぱ)こと管理人
2019/08/07 01:01:42

こんにちは。 >汎整数拡張という機能は、char型やshort型は、アセンブラ上ではint型と同じように >扱われる、ということかなと思うのですが、この認識で合っているでしょうか? >Cのソースコードからアセンブラに変換されるときに、汎整数拡張によって何か >変換処理が行われるわけではないと思っています。 汎整数拡張という機能は、charやshortの変数でも、式の中ではintに変換される、 という機能です。変数に格納された値を使う時にはintでも、変数のサイズは、 charやshortならintより小さいわけですから、メモリから値を取り出して (intと同じビット幅の)レジスタに乗せるときには汎整数拡張による変換処理が 入りますし、逆に(int型の)式の値をcharとかshortの変数に格納するときには、 逆の変換が必要です。 試してみました。 char_test.c #include <stdio.h> int char_test(void) { char char_var = 5; printf("%d", char_var); } int_test.c #include <stdio.h> int int_test(void) { int int_var = 5; printf("%d", int_var); } アセンブラ上の差異は以下です(Linuxでgcc -S)。 char_test.s movb $5, -1(%rbp) ← char_var = 5のところ movsbl -1(%rbp), %eax ← char_varの値をeaxレジスタに移動 int_test.s movl $5, -4(%rbp) ←int_var = 5のところ movl -4(%rbp), %eax ← int_varの値をeaxレジスタに移動 int_test.sでは、単に32ビットを移動するmovl命令が使われていますが、 char_test.sでは、5をchar_varに代入する際にはバイトでの移動命令movbが、 char_varの値を取り出すときにはバイトを32ビットに変換しつつ移動する movsblが使われていることがわかります。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2179] 汎整数拡張について
投稿者:d_kuma
2019/08/05 17:43:35

お世話になっております。 汎整数拡張(又は整数拡張)について質問があります。 汎整数拡張という機能は、char型やshort型は、アセンブラ上ではint型と同じように扱われる、ということかなと思うのですが、この認識で合っているでしょうか? Cのソースコードからアセンブラに変換されるときに、汎整数拡張によって何か変換処理が行われるわけではないと思っています。 試しに、char型、short型、int型による演算を、アセンブラ上で比較してみたのですが、差異が出てしまいました。 全て同じような結果になると期待していたのですが、そうはならなかったです。 あまりアセンブラに詳しいわけではないので、自信を持って言えるわけではありませんが。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2177] Re:C言語ポインタ完全制覇
投稿者:(ぱ)こと管理人
2019/05/19 00:56:23

はじめまして。 >180ページのTable3-3でint *hoge[10]のサイズが8×10になっていますが >int型の配列へのポインタなので4×10ではないでしょうか? int *hoge[10]は、そのページの説明にもあるとおり、 「int型へのポインタの配列(要素数10)」です。 ポインタのサイズは処理系依存ですが、その前のページでポインタは8バイトと 仮定しているので、8×10で80バイトです。 なお、「int型の配列へのポインタ」であれば、(指す先は何であれポインタなので) 8バイトになりますね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2176] C言語ポインタ完全制覇
投稿者:かずぼん
2019/05/18 08:55:14

最近貴書を購入しました。 一つ質問があります。 180ページのTable3-3でint *hoge[10]のサイズが8×10になっていますがint型の配列へのポインタなので4×10ではないでしょうか? よろしくお願いいたします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2175] Re:Eclipseを使うとclassLoaderで例外が発生
投稿者:Radec
2019/05/12 09:33:25

すみません、自己解決しました。 Eclipseがコンパイル時にデフォルトで使用するバージョンがJavaSE11になっていたので、CokkieTestもreleaseオプションで指定で同バージョンにすることで解決致しました。 (というかそもそもスタックトレース見ろレベルの質問でした、大変失礼致しました。)
[この投稿を含むスレッドを表示] [この投稿を削除]
[2174] Re:Eclipseを使うとclassLoaderで例外が発生
投稿者:(ぱ)こと管理人
2019/05/08 23:34:30

はじめまして。 >URL(http://localhost:8001/testbbs/ShowBBS)を入力したところでclassLoaderが例外を発生させてしまいました。 具体的なスタックトレースがわからないので何ですが、 もし起きているのがClassNotFoundExceptionだったとすると、 ShowBBSのクラスが所定の場所にないのではないでしょうか。 Henacatの場合、Henacat自体のソースやクラスをどこに置くかに関係なく、 サーブレットのクラスは、WebApplication.javaの8行目、 private static String WEBAPPS_DIR = "C:\\Henacat_0_1\\webapps"; この場所に置いてあることを期待しています。 もっとも、ここに置いてないならEclipseでなくても動かないですし、 >ShowBBS等のクラスパス指定もElicpseのプロジェクト配下のクラスパスを >指定してコンパイルしています。 というのは、「3.4.3 Henacat ver.0.1 で掲示板を動かす」の | この修正を加えたうえで、Henacatのクラスファイルのルートである | com ディレクトリが存在するディレクトリ(「com\ kmaebashi\henacat\……」と | いうディレクトリ階層の根元)にclasspathを向けてコンパイルし、 | クラスファイルを作ります。 という記載に沿っていることを意味するのであれば、そのあたりも 当然分かったうえで実行されているように思います。 あとは、具体的な例外を見てみないと、ちょっとわかりません。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2173] 無題
投稿者:Radec
2019/05/07 21:33:35

こんばんは、本質的なところと全く違うので恐縮ですが、 「Webサーバを作りながら学ぶ 基礎からのWebアプリケーション開発入門」の第3章にて実装したHenacat0_1の挙動について質問となります。 Henacat0_1のソースコードをダウンロードし、 コマンドプロンプトにてコンパイルを通してMainを実行したところ、 特に問題なく掲示板が稼動しました。 ところが、同ソースコードをEclipseで作成したJavaプロジェクトにコピペしてMainを実行したところ、 URL(http://localhost:8001/testbbs/ShowBBS)を入力したところでclassLoaderが例外を発生させてしまいました。 (デバッグ実行させたところ、WebApplicationインスタンスやServletInfoインスタンスは値を渡せているように見えます) Eclipseはデフォルト文字コードがUTF-8ですが、本プロジェクトについては個別設定でsjisを設定しているので文字コードは問題ないかと思うのですが。。。 また、binフォルダを見ても無名クラス含めてクラアスファイルはしっかり作成されていますし、ShowBBS等のクラスパス指定もElicpseのプロジェクト配下のクラスパスを指定してコンパイルしています。 文字コードとコンパイルミス以外に考えられる原因等はありますでしょうか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[2172] Re:c言語ポインタ完全制覇(改訂版)に関する質問
投稿者:(ぱ)こと管理人
2019/04/02 01:25:35

返信が遅れて申し訳ありません。 >書籍の中の補足でNULLマクロは処理系によって定義のされ方が違うと書かれていましたが、 >(void*)0であっても0であってもNULLは真偽値で言えば偽が返る値ということですね。 その通りです。これについてはC FAQに記載がありました。 http://www.kouno.jp/home/c_faq/c5.html#3 | 5.3: | ポインターがヌルポインターでないかどうかのテストの省略形 「if(p)」は有効なのか? | ヌルポインターの内部表現が0でない場合は どうなるのか。 | A: | C言語が式のブール値を必要とする場合(if、while、forやdo文において、 | また&&、||、!、?:演算子と共に使う場合)、0と比較して等しい場合は偽の値が | 産み出され、その他の場合は真が産み出される。すなわち | | if(expr) | | と書いたらいつも、「expr」がどんな式かにかかわらずコンパイラは必ず | | if((expr) != 0) | | と書かれたように基本的には動作する。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2171] Re:c言語ポインタ完全制覇(改訂版)に関する質問
投稿者:f_ki
2019/03/28 14:41:19

書籍の中の補足でNULLマクロは処理系によって定義のされ方が違うと書かれていましたが、(void*)0であっても0であってもNULLは真偽値で言えば偽が返る値ということですね。 本日読了しました。初心者だったので4章以降の実践的な部分は難しく感じる部分もありましたが、何度も読み返していくことでかなりの部分を理解できたと思います。 入門書を読んだだけで理解が曖昧だったポインタや配列、変数の分類や構造体などのC言語の文法についても改めて整理できました。本書のテーマはC言語のポインタですが、結果的にはC言語の文法全体に触れるような構成になっているのはそれだけC言語とポインタが深く広く結びついているということですね。 長くなりましたが技術書ながらとても読みやすく勉強になる本でした。質問にも丁寧に答えていただきありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2170] Re:C言語の標準入力とEOFの扱いについて
投稿者:f_ki
2019/03/28 14:24:48

stdinも含めてFILE構造体には、ファイルが終端に達したことを示すフラグがあって、そのフラグが立っている場合にはfgetc()で取り出される値はEOFになるということですね。 納得できました。ありがとうございます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2169] Re:c言語ポインタ完全制覇(改訂版)に関する質問
投稿者:(ぱ)こと管理人
2019/03/28 00:12:29

>P.297 List 5-14 11行目で、for文の終了条件にposとあるのですが、 >これは pos != NULL ではないでしょうか。 Cでは0以外は全部真なので、条件式にposと書いてもpos != NULLと書いても 意味は同じです。 Cプログラマは使いがちな書き方ではありますが、p.57の「ポインタ演算なんか 使うのはやめてしまおう」のところで『「一見してわかりにくいように見える」なら、 やっぱり書くべきではないでしょう』とか書いてる本としては ちょっとダブルスタンダードっぽいかな、とは我ながら思わなくもないです (^^;
[この投稿を含むスレッドを表示] [この投稿を削除]
[2168] Re:C言語の標準入力とEOFの扱いについて
投稿者:(ぱ)こと管理人
2019/03/28 00:05:43

あれ、昨晩返信したつもりなのに投稿されていませんでした。 >それとも標準入力において一度EOFが入力されたら、以降標準入力から取り出される値は >EOFとなることが決まっているのでしょうか。 こちらです。 規格では(マクロであることを除き)getc()はfgetc()と等価とされていますが、 そのfgetc()の説明には以下のようにあります。 | 返却値 そのストリームのファイル終了表示子がセットされている場合, | 又はストリームがファイルの終わりに達している場合,そのストリームの | ファイル終了表示子をセットし,fgetc 関数は,EOF を返す。 つまり、FILE構造体には「ファイル終了表示子」というフラグがあり、 ファイルの最後に達するとそれがセットされて、以後はEOFを返します。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2167] Re:c言語ポインタ完全制覇(改訂版)に関する質問
投稿者:f_ki
2019/03/27 21:55:06

お忙しい中ご返信ありがとうございます。 度々申し訳ないのですが、確認させていただきたい所がございます。 P.297 List 5-14 11行目で、for文の終了条件にposとあるのですが、これは pos != NULL ではないでしょうか。
[この投稿を含むスレッドを表示] [この投稿を削除]