ラベル Java の投稿を表示しています。 すべての投稿を表示
ラベル Java の投稿を表示しています。 すべての投稿を表示

2019年9月8日日曜日

Java/クラス継承

新しい会社でJavaを新たに学ぶことになり、JavaSilverを勉強中。

勉強の記録したことを、自分の記録としても残しておこうと思う。

可能な限りシンプルな例で、言語の仕様などを理解できるように書いていこうと思う。

前提

JVMはインストールされている前提とする。

開発する環境はいろいろあるとは思うが(実際自分のパソコンにもSTSが入っているが)、愚直にコマンドラインからコンパイルを行っていく。

クラスの継承

Jobsというクラスを継承して、EngineerやPolice、Firefighter、Doctorといった子クラスを作っていくことを考える。

(まずはEngineerをつくるので、Policeなどはまだつくらないかもしれないが)

まず、Jobsクラスをつくる。
//Jobs.javaというファイル名にする。
//クラス名とファイル名は同じにしなければいけない。
public class Jobs{
int salary;
}
同様に、Engineerクラスを作る。
//Engineer.javaというファイル名にする。
//クラス名とファイル名は同じにしなければいけない。
public class Engineer extends Jobs{
  Engineer(){
    salary = 50;
  }
}
この二つのファイルを作成し、同じディレクトリに置いておく。

コマンドでカレントディレクトリ(この二つのファイルが置いてあるディレクトリ)に移動したら、以下のようにコマンドを打つ。
$javac Engineer.java
そうすると、同じディレクトリに、Jobs.classというファイルと、Engineer.classというファイルが作成される。

今回の場合、何かを行うわけではないので(コンソールに表示したりとか)、「無事コンパイルできました」というところで話は一区切りとなる。
$javac Jobs.java Engineer.java
としてもよいが、Engineer.javaだけでも同じこと。

コンパイルが失敗する例

コンパイルできない例も書いておく。

Jobsクラスは以下のようにする。(フィールドは何も宣言しない。)
//Jobs.javaというファイル名にする。
//クラス名とファイル名は同じにしなければいけない。
public class Jobs{
}
Engineerクラスは同じ。(だけどもう一度書いておく。)
//Engineer.javaというファイル名にする。
//クラス名とファイル名は同じにしなければいけない。
public class Engineer extends Jobs{
  Engineer(){
    salary = 50;
  }
}
これで、同じく
$javac Engineer.java
と打つ。

そうすると、以下のようなエラーが吐かれる。
Engineer.java:5: エラー: シンボルを見つけられません
    salary = 50;
    ^
  シンボル:   変数 salary
  場所: クラス Engineer
エラー1個
salaryという変数は親クラスでも子クラスでも宣言されていないからだ。

余談

本題とは少し関係ないが、やらかした凡ミスも書いておく。

本当に初歩の初歩のミスだが、extendsのところをsを抜かしてextendにしてしまってコンパイルできなかったことがあった。
//Engineer.javaというファイル名にする。
//クラス名とファイル名は同じにしなければいけない。
public class Engineer extend Jobs{
  Engineer(){
    salary = 50;
  }
}
これでコンパイルをしようとすると以下のようなエラーが出される。
Engineer.java:1: エラー: '{'がありません
public class Engineer extend Jobs{
                     ^
エラー1個

2019年6月26日水曜日

Tomcatの起動の仕方

随分久しぶりの更新となってしまった。

転職先の研修でJavaをやっているので、その絡みで、これまでの流れ?と話は変わるがTomcatについて書こうと思う。


今回書くのは、まずはTomcatのターミナルからの起動方法。

Tomcat自体は、単体でもインストールできるが、Eclipse(エクリプスorイクリプスと読みます)をインストールすればその中に入っているので、とりあえずそれを使うことにする。(Spring tool suite、通称STSでも同様。)

Tomcat自体のインストールやEclipseのインストールは検索すればすぐ出てくるので省略する。

もう少し具体的にいえば、途中までの行き方はインストールの仕方によってそれぞれ違うと思うので、ここでは、Tomcatの中のbinというディレクトリのところまで辿りつけたところから話を始める。

ちなみにbinというのはどういうディレクトリかというと、中にはこんなファイルやディレクトリがあるところ。

  • bootstrap.jar
  • commons-daemon.jar
  • makebase.sh
  • tomcat-juli.jar
  • catalina-tasks.xml
  • configtest.bat
  • setclasspath.bat
  • tomcat-native.tar.gz
  • catalina.bat
  • configtest.sh
  • setclasspath.sh
  • tool-wrapper.bat
  • catalina.sh
  • daemon.sh
  • shutdown.bat
  • tool-wrapper.sh
  • ciphers.bat
  • digest.bat
  • shutdown.sh
  • version.bat
  • ciphers.sh
  • digest.sh
  • startup.bat
  • version.sh
  • commons-daemon-native.tar.gz
  • makebase.bat
  • startup.sh
参考までに、今回の記事のようにEclipseの中のTomcatを使う場合、その場所は、

/Applications/Eclipse_2019-03.app/Contents/tomcat/9/bin

にある。

さて、binの中のstartup.shのコマンドを打ちたいが、このままではパーミッションが有効ではないので、カレントディレクトリがbinの状態で以下のようなコマンドを打つ。
$ chmod 755 *.sh
特に何か起こったようには見えないが、気にしない。

そうすれば、startup.shが実行できるようになるので、以下のようにコマンドを打つ。
 #くどいようだけど、カレントディレクトリがbinフォルダであるという前提。
$ ./startup.sh
そうすると以下のようになれば成功。
Using CATALINA_BASE:   /Applications/Eclipse_2019-03.app/Contents/tomcat/9
Using CATALINA_HOME:   /Applications/Eclipse_2019-03.app/Contents/tomcat/9
Using CATALINA_TMPDIR: /Applications/Eclipse_2019-03.app/Contents/tomcat/9/temp
Using JRE_HOME:        /Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home
Using CLASSPATH:       /Applications/Eclipse_2019-03.app/Contents/tomcat/9/bin/bootstrap.jar:/Applications/Eclipse_2019-03.app/Contents/tomcat/9/bin/tomcat-juli.jar
Tomcat started.
適当なブラウザを開き、http://localhost:8080/というURLに移動すれば、Tomcatのページが表示される。