static 关键字详解 static方法调用非static属性和方法

  静态的属性和方法在内存中的存放地址与非静态的是不一样的,静态的是存放在static区,它意味着静态方法是没有this的,因此咱们不能够从一个static方法内部发出对非static方法的调用。可是反之是能够的。测试

  静态属性被外部公用,修改以后会被保存。this

一、static方法没有this,咱们经过类名来调用static属性和方法spa

 1 package demo;
 2 
 3 public class TestStatic {
 4     private static int i = 18;  //静态属性被外部公用,修改以后会被保存。
 5     private String str = "###";  //静态方法不能调用非静态的属性和方法
 6     static void run(){
 7         //TestStatic.i  不在同一个类中经过类名类调用static属性
 8         i = i * 100;
 9         System.out.println("刘二狗在跑了" + i +"步");
10     }
11     
12     static void print(){
13         run();
14         //TestStatic.run();   不在同一个类中经过类名类调用static方法
15         System.out.println("测试static:i = " + i);
16     }
17     
18     public static void main(String[] args) {
19         TestStatic.print();
20     }
21 }

打印结果:code

 

二、static方法调用非static属性和方法。咱们把一个对象的句柄放到static方法内部,经过这个对象的句柄就能够调用非static的属性和方法。代码以下:对象

package demo;
/**
 * static方法调用非static属性和方法
 * @author dyf
 *
 */
public class TestStatic {
    private static int i = 18;
    private String str = "###";
    static TestStatic ts = new TestStatic();
    
    TestStatic test(){
        this.str = str + "===";
        System.out.println(str);
        return this;
    }
    
    static void run(TestStatic ts){
        ts.str = ts.str + "$$$"; //经过句柄调用非static的属性
        ts.test();   //经过句柄调用非static的方法
        System.out.println("刘二狗在跑步!" + ts.str);
    }
    
    public static void main(String[] args) {
        TestStatic.run(ts);
    }
}

打印结果:blog

相关文章
相关标签/搜索