JAVA编程中代表静态的 static ,具体有什么用途,它的用法又是什么样的,用与不用它的时候又有什么区别???
1修饰符static
1ï¼éæç±»åéï¼ä¿®é¥°æååéï¼ï¼
1.Static int dataè¯å¥è¯´ædata为类åéï¼ä¸ºä¸ä¸ªç±»çå ±äº«åéï¼æ¯ææå¯¹è±¡å ±äº«çï¼å®ä¸
å±äºä»»ä½å¯¹è±¡ï¼æ¯å±äºæ´ä¸ªç±»çï¼éææ¹æ³ä¹æ¯ä¸æ ·ï¼ã
2.Staticå®ä¹çæ¯ä¸å为æ´ä¸ªç±»å ±æçä¸ååå¨åºåã
3.å ¶åéå¯ä»¥éè¿ç±»åå»è®¿é®ï¼ç±»å.åéåï¼ä¸éè¿å¯¹è±¡å¼ç¨è®¿é®åéæ¯çä»·çï¼ã
2ï¼éææ¹æ³ï¼ä¿®é¥°æ¹æ³ï¼ï¼
1.Public static void printData(){}ï¼è¡¨ææ¤ç±»æ¹æ³ä¸ºç±»æ¹æ³ï¼éææ¹æ³ï¼ï¼è®¿é®æ¯å¨ç¼è¯æ
å®æï¼æ§è¡æçæ¯è¾é«ã
2.éææ¹æ³ä¸éè¦æ对象ï¼å¯ä»¥ä½¿ç¨ç±»åè°ç¨ï¼ä¸éè¦å®ä¾ä¹å¯ä»¥è°ç¨éææ¹æ³ï¼ã3.éææ¹æ³ä¸ä¸è½è®¿é®ç±»çééææåï¼å æ¬æååéåæ¹æ³ï¼åªè½è®¿é®æ¬ç±»ä¸çéæ
åéåå ¶å®éææ¹æ³ãå 为æ¤æ¶æ¯éè¿ç±»è°ç¨çï¼æ²¡æ对象çæ¦å¿µãæ¹æ³ä¸this.dataå
super.dataæ¯ä¸å¯ç¨çã
åå ï¼ä»æ ¹æ¬ä¸è¯´ï¼éæåéä¸ç®¡ç±»æ¯å¦å®ä¾åé½ä¼åå¨ï¼èå®ä¾åéåªæç±»å®ä¾åäº
æåå¨ãç´æ¥è°ç¨éææ¹æ³æ¶å¹¶ä¸ç¡®å®å®ä¾åéæ¯å¦åå¨ã
4. ä¸è¬æ åµä¸ï¼ä¸»æ¹æ³æ¯éææ¹æ³ï¼æ以JVMå¯ä»¥ç´æ¥è°ç¨å®ï¼ä¸»æ¹æ³ä¸ºéææ¹æ³æ¯å
为å®æ¯æ´ä¸ªè½¯ä»¶ç³»ç»çå ¥å£ï¼èè¿å ¥å ¥å£æ¶ç³»ç»ä¸æ²¡æä»»ä½å¯¹è±¡ï¼åªè½ä½¿ç¨ç±»è°ç¨ã
5.éææ¹æ³ä¸è½è¢«è¦çï¼å¦æåç±»ä¸æåç¶ç±»éåçéææ¹æ³ï¼è½ç¶ç¼è¯éè¿ï¼ä½å®å¹¶
ä¸è½å®ç°å¤æï¼æ以ä¸è½ç§°ä½è¦çãä¾å¦ï¼class Super{
static public void show(){System.out.println("in Super");}
}class Sub extends Super{
static public void show(){System.out.println("in Sub");}
}
public class Test {
public static void main(String[] arg) {
Super s = new Sub();
s.show();
}
}
æ§è¡ç»ææ¯ï¼ in Super3ï¼éæ代ç åï¼ä¿®é¥°æ²¡æååç代ç åï¼ï¼
1.åªè¢«æ§è¡ä¸æ¬¡ï¼
2.åå§ååå¨ç±»è¢«å è½½åé¦å 被è¿è¡ï¼ä¸ç®¡ç±»æ¯å¦å®ä¾åï¼èä¸åªæ§è¡è¿ä¸æ¬¡
3.ä½ç¨ï¼ä¸è¬ç¨æ¥åå§åä¸äºå¤æç±»åçéæåéã
4ï¼éæå é¨ç±»ï¼æ³¨æï¼åªè½ä¿®é¥°æåå é¨ç±»ï¼ï¼
class Out{
public static class Inner{}
}5ï¼Staticé常ç¨äºSingleton模å¼å¼åï¼
Singleton模å¼(åä¾æ¨¡å¼)ï¼æ¯ä¸ç§è®¾è®¡æ¨¡å¼ï¼é«äºè¯æ³ï¼å¯ä»¥ä¿è¯ä¸ä¸ªç±»å¨æ´ä¸ªç³»ç»
ä¸ä» æä¸ä¸ªå¯¹è±¡ã
1.é®é¢åï¼
ç³»ç»ä¸ä½ éè¦è·å¾æ个类çå¯ä¸å®ä¾ï¼ææ客æ·ç«¯å¯¹å®ç访é®é½å°éè¿ä¸ä¸ªå ¬å ±ç访é®ç¹è·å¾ã
2.解å³æ¹æ¡ï¼å建ä¸ä¸ªç±»å¹¶ä½¿å ¶
a.å®ä¹ä¸ä¸ªç§æçæé å¨ï¼
b.å®ä¹ä¸ä¸ªç§æãéæçå®ä¾åéæåèªå·±(ç±»åæ¯èªå·±çç±»å)ï¼
c.å®ä¹ä¸ä¸ªå ¬æãéæç访é®æ¹æ³getInstance()ç¨äºè¿å该类çå¯ä¸å®ä¾(注ï¼
ææ±å¼éåæ¥)ã 3.åç±»ï¼
a.饿æ±å¼ï¼å¨ç±»è£ è½½çæ¶åå°±è¿è¡å®ä¾åï¼
b.ææ±å¼ï¼å¨å ¬æãéæç访é®æ¹æ³(åæ¥ï¼ç¨synchronized修饰)ä¸è¿è¡å®ä¾åï¼
ç¨çå¤ä¸äºã å®ç°1ï¼
public class ConnectionFactory{
private static Connection conn;
private Connection(){
if(conn==null)
conn = new Connction();
}
public Connection getInstance(){
return conn;
}
}å®ç°2ï¼
public class ConnectionFactory{
private static Connection conn;
static{
conn = new Connection();
}
public static Connection getInstance(){
return conn;
}
}
1ï¼éæç±»åéï¼ä¿®é¥°æååéï¼ï¼
1.Static int dataè¯å¥è¯´ædata为类åéï¼ä¸ºä¸ä¸ªç±»çå ±äº«åéï¼æ¯ææå¯¹è±¡å ±äº«çï¼å®ä¸
å±äºä»»ä½å¯¹è±¡ï¼æ¯å±äºæ´ä¸ªç±»çï¼éææ¹æ³ä¹æ¯ä¸æ ·ï¼ã
2.Staticå®ä¹çæ¯ä¸å为æ´ä¸ªç±»å ±æçä¸ååå¨åºåã
3.å ¶åéå¯ä»¥éè¿ç±»åå»è®¿é®ï¼ç±»å.åéåï¼ä¸éè¿å¯¹è±¡å¼ç¨è®¿é®åéæ¯çä»·çï¼ã
2ï¼éææ¹æ³ï¼ä¿®é¥°æ¹æ³ï¼ï¼
1.Public static void printData(){}ï¼è¡¨ææ¤ç±»æ¹æ³ä¸ºç±»æ¹æ³ï¼éææ¹æ³ï¼ï¼è®¿é®æ¯å¨ç¼è¯æ
å®æï¼æ§è¡æçæ¯è¾é«ã
2.éææ¹æ³ä¸éè¦æ对象ï¼å¯ä»¥ä½¿ç¨ç±»åè°ç¨ï¼ä¸éè¦å®ä¾ä¹å¯ä»¥è°ç¨éææ¹æ³ï¼ã3.éææ¹æ³ä¸ä¸è½è®¿é®ç±»çééææåï¼å æ¬æååéåæ¹æ³ï¼åªè½è®¿é®æ¬ç±»ä¸çéæ
åéåå ¶å®éææ¹æ³ãå 为æ¤æ¶æ¯éè¿ç±»è°ç¨çï¼æ²¡æ对象çæ¦å¿µãæ¹æ³ä¸this.dataå
super.dataæ¯ä¸å¯ç¨çã
åå ï¼ä»æ ¹æ¬ä¸è¯´ï¼éæåéä¸ç®¡ç±»æ¯å¦å®ä¾åé½ä¼åå¨ï¼èå®ä¾åéåªæç±»å®ä¾åäº
æåå¨ãç´æ¥è°ç¨éææ¹æ³æ¶å¹¶ä¸ç¡®å®å®ä¾åéæ¯å¦åå¨ã
4. ä¸è¬æ åµä¸ï¼ä¸»æ¹æ³æ¯éææ¹æ³ï¼æ以JVMå¯ä»¥ç´æ¥è°ç¨å®ï¼ä¸»æ¹æ³ä¸ºéææ¹æ³æ¯å
为å®æ¯æ´ä¸ªè½¯ä»¶ç³»ç»çå ¥å£ï¼èè¿å ¥å ¥å£æ¶ç³»ç»ä¸æ²¡æä»»ä½å¯¹è±¡ï¼åªè½ä½¿ç¨ç±»è°ç¨ã
5.éææ¹æ³ä¸è½è¢«è¦çï¼å¦æåç±»ä¸æåç¶ç±»éåçéææ¹æ³ï¼è½ç¶ç¼è¯éè¿ï¼ä½å®å¹¶
ä¸è½å®ç°å¤æï¼æ以ä¸è½ç§°ä½è¦çãä¾å¦ï¼class Super{
static public void show(){System.out.println("in Super");}
}class Sub extends Super{
static public void show(){System.out.println("in Sub");}
}
public class Test {
public static void main(String[] arg) {
Super s = new Sub();
s.show();
}
}
æ§è¡ç»ææ¯ï¼ in Super3ï¼éæ代ç åï¼ä¿®é¥°æ²¡æååç代ç åï¼ï¼
1.åªè¢«æ§è¡ä¸æ¬¡ï¼
2.åå§ååå¨ç±»è¢«å è½½åé¦å 被è¿è¡ï¼ä¸ç®¡ç±»æ¯å¦å®ä¾åï¼èä¸åªæ§è¡è¿ä¸æ¬¡
3.ä½ç¨ï¼ä¸è¬ç¨æ¥åå§åä¸äºå¤æç±»åçéæåéã
4ï¼éæå é¨ç±»ï¼æ³¨æï¼åªè½ä¿®é¥°æåå é¨ç±»ï¼ï¼
class Out{
public static class Inner{}
}5ï¼Staticé常ç¨äºSingleton模å¼å¼åï¼
Singleton模å¼(åä¾æ¨¡å¼)ï¼æ¯ä¸ç§è®¾è®¡æ¨¡å¼ï¼é«äºè¯æ³ï¼å¯ä»¥ä¿è¯ä¸ä¸ªç±»å¨æ´ä¸ªç³»ç»
ä¸ä» æä¸ä¸ªå¯¹è±¡ã
1.é®é¢åï¼
ç³»ç»ä¸ä½ éè¦è·å¾æ个类çå¯ä¸å®ä¾ï¼ææ客æ·ç«¯å¯¹å®ç访é®é½å°éè¿ä¸ä¸ªå ¬å ±ç访é®ç¹è·å¾ã
2.解å³æ¹æ¡ï¼å建ä¸ä¸ªç±»å¹¶ä½¿å ¶
a.å®ä¹ä¸ä¸ªç§æçæé å¨ï¼
b.å®ä¹ä¸ä¸ªç§æãéæçå®ä¾åéæåèªå·±(ç±»åæ¯èªå·±çç±»å)ï¼
c.å®ä¹ä¸ä¸ªå ¬æãéæç访é®æ¹æ³getInstance()ç¨äºè¿å该类çå¯ä¸å®ä¾(注ï¼
ææ±å¼éåæ¥)ã 3.åç±»ï¼
a.饿æ±å¼ï¼å¨ç±»è£ è½½çæ¶åå°±è¿è¡å®ä¾åï¼
b.ææ±å¼ï¼å¨å ¬æãéæç访é®æ¹æ³(åæ¥ï¼ç¨synchronized修饰)ä¸è¿è¡å®ä¾åï¼
ç¨çå¤ä¸äºã å®ç°1ï¼
public class ConnectionFactory{
private static Connection conn;
private Connection(){
if(conn==null)
conn = new Connction();
}
public Connection getInstance(){
return conn;
}
}å®ç°2ï¼
public class ConnectionFactory{
private static Connection conn;
static{
conn = new Connection();
}
public static Connection getInstance(){
return conn;
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答 2013-09-25
static 静态的意思. 也就是说它修饰的变量是静态的,它单独占一个内存空间. 而且他只存在一个.所有修改的static 修饰的变量都是改的一个变量 比如i=1的时候. 你在a函数给i+1 i就是2.你在b函数再写i+1; i的值就会变成3,因为i在内存中只存在一个. 修饰方法也是一样的道理. 当你希望这个变量在整个程序中只存在一个的时候 就用 static 修饰 回答完毕!
第2个回答 2013-09-25
对,是那样的,它类似全局变量,在程序开始到结束一直存在,,好占内存,个人建议少用