教育・子育て

java chapter 20 発展的な知識

マんタ's icon'
  • マんタ
  • 2026/07/02 01:42

遂に最終章

年内にはたどり着けませんでしたが・・・

 

1.インスタンスメンバとstaticメンバ

staticのつくものは2つ

static変数(クラス変数)と staticメソッド(クラスメソッド)があり

まとめてstaticメンバと呼ばれている。

 

staticが付かないものはインスタンスメンバといい

インスタンス変数 と インスタンスメソッド がある。

 

Content image

 

package sample20_01;
public class Number {
private int val = 10;
static int num = 20;
public void dispVal() {
 System.out.println("val=" + val);
}
public static void dispNum() {
 System.out.println("num=" + num);
}
public Number(int val) {
 super();
 this.val = val;
}
public int getVal() {
 return val;
}
public static int getNum() {
 return num;
}
}

 

実行前に1つだけ実体化されます・

public static void dispNum() {
 System.out.println("num=" + num);
}

 

2.staticメソッドはインスタンスメンバにアクセスできない

package sample20_02;
public class Number {
private int val = 10;
static int num = 20;
public void dispVal() {
 System.out.println("val=" + val);
}
public static void dispNum() {
 //System.out.println("val=" + val);  //コンパイルエラー
 
 System.out.println("num=" + num);
}

コレはコンパイルエラーになります。

●インスタンスメソッドはstaticメンバをアクセスできるか?

Numberオブジェクトが作成された後なら、dispValからアクセスできます。

 

★メンバ間のアクセスツール

インスタンスメソッドはインスタンス変数とstatic変数にアクセス可

staticメソッドは、staticメソッドだけにアクセスできる

staticメソッドは、オブジェクトを作成すればインスタンス変数にアクセスできます。

なお、newでオブジェクトを作成することを インスタンス化する ということで、

そのオブジェクトを インスタンス ということがあります。

 

3.staticメソッドはthisを使えない

staticメソッドはthisを使えません。

理由は、 インスタンス(オブジェクト)の中でのみ有効なシステム変数だからです。

 

package sample20_03;

public class Number {
private int val = 10;
static int num = 20;

public void dispVal() {
 System.out.println("val=" + val);
 System.out.println("num=" + num);
}
public static void main(String[] args){
 //System.out.println(this.val);     //コンパイルエラー
 //System.out.println(this.num);     //コンパイルエラー
}
public int getVal() {
 return val;
}
public void setVal(int val) {
 this.val = val;
}  
}

 

★フィールドの隠ぺい

ここからは変数についてやっていきます。

 

1。インスタンス変数の隠ぺい

 

r例題はテストのためデフォルトアクセスに

package sample20_04;
class Person {
String name = "田中宏"; //  
}
class Friend extends Person {
String name = "ひろちゃん"; //  
}

public class Exec {
public static void main(String[] args) {
 Friend friend = new Friend();    //  
 Person person = friend;     //  
 System.out.println(friend.name);   // name
 System.out.println(person.name);   // name
}
}
Content image

同名の変数を定義するとサブクラスで定義した方が優先され

スーパクラスのほうは見えなくなる。

これを フィールドの隠ぺい という。

 

2.statc変数の2重定義

 

package sample20_05;
class Person {
static String name = "田中宏";  
}
class Friend extends Person {
static String name = "ひろちゃん";
}
public class Exec {
public static void main(String[] args) {
 System.out.println(Friend.name);  
 System.out.println(Person.name);  
}
}

 

実行すると・・・・

 

ひろちゃん

田中宏

と出てきますwww

 

3.superキーワードでのアクセス

package sample20_06;
class Person {
String name = "田中宏"; //  
}
class Friend extends Person {
String name = "ひろちゃん"; //  
public void printSuperName(){
 System.out.println(super.name);
}
}
public class Exec {
public static void main(String[] args) {
 Friend friend = new Friend();    //
 friend.printSuperName();
}
}

 

public void printSuperName(){
 System.out.println(super.name);
}
}

 

super.nameで、スーパクラスのnameクラスにアクセスできる

mainメソッドでは使用できない

super.はthisと同様オブジェクトが持つシステム変数

オブジェクトの外では使用不可

 

★インターフェースの文法

 

1.インターフェース宣言

 

本来インターフェース宣言は図のような形式です。

Content image

2.defaultメソッド

インターフェースを実装するクラスでは、defaultメソッドをそのまま使うことができ、独自に実装も可能です。

代表的な実装がある場合は、

それをあらかじめ提供しようというのがdefaultメソッド。

これをデフォルト実装という。

 

package sample20_07;
interface Printable {
String getString(); //  
default void print() { //  
 System.out.println(getString()); // getString
}
}
class Person implements Printable { //  
private String name; //  
public Person(String name) { //
 this.name = name;
}
@Override
public String getString() { //
 return name; //  
}
}
public class Exec {
public static void main(String[] args) {
 Person tanaka = new Person("田中宏"); // Person
 tanaka.print(); //  
}
}

これを実行すると

田中宏 とコンソールに表示されます

 

で、defaultメソッドはインスタンスメソッド

defaultの代わりにstaticを付けると

インタフェース名を通して使うstaticメソッドに

 

package sample20_08;
interface Printable {
String getString(); //  
static void print() { //  
 System.out.println("**Printableインタフェース**、");
}
}
class Person implements Printable { //  
private String name; //  
public Person(String name) { //  
 this.name = name;
}
@Override
public String getString() { //  
 return name; //  
}
}
public class Exec {
public static void main(String[] args) {
 Person tanaka = new Person("田中宏");
 Printable.print(); // }
}

 

メソッドはインタフェースに帰属するので 

