public class SimpleCounter {
// static変数 - カウントã•れãŸå›žæ•°ã‚’表ã™å¤‰æ•°
private static int totalCount = 0;
// インスタンス変数 - インスタンスã”ã¨ã®ã‚«ã‚¦ãƒ³ãƒˆã‚’表ã™å¤‰æ•°
private int instanceCount;
// コンストラクタ - インスタンス変数ã®åˆæœŸåŒ–
public SimpleCounter() {
// æ–°ã—ã„インスタンスãŒç”Ÿæˆã•れるãŸã³ã«totalCountを増やã—ã€instanceCountã‚’åˆæœŸåŒ–
totalCount++;
instanceCount = 0;
}
// インスタンスメソッド - æ–°ã—ã„インスタンスãŒç”Ÿæˆã•れるãŸã³ã«ã‚«ã‚¦ãƒ³ãƒˆã‚’増やã™ãƒ¡ã‚½ãƒƒãƒ‰
public void incrementInstanceCount() {
// インスタンスã”ã¨ã®ã‚«ã‚¦ãƒ³ãƒˆã‚’増やã™
instanceCount++;
}
// クラスメソッド - カウントã•れãŸå›žæ•°ã‚’å–å¾—ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰
public static int getTotalCount() {
return totalCount;
}
// インスタンスメソッド - インスタンスã”ã¨ã®ã‚«ã‚¦ãƒ³ãƒˆã‚’å–å¾—ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰
public int getInstanceCount() {
return instanceCount;
}
public static void main(String[] args) {
// テスト
SimpleCounter counter1 = new SimpleCounter();
counter1.incrementInstanceCount();
SimpleCounter counter2 = new SimpleCounter();
counter2.incrementInstanceCount();
counter2.incrementInstanceCount();
System.out.println("Total Count: " + SimpleCounter.getTotalCount()); // 2
System.out.println("Counter 1 Instance Count: " + counter1.getInstanceCount()); // 1
System.out.println("Counter 2 Instance Count: " + counter2.getInstanceCount()); // 2
}
}
ã“ã®ã‚¯ãƒ©ã‚¹ã‚’使ã£ã¦ã€mainメソッド内ã§ãƒ†ã‚¹ãƒˆãŒè¡Œã‚れã¦ã„ã¾ã™ã€‚å„インスタンスãŒç”Ÿæˆã•れるãŸã³ã«totalCountãŒå¢—ãˆã€incrementInstanceCountメソッドãŒå‘¼ã°ã‚Œã‚‹ã¨instanceCountãŒå¢—ãˆã‚‹ã“ã¨ãŒç¢ºèªã§ãã¾ã™ã€‚
static変数
「static変数ã€ã¯ã€Javaã«ãŠã„ã¦ã‚¯ãƒ©ã‚¹ãƒ¬ãƒ™ãƒ«ã§ã®å¤‰æ•°ã®ã“ã¨ã‚’指ã—ã¾ã™ã€‚ã“れã¯ã€ç‰¹å®šã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã«ç´ã¥ã‹ãšã€ã‚¯ãƒ©ã‚¹è‡ªä½“ã«é–¢é€£ä»˜ã‘られãŸå¤‰æ•°ã§ã™ã€‚以下ã¯ã€static変数ã«é–¢ã™ã‚‹ä¸»ãªç‰¹å¾´ã¨è§£èª¬ã§ã™ã€‚
- クラスレベルã®å¤‰æ•°:
static変数ã¯ã€ã‚¯ãƒ©ã‚¹å…¨ä½“ã«1ã¤ã ã‘å˜åœ¨ã—ã€å…¨ã¦ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã§å…±æœ‰ã•れã¾ã™ã€‚- インスタンスを生æˆã›ãšã«ã‚¯ãƒ©ã‚¹åを使ã£ã¦ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚
- クラスãŒãƒãƒ¼ãƒ‰ã•れるタイミングã§åˆæœŸåŒ–:
static変数ã¯ã€ã‚¯ãƒ©ã‚¹ãŒãƒãƒ¼ãƒ‰ã•れる際ã«åˆæœŸåŒ–ã•れã¾ã™ã€‚- クラスãŒåˆã‚ã¦ä½¿ã‚れる瞬間ã«1回ã ã‘åˆæœŸåŒ–ã•れã€ãã®å¾Œã¯å†åˆæœŸåŒ–ã•れã¾ã›ã‚“。
- é™çš„メンãƒã¨ã—ã¦å®£è¨€:
static変数ã¯é€šå¸¸ã€static修飾åを使用ã—ã¦ã‚¯ãƒ©ã‚¹å†…ã§å®£è¨€ã•れã¾ã™ã€‚- 例:
private static int totalCount;
- インスタンスを介ã•ãšã«ã‚¢ã‚¯ã‚»ã‚¹:
static変数ã¯ç‰¹å®šã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã«ç´ã¥ã‹ãªã„ãŸã‚ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’生æˆã›ãšã«ã‚¯ãƒ©ã‚¹åを使ã£ã¦ç›´æŽ¥ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚- 例:
ClassName.staticVariable;
- 共有データã®ä¿å˜:
- 複数ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒåŒã˜ãƒ‡ãƒ¼ã‚¿ã‚’共有ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã€
static変数を使用ã™ã‚‹ã“ã¨ã§åŠ¹æžœçš„ã«ãƒ‡ãƒ¼ã‚¿ã‚’共有ã§ãã¾ã™ã€‚
- 複数ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒåŒã˜ãƒ‡ãƒ¼ã‚¿ã‚’共有ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã€
- é™çš„メソッドã¨ã®çµ„ã¿åˆã‚ã›:
static変数ã¯é€šå¸¸ã€åŒã˜ãstaticメソッドã¨çµ„ã¿åˆã‚ã›ã¦ä½¿ç”¨ã•れã€ã‚¯ãƒ©ã‚¹å…¨ä½“ã§å…±æœ‰ã•れるデータや機能をæä¾›ã—ã¾ã™ã€‚
以下ã¯ã€ç°¡å˜ãªä¾‹ã§ã™ã€‚
public class ExampleClass {
// static変数
private static int instanceCount = 0;
// コンストラクタ
public ExampleClass() {
instanceCount++;
}
// é™çš„メソッドã§static変数ã«ã‚¢ã‚¯ã‚»ã‚¹
public static int getInstanceCount() {
return instanceCount;
}
}
ã“ã®ä¾‹ã§ã¯ã€instanceCountã¯static変数ã¨ã—ã¦å®£è¨€ã•れã¦ãŠã‚Šã€ExampleClassã®å…¨ã¦ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã§å…±æœ‰ã•れã¾ã™ã€‚
private変数ã®å¿œç”¨ï¼šå®šæ•°ã‚¯ãƒ©ã‚¹
private変数を使用ã—ã¦å®šæ•°ã‚’管ç†ã™ã‚‹ã‚¯ãƒ©ã‚¹ã‚’作æˆã™ã‚‹ã“ã¨ã¯ã€ãƒ—ãƒã‚°ãƒ©ãƒ 内ã§å…±é€šã®å€¤ã‚’効果的ã«ç®¡ç†ã™ã‚‹æ‰‹æ®µã®ä¸€ã¤ã§ã™ã€‚ã“ã®ã‚¢ãƒ—ãƒãƒ¼ãƒã¯ã€å®šæ•°ã‚¯ãƒ©ã‚¹ï¼ˆConstantsクラス)ã¨ã—ã¦çŸ¥ã‚‰ã‚Œã¦ã„ã¾ã™ã€‚定数クラスã«ã¯ã€private変数を使用ã—ã¦å®šæ•°ã‚’宣言ã—ã€ãれã«å¯¾ã™ã‚‹ã‚¢ã‚¯ã‚»ã‚¹ãƒ¡ã‚½ãƒƒãƒ‰ã‚’æä¾›ã—ã¾ã™ã€‚
以下ã«ã€private変数を使用ã—ãŸå®šæ•°ã‚¯ãƒ©ã‚¹ã®ä¾‹ã‚’示ã—ã¾ã™ã€‚
public class Constants {
// private変数 - 定数を宣言
private static final int MAX_RETRY_COUNT = 3;
private static final String DEFAULT_USERNAME = "guest";
private static final double PI = 3.141592653589793;
// privateコンストラクタ - インスタンス化を防ã
private Constants() {
// インスタンス生æˆã‚’防ã
}
// アクセスメソッド - MAX_RETRY_COUNTã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰
public static int getMaxRetryCount() {
return MAX_RETRY_COUNT;
}
// アクセスメソッド - DEFAULT_USERNAMEã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰
public static String getDefaultUsername() {
return DEFAULT_USERNAME;
}
// アクセスメソッド - PIã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰
public static double getPI() {
return PI;
}
}
ã“ã®Constantsクラスã§ã¯ã€private変数ã¨ã—ã¦3ã¤ã®å®šæ•°ã‚’宣言ã—ã¦ã„ã¾ã™ã€‚ã“れらã®å¤‰æ•°ã¯static修飾åを使用ã—ã¦ã‚¯ãƒ©ã‚¹ãƒ¬ãƒ™ãƒ«ã®ã‚‚ã®ã«ã—ã¦ã„ã¾ã™ã€‚ã¾ãŸã€privateコンストラクタをæŒã£ã¦ã„ã‚‹ãŸã‚ã€ã“ã®ã‚¯ãƒ©ã‚¹ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åŒ–を防ãŽã€å¸¸ã«staticメソッドを介ã—ã¦ã‚¢ã‚¯ã‚»ã‚¹ã—ã¾ã™ã€‚
アクセスメソッドを通ã˜ã¦å¤–部ã‹ã‚‰ã“れらã®å®šæ•°ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã‚‹ãŸã‚ã€ä»–ã®ã‚¯ãƒ©ã‚¹ã‹ã‚‰ã“れらã®å®šæ•°ã‚’使ã„ãŸã„å ´åˆã€ã‚¯ãƒ©ã‚¹å†…ã®ãƒã‚¸ãƒƒã‚¯ã‚’知る必è¦ã¯ãªãã€ç°¡å˜ã«å€¤ã‚’å–å¾—ã§ãã¾ã™ã€‚
ã“ã®å®šæ•°ã‚¯ãƒ©ã‚¹ã®ãƒ‘ターンã¯ã€ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆå…¨ä½“ã§å…±é€šã®è¨å®šã‚„定数を効果的ã«ç®¡ç†ã™ã‚‹éš›ã«åˆ©ç”¨ã•れã¾ã™ã€‚
「012 staticメンãƒã€å•題集リスト
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™


コメント