PoeticalJustice

导航

static关键字

 1 public class Student {
 2     String name;
 3     int id;
 4     
 5     static int ss;
 6     public static void printSS(){
 7         //为什么报错 静态方法 不能引用 非静态变量?
 8         //分析内存 因为 静态方法从属于类Student、 非晶态变量name 从属于对象
 9         //同理 静态方法不能调用 非静态方法  study(),satHello() 方法也是
10         //name="高琪";
11         //study();
12         //sayHello();
13         //记住2句话就行了
14         //1 静态方法只能调用静态方法
15         //2 非静态 可以调用非静态方法 也可以调用 静态方法
16         System.out.println("哈哈,我是静态方法!不能调用非静态方法哦,因为静态方法是属于类的,即静态方法是随着类的加载而加载的," +
17                 "在加载类时,程序就会为静态方法分配内存,而非静态方法是属于对象的,对象是在类加载之后创建的," +
18                 "也就是说静态方法先于对象存在,当你创建一个对象时,程序为其在堆中分配内存," +
19                 "一般是通过this指针来指向该对象。静态方法不依赖于对象的调用,它是通过‘类名.静态方法名’这样的方式来调用的。" +
20                 "而对于非静态方法,在对象创建的时候程序才会为其分配内存,然后通过类的对象去访问非静态方法。因此在对象未存在时非静态方法也不存在," +
21                 "静态方法自然不能调用一个不存在的方法。");    
22     }
23     private static Object myObj;
24     public static void main(String args[]){
25         System.out.println("What is value of myObjc : " + myObj);
26     }
27     public void study(){
28         //非静态方法可以调用 静态方法 道理很简单 你没写对象名 那么肯定是类的从属静态方法 去类里面 一找就找到了
29         printSS();
30         System.out.println(name+"在学习");
31     }
32     public void sayHello(String sname){
33         System.out.println(name+"对"+sname+"说: 你好");
34     }
35 }

 

posted on 2017-09-28 21:21  PoeticalJustice  阅读(149)  评论(0编辑  收藏  举报