【JavaSilver】その他

<table>
  <caption>変数、メソッドに指定するアクセス修飾子</caption>
  <thead>
    <tr>
      <th>修飾子</th>
      <th>意味</th>
    </tr>
  </thead>
  <tr>
    <td>public</td>
    <td>どの外部からでもアクセス可能。</td>
  </tr>
  <tr>
    <td>protected</td>
    <td>
    同じパッケージのクラス、または継承したサブクラスから
    <br>であれば、アクセス可能。</br>
    </td>
  </tr>
  <tr>
    <td>(なし)</td>
    <td>同じパッケージのクラスからであればアクセス可能。</td>
  </tr>
  <tr>
    <td>private</td>
    <td>外部クラスからのアクセスはできず、同じクラス内のメソッド
    からのみアクセス可能。</td>
  </tr>
  <tr>
    <td>abstract</td>
    <td>変数に対して指定することはできない。</td>
  </tr>
</table>

* staticメソッドはprotectedを使用ができない。
* staticメソッドはprivateを使用可。
* defaultメソッドで指定できるアクセス修飾子はpublicのみ。
* final修飾子が指定されたメソッドは、サブクラスでのオーバーライドが禁止。
* ローカル変数にprivateは使えない。
* 継承関係でもprivateメソッドにはアクセスできない
```java:例題
public class A {
    private boolean isValue(int val) {
        return true;
    }
}
```
```java
public class B extends A {
    public int test(int num) {
        if(isValue(num)) {
            return num;
        }
        return 0;
    }
    public static void main(String[] args) {		
        B b = new B();
        System.out.println(b.test(10));	
    }
}
```
```:実行結果
継承関係でもprivateメソッドにはアクセスできないためコンパイルエラー
```

<table>
  <caption>クラスに指定するアクセス修飾子</caption>
  <thead>
    <tr>
      <th>修飾子</th>
      <th>意味</th>
    </tr>
  </thead>
  <tr>
    <td>public</td>
    <td>すべてのパッケージからアクセス可能。</td>
  </tr>
  <tr>
    <td>(なし)</td>
    <td>同一パッケージ内からのみアクセス可能。</td>
  </tr>
  <tr>
    <td>final</td>
    <td>このクラスをスーパークラスとしたサブクラスは生成できない。</td>
  </tr>
  <tr>
    <td>abstract</td>
    <td>
    abstractメソッドを定義できる。
    <br>インスタンス化できない。</br>
    <br>他のクラスのスーパークラスとして使用される。</br>
    </td>
  </tr>
</table>

* クラス宣言時にprotectedとprivate修飾子は付与できない。
* 他のパッケージのクラスを利用する場合は、次の条件を満たさないといけない。
・import文を定義し、利用するクラスのインポートを行う。
　(または完全指定クラス名で指定)
・利用するクラスがpublicクラスであること。

```java:例題
package ex25.a;

class Sample {
    public String value;
    public Sample(String value) {
        this.value = value;
    }
}
```
```java
package ex25.b;
import ex25.a.Sample;

public class Main {
    public static void main(String[] args) {		
        Sample s = new Sample("Hello Java");
        System.out.println(s.value);	
    }
}
```
```:実行結果
アクセス修飾なしのSampleクラスは外部のパッケージからアクセスできないためコンパイルエラー
```

* importの問題					

```java:例題
package x;

public class Foo {				
    public static void method() {}			
}				
```
```java
package x.y;				
[①]				
public class Main {				
    public static void main(String[] args) {			
        [②]		
    }			
}				
```						

```:解答
A. ①に「import x.Foo;」、②に「x.Foo.method();」を挿入する				
B. ①は何も書かずに、②に「x.Foo.method();」を挿入する				
→上記でコンパイル実行が成功
```



