Java的static关键字

1.可以修饰的对象有:变量,方法,代码块,(引入包名)

   对应的就是:静态变量/类变量;静态方法;静态代码

     eg: public class Student{

                public static int a = 0;

                public static int getValue(){

                       return a;

                }

           }

       静态引入包名: 

1 import static java.util.Math;//在包名前多了一个static关键字
2 public class Test{
3       public static void main(String[] args){
4            //这个sin是Math类中的静态方法,
5           //以前常用Math.sin()来调用,静态引入后则无需类名
6             double a = sin(45);
7       }
8 }
View Code

 

 

 

2.凡是被static修饰的,都是类级别的,所有对象一起共享的

        看例子:

 1 public class User {
 2     private static int userNumber  = 0 ;
 3     
 4     public User(){
 5         userNumber ++;//每创建一个对象就加1
 6     }
 7     
 8     public static void main(String[] args) {
 9         User user1 = new User();//此时 userNumber为1
10         User user2 = new User();//此时 userNumber为2
11         
12         System.out.println("user1 userNumber:" + User.userNumber);
13         System.out.println("user2 userNumber:" + User.userNumber);
14     }
15 }    
16 ------------
17 Output:
18 user1 userNumber:2
19 user2 userNumber:2
View Code

3.可以直接用类名来访问,而不必实例一个对象才能使用。

         eg: Student.getValue();//直接类名调用

               或者 Student s = new Student();

                      s.getValue();//也可以通过先生成实例再调用,但推荐第一种

4. 使用static要注意的

        4.1. static变量在定义时必须要进行初始化,且初始化时间要早于非静态变量。

        4.2. static修饰的方法,只能调用static变量或方法,而不能调用非static的变量或方法。

        4.3.不能以任何形式引用this、super。(因为它们也不是static的)

      

      总结:无论是变量,方法,还是代码块,只要用static修饰,就是在类被加载时就已经"准备好了",也就是可以被使用或者已经被执行,都可以脱离对象而执行。

              反之,如果没有static,则必须要依赖于对象实例,记住两点,凡是static只有两层含义,静态/共享

参考这里非常详细

posted @ 2015-02-06 20:33  一菲聪天  阅读(385)  评论(0编辑  收藏  举报