 インタフェース名.メソッド名 で使います

 

次にメソッドの衝突について

メソッドの衝突がどのような結果になるか

次の順番で決まります。

①同じ名前でも、引数構成が違う抽象メソッドはオーバーロードになる。

②名前と引数構成が同じでも、戻り値型が違う抽象メソッドはコンパイルエラーに

③同じ抽象メソッドなら、全体で1つの抽象メソッドとみなし、コンパイルエラーにならない。

④同じメソッドでも、その中の一つ以上がデフォルトメソッドならコンパイルエラーになる。

 

★クラス継承とインタフェース実装で衝突するケースはクラスが優先

 

♦配列の配列

 

二次元配列、多次元配列とも言います。

現実には二次元以上の配列を使うことはありません。

二次元配列とは言わず 配列の配列という場合があります。

言葉だけではわかりにくいので・・・

2.2次元配列の例題から

package sample20_09;
import java.util.Arrays;
public class Exec1 {
public static void main(String[] args) {
 int[][] numbers = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
 for (int[] array : numbers) {
  System.out.print(Arrays.toString(array) + "\t");
 }
}
}

[1, 2, 3] [4, 5, 6] [7, 8, 9] 

実行すると上のように文字がコンソールに表示されます

続いて配列を番号で操作する方のプログラムヲ

 

package sample20_09;
public class Exec2 {
public static void main(String[] args) {
 int[][] numbers = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
 for (int i = 0; i < numbers.length; i++) {
  for (int j = 0; j < numbers[0].length; j++) {
   System.out.print(numbers[i][j] + "\t");
  }
  System.out.println();  
 }
}
}

1 2 3  

4 5 6  

7 8 9  

実行すると上のように文字がコンソールに表示される。

 

最後に ファイルとプログラムの実行について

★ファイルとプログラムの実行

1.Javaファイルの実行に関する規則

Javaファイルの実行に関する規則

 ●ソースファイルの拡張子はJavaである。

 ●コンパイルすると、同じ名前で拡張子を

  classにかえた実行可能なファイルができる。

 ●classファイルにはクラスに含まれるパッケージの情報も

  書き込まれている。

 ●classファイルを実行するには、

  パッケージ名から指定しなければならない。

 

package sample20_10;
public class Exec {
public static void main(String[] args) {
 System.out.println("Execクラス");
}
}

 

eclipseの標準設定では、コンパイルしたプログラムはプロジェクトフォルダの中

bin に入っている。

Windowsで手動で起動するにはコマンドプロンプトを起動

 

♦コマンドライン引数

これまで無意識に書いてきたmainメソッドの引数は何に使うのか?

コマンドラインで実行時に値を受け取るもの

コマンドラインとは

マウスを使わずに文字でパソコンに命令を出す方法

package sample20_11;
public class Exec {
public static void main(String[] args) {
 System.out.println("args[0]=" + args[0]); //  
 int val = Integer.parseInt(args[1]); //  
 System.out.println("args[1]=" + val); //  
}
}

で、(自分のパソコンorソフトが古いせいか修正しても動かないので↑)

本来Integer クラス Double クラスは int や doubleをオブジェクトとしてあts買うクラスで、 ラッパークラス と呼ばれる。

詳しくはJava API

 

ここまでご覧いただきありがとうございました。

 

長かったァァァァァァァァァァァァ

 

BY マんタ

参考書は__________________________________

新わかりやすい Java

川場 隆  Kawaba Takashi

秀和システム

______________________________________

 

 

 

Supporter profile iconSupporter profile icon
Article tip 2人がサポートしています
獲得ALIS: Article like 109.02 ALIS Article tip 16.10 ALIS
マんタ's icon'
  • マんタ
  • @25kit6
7月 この異常な暑さいつまで続くんやろ😭

投稿者の人気記事
コメントする
コメントする
こちらもおすすめ!
Eye catch
他カテゴリ

防犯意識 マーキング 下書き供養④

Like token Tip token
24.07 ALIS
Eye catch
クリプト

ジョークコインとして出発したDogecoin(ドージコイン)の誕生から現在まで。注目される非証券性🐶

Like token Tip token
38.31 ALIS
Eye catch
トラベル

無料案内所という職業

Like token Tip token
84.20 ALIS
Eye catch
クリプト

Bitcoinの価値の源泉は、PoWによる電気代ではなくて"競争原理"だった。

Like token Tip token
159.32 ALIS
Eye catch
クリプト

Bitcoin史 〜0.00076ドルから6万ドルへの歩み〜

Like token Tip token
947.13 ALIS
Eye catch
ビジネス

海外企業と契約するフリーランス広報になった経緯をセルフインタビューで明かす!

Like token Tip token
16.10 ALIS
Eye catch
他カテゴリ

テレビ番組で登録商標が「言えない」のか考察してみる

Like token Tip token
31.20 ALIS
Eye catch
他カテゴリ

警察官が一人で戦ったらどのくらいの強さなの?『柔道編』 【元警察官が本音で回答】

Like token Tip token
125.92 ALIS
Eye catch
他カテゴリ

機械学習を体験してみよう!(難易度低)

Like token Tip token
124.82 ALIS
Eye catch
他カテゴリ

ALISのシステム概観

Like token Tip token
5.00 ALIS
Eye catch
他カテゴリ

BCAAは本当に必要なのか?徹底的調査

Like token Tip token
1.20 ALIS
Eye catch
他カテゴリ

京都のきーひん、神戸のこーへん

Like token Tip token
12.10 ALIS