<table>
  <caption>演算子</caption>
  <thead>
    <tr>
      <th>演算子</th>
      <th>記述例</th>
      <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td>&</td>
    <td>a & b</td>
    <td>
    aとbの両方がtrueのときtrue、そうでなければfalse。
    <br>aがfalseであったとしてもbは評価される。</br>
    </td>
  </tr>
  <tr>
    <td>&&</td>
    <td>a && b</td>
    <td>
    aとbの両方がtrueのときtrue、そうでなければfalse。
    <br>aがfalseならbは評価されず結果がfalseとなる。</br>
    <br>aがtrueならbも評価され結果を返す。</br>
    </td>
  </tr>
  <tr>
    <td>|</td>
    <td>a | b</td>
    <td>
    aとbいずれかがtrueならtrue、そうでなければfalse。
    <br>aがtrueであったとしてもbは評価される。</br>
    </td>
  </tr>
  <tr>
    <td>||</td>
    <td>a || b</td>
    <td>
    aとbいずれかがtrueならtrue、そうでなければfalse。
    <br>aがtrueならbは評価されず結果がtrueとなる。</br>
    <br>aがfalseならbも評価され結果を返す。</br>
    </td>
  </tr>
  <tr>
    <td>^</td>
    <td>a ^ b</td>
    <td>
    aとbの値が異なるときtrue、そうでなければfalse。
    </td>
  </tr>
  <tr>
    <td>!</td>
    <td>! a</td>
    <td>
    aの値がtrueのときfalse、falseのときtrue。
    </td>
  </tr>
</table>

<table>
  <caption>○進数</caption>
  <thead>
    <tr>
      <th>進数</th>
      <th>例</th>
      <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td>2進数</td>
    <td>0b101</td>
    <td>
    0と1の2つの数字を使用して数を表現する。
    <br>先頭に0bを入れると2進数と判断される。</br>
    <br>bは大文字、小文字どちらでも可。</br>
    </td>
  </tr>
  <tr>
    <td>8進数</td>
    <td>0377</td>
    <td>
    0から7までの8個の数字を使用して数を表現する。
    <br>先頭に0を入れると8進数と判断される。</br>
    </td>
  </tr>
  <tr>
    <td>16進数</td>
    <td>oxff</td>
    <td>
    0から9までの数字とAからF(もしくはaからf)までの。
    <br>アルファベットを使用して数を表現する。</br>
    <br>先頭に0xを入れると16進数と判断される。</br>
    <br>xは大文字、小文字どちらでも可。</br>
    </td>
  </tr>
</table>

<table>
  <caption>ラッパークラス</caption>
  <thead>
    <tr>
      <th>基本データ型</th>
      <th>対応するラッパークラス</th>
    </tr>
  </thead>
  <tr>
    <td>byte</td>
    <td>Byte</td>
  </tr>
  <tr>
    <td>short</td>
    <td>Short</td>
  </tr>
  <tr>
    <td>int</td>
    <td>Integer</td>
  </tr>
  <tr>
    <td>long</td>
    <td>Long</td>
  </tr>
  <tr>
    <td>float</td>
    <td>Float</td>
  </tr>
  <tr>
    <td>double</td>
    <td>Double</td>
  </tr>
  <tr>
    <td>char</td>
    <td>Character</td>
  </tr>
  <tr>
    <td>boolean</td>
    <td>Boolean</td>
  </tr>
</table>

* BooleanクラスのstaticメソッドであるparseBoolean()は引数の文字列true(大文字小文字区別しない)と等しければboolean型のtrueを返す。			
* 引数にnullを代入した場合は、falseの値を保持するオブジェクトを生成。

<table>
  <caption>==演算子とequalsメソッド</caption>
  <thead>
    <tr>
      <th>演算子やメソッド</th>
      <th>意味</th>
    </tr>
  </thead>
  <tr>
    <td>==演算子</td>
    <td>オブジェクトの参照情報が一致すればtrue。</td>
  </tr>
  <tr>
    <td>
    StringBuilderクラスのequals()メソッド
    <br>(Objectクラスのequals()メソッド)</br>
    </td>
    <td>オブジェクトの参照情報が一致すればtrue。</td>
  </tr>
  <tr>
    <td>Stringクラスのequals()メソッド</td>
    <td>オブジェクトの値が一致すればtrue。</td>
  </tr>
</table>

* equalsメソッドはnullが渡されたときには、常falseを戻さないといけない。

```java
String s1 = "Java";				
String s2 = new String("Java")			
s1.intern() == s2.intern()); // → 出力結果：true	
```
* インターン化すると文字列がString Constant Poolにあるか確認し、すでにあればその文字列を返します。			
なければString Constant Poolのその文字列を追加し返します。			
newした場合、Stringコンスタントプールへの保管はされず、ヒープ領域へ直接保管される。