つもりちがい




高いつもりで低いのが教養
低いつもりで高いのが気位

深いつもりで浅いのが知識
浅いつもりで深いのが欲望

厚いつもりで薄いのが人情
薄いつもりで厚いの面の皮

強いつもりで弱いのが根性
弱いつもりで強いのが自我

多いつもりで少ないのが分別
少ないつもりで多いのが無駄

*

怖めず臆さず恥じらわず
邪念捨てて分からぬ事を問うて為せば良い
為せば成るし為さねば成らぬ何事も
成らぬは人の為さぬなりけり

*




続きを読む

2018-01-08 10:08 : 雑記 : コメント : 36 : トラックバック : 0 :

[開発][谷本心] Java本格入門

Chap.1 Javaの基本を知ろう

Java SE – Standard Edition
Java EE – Enterprise Edition
Java ME – Micro Edition
JRE – Java Runtime Environment
JDK – Java Development Kit


Chap.2 基本的な書き方を身につける

Java VM – HotSpot, JRockit, IBM JVM, HP-UX JVM, Zing, OpenJDK

Javaの基本的な記法
- 文とブロック
- コメント
- 変数、型、リテラル ※ リテラル = 変数に代入する値を具体的に表現したもの
- 演算子:単項演算子, 二項演算子, 三項演算子
- 数術演算子:+, -, *, /, %, - (単項演算子), ++ (単項演算子), -- (単項演算子)
- 関係演算子:==, !=, >, >=, <, <=, instanceof
- 条件演算子:<条件> ? 式1 : 式2
- 論理演算子:&&, ||, ! (単項演算子)
- ビット演算子:&, |, ^ (ビット演算XORを行う), <<, >>, >>>, ~ (単項演算子, bitを反転する)
- 代入演算子:=, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=, >>>=
- 文字列結合に利用する演算子:+, +=
- 制御構文:if, switch, for / for-each, while / do…while
- クラスとメソッド
- 修飾子:アクセス修飾子, abstract修飾子, static修飾子, final修飾子, transient修飾子, volatile修飾子, synchronized修飾子, native修飾子, strictfp修飾子
# static – classがinstance化されていなくてもaccessできるmemberに付ける
# final – 大文字のスネークケースで定義する
# transient – objectのserialize時にserialize対象から除外される
# volatile – multithreadからaccessされるfieldがthread毎にcacheされないようにする
# synchronized – 同時に1threadだけ実行できることを指定する
# native – C/C++などJava以外のnative codeを呼び出すことを指定する
# strictfp – 浮動小数点をIEEE 754企画で厳密に処理することを指定する
- メソッドのオーバーライド
- インスタンス
- thisを用いた記述の注意点
- コンストラクタ

- Javadoc
- アノテーション - @Override, @Deprecated. @SuppressWarnings
- クラスと変数はキャメルケースで、定数はスネークケースで
- 変数名の後ろに_は付けない
- 変数は名詞、メソッドは動詞で命名すべし
- 「不吉な匂い」がする名前は要注意

Chap. 3 型を極める

Javaは静的型付け言語
# 言語次第で型が決まるtiming異なる―静的片付け言語 と 動的型付け言語
# JavaScriptやRubyは動的片付け言語
Javaの型は2種類 ― プリミティブ型 と 参照型
プリミティブ型:byte, short, int, long, char, float, double, Boolean
- リテラルによるプリミティブ型変数の宣言 ― ★なだ謎い
- ライドニングとナローイング ― e.g. int intNum = shourtNum; // ワイドニングによる自動変換

参照型
- 参照(ポインタ)
- 文字列リテラル
- nullリテラル

ラッパークラス
- プリミティブ型(基本型)はobjectでなく単なるvalue = methodを持たない
- プリミティブ型に対する操作はラッパー(参照型)に入れて扱う - e.g. primitive: byte = wrapper: java.lang.Byte
- wrapperクラスによくあるmethodたち:#valueOf, #pareseXxx, #toString
- primitiveはnullを持てない = null checkが不要

