Translate

2015年11月24日火曜日

継承におけるStatic

class Sample{
 public static void main(String[] args){
  A obj = new C();
  obj.hoge();
 }
}

class A{
 static void hoge(){
  System.out.println("A");
 }
}

class B extends A{
 static void hoge(){
  System.out.println("B");
 }
}

class C extends B{
 static void hoge(){
  System.out.println("C");
 }
}

これは A


class Sample{
 public static void main(String[] args){
  B obj = new C();
  obj.hoge();
 }
}

class A{
 static void hoge(){
  System.out.println("A");
 }
}

class B extends A{
 static void hoge(){
  System.out.println("B");
 }
}

class C extends B{
 static void hoge(){
  System.out.println("C");
 }
}

これは B


class Sample{
 public static void main(String[] args){
  C obj = new C();
  obj.hoge();
 }
}

class A{
 static void hoge(){
  System.out.println("A");
 }
}

class B extends A{
 static void hoge(){
  System.out.println("B");
 }
}

class C extends B{
 static void hoge(){
  System.out.println("C");
 }
}

これは C

class Sample{
 public static void main(String[] args){
  A obj = new C();
  obj.hoge();
 }
}

class A{
 static void hoge(){
  System.out.println("A");
 }
}

class B extends A{
}

class C extends B{
}

これは A


class Sample{
 public static void main(String[] args){
  B obj = new C();
  obj.hoge();
 }
}

class A{
 static void hoge(){
  System.out.println("A");
 }
}

class B extends A{
}

class C extends B{
}

これも A


class Sample{
 public static void main(String[] args){
  C obj = new C();
  obj.hoge();
 }
}

class A{
 static void hoge(){
  System.out.println("A");
 }
}

class B extends A{
}

class C extends B{
}

これでも A

そういうものなのか・・・

例外

public class Sample {
 public static void main(String[] args){
  try{
   String[] string = new String[2];
   System.out.println(string[0]); //null
   System.out.println(string[1].toString()); //ここでエラー
  }catch(Exception e){
   System.out.println(e); //NullPointerException
  }
 }
}

nullを出力できるが toString()は実行時エラー

String

public class Sample {
 public static void main(String[] args){
  String str = "ABCDABC";
  
  System.out.println(str.charAt(1));
  System.out.println(str.length());
  
  String str2 = (String)str.subSequence(4, 7);
  System.out.println(str2); //CBA 範囲を超えると IndexOutOfBoundsExceptionがスロー
  
  System.out.println(str.indexOf('B')); //1
  System.out.println(str.indexOf("CD"));//2
  
  System.out.println(str.indexOf('B', 3)); //5
  System.out.println(str.lastIndexOf('A'));//4
  
  System.out.println(str.startsWith("ABC")); //true 先頭から始まっているか?
  System.out.println(str.startsWith("CD", 1)); //false 2文字目からCDで始まっているか?
  System.out.println(str.startsWith("CD", 2)); //true 3文字目からCDで始まっているか?
  System.out.println(str.endsWith("DABC")); //true DABCで終わるか?
 }
}


equalは、文字列の比較
== は、参照しているObjectが一緒の場合 true

public class Sample {
 public static void main(String[] args){
  String str1 = "ABC";
  String str2 = "AB";
  str2 += "C";
  System.out.println(str1 == str2);      //false
  System.out.println(str1.equals(str2)); //true
  
  String str3 = "CD";
  String str4 = "CD";
  System.out.println(str3 == str4); //true 
  
  String str5 = "EF";
  String str6 = new String("EF");
  System.out.println(str5 == str6); //false
 }
}

StringBuilderの場合
public class Sample {
 public static void main(String[] args){
  StringBuffer str1 = new StringBuffer("ABC");
  StringBuffer str2 = new StringBuffer("ABC");
  System.out.println(str1 == str2); //falase
  
  str1 = str2;
  System.out.println(str1 == str2); //true
 }
}

2015年11月23日月曜日

ArrayList

■追加

値のみで、一番最後に追加、
indexと、値でindex番号に追加

import java.util.List;
import java.util.ArrayList;

public class Sample {
 public static void main(String[] args){
  List list = new ArrayList();
  list.add("a");
  list.add("b");
  list.add("d");
  list.add("e");
  
  list.add(2, "c"); //途中に追加
  list.add(list.size(), "f"); //最後に追加

  String[] arrStrings = (String[])list.toArray(new String[list.size()]);
  System.out.println(String.join(", ", arrStrings));


 }
}

一番最後の要素+1(size)より大きい数字を指定するとエラーになる。
java.lang.IndexOutOfBoundsException: Index: 100, Size: 6

addAllはリストごと追加
import java.util.List;
import java.util.ArrayList;

public class Sample {
 public static void main(String[] args){
  List listA = new ArrayList();
  listA.add("a");
  listA.add("b");
  listA.add("c");
  
  List listB = new ArrayList();
  listB.add("d");
  listB.add("e");
  listB.add("f");
  
  listA.addAll(listB);
  
  String[] arrStrings = (String[])listA.toArray(new String[listA.size()]);
  System.out.println(String.join(", ", arrStrings));
 }
}


ほかいろいろ。
import java.util.List;
import java.util.ArrayList;

