zoukankan      html  css  js  c++  java
  • 修饰符-static

    一、static静态修饰符

    static修饰符能够修饰属性,方法,初始代码块,不能修饰局部变量和类。

    静态的变量叫常量,非静态的变量叫实例变量。

    1、修饰属性

    package gc.test.java.cs2;
    
    public class Info{
        
        public static String NAME = "张三";
        public String addr = "湖北武汉";
    }
    package gc.test.java.cs2;
    
    public class Main {
    
        public static void main(String[] args) {
            Info info1 = new Info();
            System.out.println("name:" + info1.NAME);
            System.out.println("addr:" + info1.addr);
            
            info1.NAME = "李四";
            info1.addr = "北京";
            
            Info info2 = new Info();
            System.out.println("name:" + info2.NAME);
            System.out.println("addr:" + info2.addr);
        }
    }

    运行结果:

    name:张三
    addr:湖北武汉
    name:李四
    addr:湖北武汉

    通过上面的运行结果可以看出,Info在第一次被实例化之后,修改Info中的静态变量NAME和变量addr,在第二次实例化之后,静态变量NAME被修改了,但是变量addr被初始化了。可以看出,静态变量是所有实例对象共享的,它属于类,不属于某个实例对象。

    2、修饰方法

    package gc.test.java.cs2;
    
    public class Info{
        
        public static String NAME = "张三";
        public String addr = "湖北武汉";
        public String sex = "男";
        
        public static void showName(){
            System.out.println("我的名字叫" + NAME);
        }
        
        public static void showAddr(){
            System.out.println("我住在" + addr);//编译错误
        }
        
        public void showSex(){
            System.out.println("我是" + sex + "生");
        }
    }
    package gc.test.java.cs2;
    
    public class Main {
    
        public static void main(String[] args) {
            Info.showName();
            //Info.showSex();//编译错误
            Info info = new Info();
            info.showSex();
        }
    }

    上面代码中出现第一处编译错误的地方,可以看出静态方法只能访问静态成员。

    在第二处出现编译错误的地方,可以看出非静态方法只能通过实例化对象来调用,而静态方法可以直接通过类名.方法名来调用。

    package gc.test.java.cs2;
    
    public class Info{
        
        public static String NAME = "张三";
        public String addr = "湖北武汉";
        public String sex = "男";
        
        public static void showName(){
            String name = this.NAME;//编译错误
            System.out.println("我的名字叫" + NAME);
        }
        
        public void showSex(){
            String name = this.NAME;
            System.out.println("我是" + sex + "生");
        }
    }

    上面代码中,一个静态方法和一个非静态方法中,同时使用了this关键字,在静态方法中出现编译错误。

    package gc.test.java.cs2;
    
    public class Info{
        
        public static void showName(){
            
        }
        
        public void showSex(){
            
        }
        
    }
    package gc.test.java.cs2;
    
    public class Member extends Info{
    
        public static void showName(){
            
        }
        
        public  void showSex(){
            
        }
    }

    上面代码中是编译正常,如果将Member中的代码改为

    package gc.test.java.cs2;
    
    public class Member extends Info{
    
        public void showName(){//编译错误
            
        }
        
        public static void showSex(){//编译错误
      } 
    }

    可以看出,静态方法只能重写静态方法,非静态方法只能重写非静态方法。

    3、修饰代码块

    package gc.test.java.cs2;
    
    public class Info{
        
        Info(){
            System.out.println("Info的无参构造函数");
        }
        
        static{
            System.out.println("Info中的静态代码块");
        }
    }
    package gc.test.java.cs2;
    
    public class Main {
    
        public static void main(String[] args) {
            Info info = new Info();
        }
    }

    运行结果:

    Info中的静态代码块
    Info的无参构造函数

    通过上面的结果,可以看出,静态代码块在实例化对象的时候就执行了,而且执行顺序是在无参构造函数之前。

  • 相关阅读:
    数据对拍
    学大伟业 Day 5 培训总结
    【luogu P3378 堆】 模板
    【luogu P1865 A % B Problem】 题解
    学大伟业 Day 4 培训总结
    【luogu P1082 同余方程】 题解
    诗一首
    【luogu P2251 质量检测】 题解
    【luogu P3865 ST表】 模板
    【luogu P1816 忠诚】 题解
  • 原文地址:https://www.cnblogs.com/guochang/p/9555385.html
Copyright © 2011-2022 走看看