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只能通过对象进行访问;可知非静态变量依赖于实例,访问前必须先创建实例。

  • 相关阅读:
    JDK,JRE,JVM,三者,你知道它们的关系么
    Linux防火墙机制
    mysql数据可以连接到myeclipse当中需要知道的语法
    mysql数据库常用命令
    修改mysql默认编码重启后又还原,且在修改my.ini配置文件出现1067错误的解决办法。
    MySQL 5.5 Command Line Client 打开出现闪退(错误)的解决办法
    修改mysql 的初始密码
    linux命令的续行,linux shell 参数换行(标准说法:续行)
    java面试(反射)05
    java面试(进程和线程)04
  • 原文地址:https://www.cnblogs.com/SQP51312/p/6112567.html
Copyright © 2011-2022 走看看