public class Sample {
 public static void main(String[] args){
  List list = new ArrayList();
  System.out.println(list.isEmpty()); //true 
  
  list.add("a");
  list.add("b");
  list.add("c");
  list.add("b");
  list.add("a");
  
  System.out.println(list.contains("c")); //true
  System.out.println(list.contains("d")); //false
  
  
  System.out.println(list.get(0)); //a
  System.out.println(list.indexOf("b")); //1 最初から探査して最初にマッチする要素
  System.out.println(list.lastIndexOf("b")); //3 最後から探査して最初にマッチする要素
  
  list.set(3,  "z"); //4番目の要素をdに変える
  list.remove("a"); //最初にマッチしたaを消す
  list.remove(list.size() - 1); //最後の要素を消す
  
  String[] arrStrings = (String[])list.toArray(new String[list.size()]);
  System.out.println(String.join(", ", arrStrings)); //b, c, z
 }
}

コレクション

■Deque
import java.util.ArrayDeque;
import java.util.Deque;

public class SampleCode {
 public static void main(String[] args){
  Deque dq = new ArrayDeque();
  dq.add(3);      //末尾に追加
 
  dq.push(2);     //先頭に追加
  dq.addFirst(1); //先頭に追加
  
  dq.offer(4);    //末尾に追加
  dq.addLast(5);  //末尾に追加

  System.out.println("--element--");
  System.out.println(dq.element());  //1 先頭の要素を取得、削除せず
  System.out.println("--peek--");
  System.out.println(dq.peek());     //1 先頭の要素を取得、削除せず
  System.out.println(dq.peekFirst());//1 先頭の要素を取得、削除せず
  System.out.println(dq.peekLast()); //5 末尾の要素を取得、削除せず
  System.out.println("--get--");
  System.out.println(dq.getFirst()); //1 先頭の要素を取得、削除せず
  System.out.println(dq.getLast());  //5 末尾の要素を取得、削除せず

  System.out.println("--poll--");
  System.out.println(dq.poll());     //1 先頭の要素を取得、削除する
  System.out.println(dq.pollFirst());//5 末尾の要素を取得、削除する
  System.out.println(dq.pollLast()); //2 先頭の要素を取得、削除する
  
  System.out.println("--pop--");
  System.out.println(dq.pop());      //3 先頭の要素を取得、削除する
  
  System.out.println("--remove--");
  System.out.println(dq.remove());   //4 何も指定しないと先頭の要素を削除
 }
}


push 先頭に追加
add, offer 末尾に追加

element, peek 先頭、削除せず
poll, pop,remove 先頭、削除する


■HashMap
package localhost;

import java.util.HashMap;
import java.util.Map;

public class SampleCode {
 public static void main(String[] args){
  HashMapmap = new HashMap();
  map.put("A", 1);
  map.put("B", 2);
  map.put("B", 3);
  
  for(String key : map.keySet()){
            System.out.println(key + ":" + map.get(key));
        }

        for(Integer val : map.values()){
            System.out.println(val);
        }
        
        for(Map.Entry e : map.entrySet()){
         System.out.println(e.getKey() + ":" + e.getValue());
        }
 }
}


C#と異なり、キーがかぶっても何もいわないとこかな。

2015年11月21日土曜日

javaでコンパイル した際の.classファイルの数

めもめも。

public class Outer {
}

コンパイル:
Outer.class
---------------------------------------------------
public class Outer {
  private class Inner{}
}

コンパイル:
Outer.class
Outer$Inner.class
---------------------------------------------------
public class Outer {
  private class Inner{} //privateなコンストラクタができている

  private void hoge(){
    new Inner(); //privateなコンストラクタ持ちの内部クラスをコンパイルすると・・・
  }
}

コンパイル:
Outer.class
Outer$Inner.class
Outer$1.class
---------------------------------------------------
public class Outer {
  public class Inner{} //publicにすれば Outer$1.classはできない

  private void hoge(){
    new Inner();
  }
}

コンパイル:
Outer.class
Outer$Inner.class
---------------------------------------------------
public class Outer {
  public class Inner{
    private Inner(){} //クラスはpublicだけどコンストラクタはprivate
  }

  private void hoge(){
    new Inner();
  }
}

コンパイル:
Outer.class
Outer$Inner.class
Outer$1.class
---------------------------------------------------

public class Outer {
  public class Inner{
    private Inner(){}
    private Inner(String arg){}
  }

  private void hoge(){
    new Inner();
    new Inner(""); //複数private コンストラクタを作っても変わらない
  }
}

コンパイル:
Outer.class
Outer$Inner.class
Outer$1.class

2015年11月19日木曜日

IO DataのUSB-RGB2 ドライバメモ

いままで、Mac Book Airを家で使う時はデュアル画面で作業していたのだけど、
つい、3画面にしたいなぁ・・・と思って調べてみると、

IO DataのUSB-RGB2を使えば解決しそうってことでさっそく買ってみたものの・・・
無反応(10.10 Yosemite)。

そこで、最新のドライバいれればなんとかなるだろ。
ってことで、
http://www.iodata.jp/lib/product/u/3361.htm

からダウンロードしてみたものの、これを入れても解決せず・・・


ネットを徘徊していたら、下記のドライバを入れたら解決!
って話があったので、
http://www.displaylink.com/support/mac_downloads.php



Version 2.4をダウンロードしていれてみる。

再起動を要求されるので、再起動。

そして、接続してみると無反応・・・
と、思ったところ、数秒したら表示してくれましたとさ。