オートボクシングとアンボクシング ― 「==」演算子とかでは注意が必要
primitive à wrapper class への自動変換 = オートボクシング Autoboxing
wrapper class à primitive への自動変換 = アンボクシング Unboxing
autoboxing/unboxingは利用せずに明示的に変換するのが無難

クラスを定義する
パッケージ
# FQCN = fully qualified class name
アクセス修飾子
- 対クラス:public, default
- 対メソッド:public, protected, default, private
その他の修飾子:static, final

継承
抽象クラス
インタフェース
匿名クラス - ref. ラムダ式
Nested class - ref. Effecitve Java 第2版

Instanceof演算子
オブジェクトの等価性
- hashCodeメソッド - 自身のobjectの内容を新た巣数値(ハッシュ値)=同じ値を持つオブジェクトは同じハッシュ値となる
- ハッシュ値比較はequals比較より速い。※ hashCodeとequalsを両方が等価条件
- Objects.hash で hashCode 作れる (Java 7 +)
- デフォのtoString は、基底クラスのObject#toString のhashCode になる
- メソッドチェイン形式での文字連結 = StringBuilder#append

型にまつわる問題の予防
列挙型 enum
- public static finalは型安全でない=不正に動作する可能性あり
- 大文字で定義するのはpublic static finalと同じ
- switch 文にも利用可能
- enumのconstructor は privateとすること

ジェネリクス (総称型) – java 5 +
List list = new ArrayList<>();
# Java 7+であればダイヤモンドオペレータで略式定義が可能
Stack, push, pop, remove – null check 要。
仮型パラメータE でジェネリックス定義例
List list;
# list.forEach(stack::push)なことも可能
public class HogeClass
# extends 以外にsuper, 不定を表す?も使用可能- cf. Effective Java 第2版


Chap. 4 配列とコレクションを極める
System.arraycopy(oldArray, 0, newArray, 0, oldArray.length);
Int[] newArray2 = Arrays.copyOf(oldArray, oldArray.length + 2);
上記両者の性能は互角
Int[] array = {1, 1, 2, 3, 5, 8, 13};
System.out.println(array); à [I@1bb60c3 = [ (配列) + I (int型) + @1bb60c3 (ハッシュ値)
System.out,println(Arrays.toString(array)); à [1, 1, 2, 3, 5, 8, 13]
Arrays.sort(array);
プリミティブ型の場合 à 値の昇順でsort
オブジェクト型の場合 à Comparable インタフェースの compareTo でsort ( = ComparableをimplしてないとClassCastException)

Sort by Comparable à デフォルトソートとして利用
Sort by Comparator à 業務的に必要な順序にソート

Arrays.binarySearch (2分探索)

void hogeMethod(String… args)

Collection > List, Set, Map

List : ArrayList, LinkedList(順序保持リスト), CopyOnWriteArrayList(ThreadSafeなArrayList)
add, addAll, set, remove, removeAll, retainAll (一致しない要素の削除), clear
get, size, isEmpty, subList, toArray
contains, containsAll, indexOf, lastIndexOf
iterator, listIterator
Collections.sort

for (String element : list) { … }
*
for (Iterator iterator = list.iterator(); iterator.hasNext(); ) {
….String element = iteratory.next();
….System.out.println(element);
}
*
Iterator iterator = students.iterator();
while (literator.hasNext()) {
….Student student = iterator.next();
….if (student.getScore() < 70) {
……..iterator.remove();
….}
}

ArrayList: 追加○, 挿入○, 値取得◎, 検索× à for文を使う
LinkedList: 追加◎, 挿入◎, 値取得×, 検索× à 要素の追加削除が多い
CopyOnWriteArrayList: 追加○, 挿入○, 値取得◎, 検索× à 複数threadからの同時アクセスあり






pp.134

tag : 谷本心 Java本格入門

2017-06-16 08:06 : 開発 : コメント : 0 : トラックバック : 0 :
ホーム  次のページ »

search

ad



counter


tag cloud

category cloud