Harry World!!

カナダ留学(バンクーバー・トロント)と海外就職を目指す人のための情報、クラウドソーシングサイトやネットショップの活用方法などを初心者向けに解説するブログ。

プログラミング

java初心者が調べたC言語との違い(備忘録)

投稿日:

組込みを7年、つまりC言語を7年やってきたけど、最近javaの勉強を始めたのでいろいろとメモっとく。

C言語とjavaの違い

オブジェクト指向か手続き型か

Javaはオブジェクト指向、Cは手続き型。

インタープリターかコンパイラか

コードをマシン語のレベルに変換するのがC Javaはまずバイトコードに変換したあとJVMが実行する。

高レベルか低レベルか

Cがマシンレベルに近い言語なのに対して、Javaは抽象化されている。

ボトムアップかトップダウンか

Javaは個々のエレメントを組み立てて作る。Cは全体を設計してから個々のエレメントを作成する。

メモリ管理

Javaはmalloc & freeとかする必要なし。使わなくなったメモリはガーベージコレクターが勝手に消してくれる。

Cだとnullが文字列の終結を表すが、Javaは意識する必要なし。String型を使えば+で文字列連結できたりする。

オーバーロード

Cはオーバーロードできない。なので同じ名前の関数は使えない。Javaは使える。

プロセッサー

Javaは#includeとか#defineとか使えない →importとかpublicとかstatic finalとか使って代替できる

例外判定

Javaはコード上にエラーがあっても例外として吸収される。Cはただただエラーとなる →コンパイルが通らない。

参考:What’s the main difference between C and Java?

実装のポイント

・アクセス修飾についての定石 → フィールドはprivate、メソッドはpublic。他のクラスからフィールドを読み書きするメソッド(セッター&ゲッター)を用意する

・親クラスを作った時、継承して子クラスを作るときに中身を実装してほしいメソッドにはabstructをつける。
 → abstrutを持ったクラスは必ずabstructクラスとなって、継承して使ってもらうこと前提なのでインスタンス化できない

・abstructもinterfaceもクラスの仲間。クラスの定義をあいまいにしたもの。
 → 子クラスは具体的な処理を書いていくものだから、この二つが実質、設計の役割も担ってそう。

・interfaceは抽象クラスの中の抽象クラスという感じ。フィールドを一つももっていないもの(ただしpublic static finalだけはできる)。宣言されたメソッドは強制的にpublicかつabstructになる。多重継承OK。

・ポリモーフィズムとはザックリとクラスを捉えること。newする時にそのクラス以外の型の変数へ代入する。

↓読んだのはこの本。説明に出てくる実装例がどれも分かりやすくて、初心者にもとっつきやすいと思った。

オラクルのチュートリアルで学んだこと

・/** documentation */ …ドキュメント形式のコメントを書くときはこうコメント化する

・全てのjavaアプリケーションはmain methodを持つ(C、C++と同じ)

・main methodに使われるargsはarguments(引数)の略。慣習的に”args” or “argv”と書く

↓本家本元OracleのJavaのチュートリアル
参考:The Java™ Tutorials

文法的違いをいくつか

・文字列はStringクラスで扱うのでchar型を使う必要がない。なのでCみたいにnull保障を気にしなくてOK

・文字列操作はStringクラスのメソッドを使う(例えば文字列長を取得するときはa.length())。Stringクラスが標準装備していないメソッドを使いたいときはパッケージをインポートする

・booleanを扱う時、わざわざif文を使わなくてOK(boolean t = (a == b)みたいな感じで書ける)

感想

Cを勉強してからJavaをやるのは楽だけど、逆は難しい。Javaしか書けない人ってポインタの勉強(メモリの概念の勉強)してないってことか…って思った。

文法と設計の学習を分けて考える。文法を覚えるのは比較的簡単。設計となるとCとは別物。

慣れてきたらBronze受けてみよっかな。

あ、「お前それ違うだろ!」って内容があったらコメントお願いします。







-プログラミング
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

C言語プログラマが調べたJavaの配列について

目下、Javaを勉強中なので備忘録…C言語ができる人目線で書いてます。 Javaの配列はオブジェクトであるというのがポイント(たぶんここさえ押さえればOK)。あとで詳しく補足する。 Contents1 …

文系でも学習期間1ヶ月で基本情報処理試験(FE)に一発合格した学習法

こんにちは、トロントでWebデベロッパーとして働いているハリーです。 今回はIT技術者向けの記事です。今年の秋の情報処理試験、みなさんどうでしたか?IT技術者の登竜門、基本情報処理試験の学習方法につい …

文系SEが教えるプログラミング初心者向けC言語入門書など4冊

こんにちは、トロントでWebデベロッパーとして働くハリーです。 Webデベロッパーになる前は組込み系プログラマだった僕。最近、日本人の友達から「C言語を勉強してみたいんだけどどうやって始めればいい?」 …

C言語プログラマが調べたJavaのオーバーロード

Contents1 オーバーロードって何?2 何が便利?3 定義時の注意点4 その他のポイント オーバーロードって何? 異なるパラメータの同名メソッドを定義できる機能 何が便利? ・「機能は同じだけど …

文系合格者が教える応用情報処理試験(AP)に受かる学習法

こんにちは、トロントでWebデベロッパーとして働いているハリーです。 今回はIT技術者向けの記事です。前回はIT技術者の登竜門、基本情報処理試験の学習方法について書きました。 文系でも学習期間1ヶ月で …