zoukankan      html  css  js  c++  java
  • 静态与非静态

    什么是静态?

    被static修饰的为静态,static可用来修饰变量、方法、内部类、代码块。


    注意:

    1、static不能用来修饰外部类、接口、抽象类、抽象方法。

    2、接口中的变量可以不用明确的声明为静态的,但必须赋值,因为变量默认为public static final。

    3、接口中的方法不能被声明为静态的,接口中的方法默认为public abstract,属于抽象方法。


    静态与非静态的区别

    1、变量

    static修饰的变量称为类变量静态变量,该变量为该类的所有实例所共享;当某个类的实例修改了静态成员变量时,其修改值对该类的其它实例可见。

    调用方法:直接通过类名访问

    没有static修饰的变量称为实例变量,该变量为该类的各对象独立所有;当某个类的实例修改了非静态成员变量时,其修改值对该类的其它实例不可见。

    调用方法:必须创建对象,之后才能访问。

    2、方法

    情况与变量类似。

    3、类 

    static修饰的类只能是内部类,叫做静态内部类。详见静态内部类详解


    ClassA代码:

    public class ClassA {
        public static String s1 = "this is s1 in A";
        public String s2 = "this is s2 in A";
    }

    测试:

    public class MainClass {
        public static void main(String[] args) {
            ClassA a1 = new ClassA();
            System.out.println(ClassA.s1);// this is s1 in A
            System.out.println(a1.s1);// this is s1 in A
            System.out.println(a1.s2);// this is s2 in A
            a1.s1 = "a1 modified s1";// 修改静态变量
            a1.s2 = "a1 modified s2";// 修改非静态变量
            ClassA a2 = new ClassA();
            System.out.println(ClassA.s1);// a1 modified s1
            System.out.println(a2.s1);// a1 modified s1
            System.out.println(a2.s2);// this is s2 in A
        }
    }

    从测试中可以看出:

    1、在对象a1中修改了静态变量s1,在对象a2中s1的值被改变了;可知当某个类的实例修改了静态成员变量时,其修改值对该类的其它实例可见

    2、在对象a1中修改了非静态变量s2,在对象a2中s2的值没有改变;可知当某个类的实例修改了非静态成员变量时,其修改值对该类的其它实例不可见

    3、静态变量s1可通过ClassA.s1访问,也可以通过a1.s1访问,其结果是一样的;可知静态变量并不依赖与实例,可直接通过类名进行访问

    4、非静态变量s2只能通过对象进行访问;可知非静态变量依赖于实例,访问前必须先创建实例。

  • 相关阅读:
    MVC之Ajax异步操作
    MVCHtmlHelper使用
    Xamarin.Forms初始
    .NET CORE2.0后台管理系统(一)配置API
    DDD领域驱动之干货(四)补充篇!
    基于官方驱动封装mongodb
    webApi签名验证
    在.Net下使用redis基于StackExchange.Redis
    DDD领域驱动之干货(三)完结篇!
    DDD领域驱动之干货(二)
  • 原文地址:https://www.cnblogs.com/SQP51312/p/6112567.html
Copyright © 2011-2022 走看看