é–“é•ã£ãŸã‚³ãƒ¼ãƒ‰ï¼ˆstaticメソッドã‹ã‚‰ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹å¤‰æ•°ã¸ã‚¢ã‚¯ã‚»ã‚¹ï¼‰
public class User {
private String name;
public User(String name) {
this.name = name;
}
// ※ staticã‚’ã¤ã‘ã¦ã—ã¾ã†ã¨ã€nameãŒä½¿ãˆãšã‚³ãƒ³ãƒ‘イルエラーã«ãªã‚‹
public static void greet() {
System.out.println("Hello, " + name + "!"); // ↠name ã«èµ¤ç·šï¼ˆã‚¨ãƒ©ãƒ¼ï¼‰
}
}
ã“ã®ã‚³ãƒ¼ãƒ‰ã¯ コンパイルエラー ã«ãªã‚Šã¾ã™ã€‚
non-static variable name cannot be referenced from a static context
æ£ã—ã„コード(staticを外ã™ï¼‰
public class User {
private String name;
public User(String name) {
this.name = name;
}
// æ£ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ï¼šã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãƒ¡ã‚½ãƒƒãƒ‰
public void greet() {
System.out.println("Hello, " + name + "!");
}
}
Main.java
public class Main {
public static void main(String[] args) {
User u1 = new User("Alice");
User u2 = new User("Bob");
u1.greet();
u2.greet();
}
}
å®Ÿè¡Œçµæžœ
Hello, Alice!
Hello, Bob!
解説
staticメソッドã¨ã¯ï¼Ÿ
- staticメソッド㯠クラスã«å±žã—ã¦ãŠã‚Šã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’æŒãŸãªã„
newã—ãªãã¦ã‚‚呼ã³å‡ºã›ã‚‹ï¼ˆä¾‹ï¼šMath.abs())
ã ã‹ã‚‰ã“ã──
public static void greet() {
System.out.println("Hello, " + name + "!");
}
ã“ã®ã‚ˆã†ã«æ›¸ã„ã¦ã‚‚ã€name ã®ã€Œä¸èº«ã€ãŒå˜åœ¨ã—ãªã„。
staticメソッドã«ã¯ã€Œèª°ã® name ã‹ã€ãŒã‚ã‹ã‚‰ãªã„ã‹ã‚‰ã§ã™ã€‚
ãªãœã‚¨ãƒ©ãƒ¼ã«ãªã‚‹ã®ã‹ï¼Ÿ
name ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã«å±žã™ã‚‹ãƒ•ィールド(éžstatic)ã§ã™ã€‚
private String name;
ã“れを使ã†ã«ã¯ã€ã€Œãã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã€ãŒå¿…è¦ã§ã™ã€‚
ã§ã‚‚ staticメソッドã¯ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’剿ã«ã—ã¦ã„ãªã„ãŸã‚ã€ãã‚‚ãã‚‚ name ã‚’æŒã£ã¦ã„ãªã„ã®ã§ã™ã€‚
解決方法ã¯ï¼Ÿ
static を外ã—ã¦ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãƒ¡ã‚½ãƒƒãƒ‰ï¼ˆéžstatic)ã¨ã—ã¦å®šç¾©ã™ã‚‹ã“ã¨ã€‚
public void greet() {
System.out.println("Hello, " + name + "!");
}
ã“れ㧠this.name ãŒä½¿ãˆã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
ã¾ã¨ã‚
- staticメソッド㯠インスタンスãªã—ã§ä½¿ã†è¨è¨ˆ
- インスタンス変数(éžstatic)㯠å„ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŒæŒã¤å€‹åˆ¥ã®æƒ…å ±
- staticメソッドã‹ã‚‰ã¯ インスタンス変数ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„
- ã‚‚ã—アクセスã—ãŸã„ãªã‚‰ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãƒ¡ã‚½ãƒƒãƒ‰ã¨ã—ã¦æ›¸ã
104 ステップアップå•題 「static修羅é“ã€
Just Keep Typing, Baby!ã§ã¯ã€ã“ã®ã€Œstatic修羅é“ã€ã§ã¤ã¾ã¥ã„ãŸäººå‘ã‘ã®è§£èª¬ã‚’ã—ã¦ã„ã¾ã™ã€‚ã“ã¡ã‚‰ã‚‚ãœã²ï¼
// tesh:
// よãã‚ã‹ã‚‰ã‚“ã¾ã¾é€²ã‚ã¦ã‚‚ã€ã©ã£ã‹ã§ãƒ„ã‚±ãŒæ¥ã‚‹ã€‚
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™



コメント