zoukankan      html  css  js  c++  java
  • static 关键字详解 static方法调用非static属性和方法

      静态的属性和方法在内存中的存放地址与非静态的是不同的,静态的是存放在static区,它意味着静态方法是没有this的,所以我们不可以从一个static方法内部发出对非static方法的调用。但是反之是可以的。

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

    1、static方法没有this,我们通过类名来调用static属性和方法

     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 }

    打印结果:

    2、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);
        }
    }

    打印结果:

  • 相关阅读:
    06.数组模拟栈-简易计算器
    05.单向环形链表应用 -- 约瑟夫环
    02.数组模拟环形队列
    01.稀疏矩阵与二维数组相互转化
    大数字相乘
    13.打包发布
    悦苗园公益活动
    程序猿打招自己的电子图书馆
    【技能】提高网站可用性
    【微信技能】如何通过微信号知道对方微信的二维码
  • 原文地址:https://www.cnblogs.com/dyfbk/p/6874096.html
Copyright © 2011-2022 走看看