naoppy-jyokenの日記

Javaで競プロをするぞ、NITAC情研用

Java入門6.5

はじめに

この記事はNITAC情研競プロ班の活動メモです。

Java入門1~6の内容をやった後の補足説明として僕が喋ったもののまとめになります。

Java入門3の補足

言語にはJavaのようにコンパイルしてから実行するコンパイラ言語と、コンパイルをせずに実行するスクリプト言語がある。

Javaは記事の通りコンパイラ言語。ソースコードの拡張子は.javaコンパイル結果はJavaバイトコードで、拡張子は.class

C++やCもコンパイル言語。ソースコードの拡張子はそれぞれ.cpp.cコンパイルすると実行形式ファイル.exeなどになる。

一方でスクリプト言語の例としては、pythonrubyなどがある。それぞれソースコードの拡張子は.py.rb

コンパイラ言語とスクリプト言語の違い

コンパイラ言語の特徴として、実行が早い、記述が冗長など。

スクリプト言語の特徴として、簡単に書ける。実行は比較的遅い。

一概にどちらが優れているとは言えず、ケースバイケースといったところです。

最近はスクリプト言語コンパイルしたりコンパイラ言語をスクリプトのように実行することも普通にできるようになってきていて、違いを意識することはないですが。

参考リンク:https://www.gwtcenter.com/what-is-scripting-language

Java入門4の補足

public static void main (String[] args) throws java.lang.Exception {

}

throws java.lang.Exceptionの部分はエラー処理のコードなので通常はいらない。消しても大丈夫。

public static void main(String[] args) {}について、今の知識だけで簡単に説明する。これは後の回でしっかり説明するので、こういう意味があるんだなー程度でいいです。

まず、このmainがあるプログラムは、起動して一番最初に呼ばれるプログラム。その一番最初に呼ばれるプログラムに何が求められるかというと

  • どこからでも呼び出せるようにオープンに
  • 最初に呼び出されるので、最初から存在している必要がある
  • 決まった名前の関数(最初に呼ばれるのは特別な名前)
  • 起動引数(プログラムのオプション)を受け取れる必要がある

よってpublic = オープンに、static = 最初から存在、void = 処理結果は返さない(最初に呼ばれるので返す場所がない)、main = 特別な名前、最初に実行される決まり、(String[] args) = 起動引数を取るため

となっている。よってpublic static void main(String[] args) {}

Java入門5,6の補足

byte型は1byte、shortは2byte、intは4byte、longは8byte。 何故1,2,3,4...ではなく20,21,22,23...となっているのか?

それはコンピューターが扱うのは2進数なので、2の乗数の大きさのメモリを使うほうが都合がよいから。

32bitコンピュータ、64bitコンピュータ

windowsなら、左下のwindowsマークを右クリックしてシステムという欄を開いてみよう。システムの種類のところに64ビットオペレーティングシステムなどと書いてあるはずだ。 これは「このコンピュータは64bitをひとかたまりとして計算したりしますよ」ということだ。

今の時代、ほぼ全てのコンピュータが64bitで、古いパソコンは32bitの場合もある。といったところだ。

整数型

上記の通り、32bitのint型か64bitのlong型がコンピュータにとって丁度良いのだが、int型とlong型のどちらを使えばいいのだろうか。 演算速度は変わらないので、プラスマイナス約21億(231)に収まる数しか格納しないのであれば、メモリ効率の良いint型を使うべきである。

浮動小数点型

floatとdoubleがあり、それぞれ4byteと8byteである。上のintとlongの話のように、4byteであるfloatを使えばいいのだろうか?否だ。doubleを使うべきである。

何故なら、intの1とlongの1はどちらも変わらず1を表す。しかし浮動小数点型においては違うからだ。

単純な話に置き換えてわかりやすく説明すると、floatでの1は1.00だとすると、doubleでの1は1.000000みたいなものである(実際は1はどちらでも誤差なく表すことができるが、説明の為省略)。有効数字(精度)が違うので、浮動小数点型を使う際はできるだけ精度のよいdouble型をつかうべきなのだ。

char型

char型は一文字を表す。実は内部に入っているのは数字である。コンピュータは65番の文字='A'、66番='B'のように、文字と数字を対応づけている。これの対応させる体系を文字コードという。 UTF-8SJISなどは聞いたこともあると思う。

コンピュータが65という数字を見た時、それを文字だ!と思って'A'と解釈するか、数字だ!と思って65と解釈するかは型が決める。型はデータの種類を表すというのはこういうことなのだ。

boolean型

intが-1,0,1,50などを持つのと比較すると、boolean型は2種類の値のどちらかしか持てない。具体的にいうと、true(ホント)とfalse(ウソ)の2種類を持つ。 これらは後に勉強する条件分岐の文などで使われる。

String型は基本型なのか

これはJava初心者が間違えやすい注意ポイントなのだが、String型は参照型である。少しだけJavaに特別扱いされているので間違えやすいが、これは後々も使う大事な知識なので間違えずに覚えること。