zoukankan      html  css  js  c++  java
  • 类及成员的属性——静态成员与实例成员

    12.3 静态成员与实例成员

    静态成员会被所有对象共享同一空间。只要通过一个对象调用该成员,其他对象中的该成员的信息也会随之改变。

    12.3.1 概念

    1. 每一个对象生成时,都会开辟自己的空间,包含自己的成员变量和成员方法等。
    2. 不同对象中同名的成员变量和方法,在各自对象空间中运行,各自独立,互不影响,叫作实例成员
    3. 不同对象中同名的成员变量和方法,共享同一个空间,叫作静态成员
    4. 静态成员独立于类的对象,先于对象的存在而存在
    5. 无论创建了类的多少个对象,静态成员都只有一个实例空间
    6. 在不同对象中的静态成员都是同一个空间,通过任一对象对该成员空间的访问都会影响其他成员。

    静态成员与具体的对象无关,所以在Java中也称为类成员。可以使用静态成员进行对象之间消息的传递等。

    12.3.2 静态变量——修饰符static

    静态变量两种调用方式:

    1. 对象名.静态变量名
    2. 类名.静态变量名

    12.3.3 静态方法

    在定义成员方法时,在访问控制符后添加关键字static,就是静态方法。

    静态方法也共享同一空间

    静态方法两种调用方式:

    1. 对象名.静态方法名()
    2. 类名.静态方法名()

    成员方法的使用跟具体对象无关

     12.3.4 静态成员和实例成员之间的引用

    1、静态成员和静态成员之间可以互相引用,

       实例成员和实例成员之间也可以互相引用。

    2、实例成员可以引用静态成员,但静态成员不可以引用实例成员。

    原理:因为实例成员需要创建对象才能有其空间和值参与运行,而静态成员无须生成对象就已存在

    //Example1209.java
    public class Example1209
    {
        public static int i = 1;    //若写成public int i = 1;会报错
        public static void main(String[] args)
        {
            System.out.println(i);
        }
    }

    解释:静态方法main()不可引用非静态变量 i ,因为非静态变量 i 是跟随对象的生成才有空间运行。静态方法main()无须生成对象就已存在,运行时,i 还未生成。

    12.3.5 应用实例

    有了静态成员,我们可以省略生成对象这一步骤,直接用类名调用其成员

    试验:已知在Math类中有静态变量 PI 和静态方法 sqrt() 。求半径为30的圆的面积。另外有一个三角形,三边长分别为10、15、20,求面积。

    //Example1210.java
    public class Example1210
    {
        public static void main(String[] args)
        {
            int r = 30;
            int a = 10, b = 15, c = 20;
            System.out.println("圆的面积:");
            System.out.println(Math.PI*r*r);    //Math类中有静态变量PI,类名.PI就可以调用
            System.out.println("三角形的面积:");
            System.out.println("Math.sqrt((a+b+c)*(a+b-c)*(a+c-b)*(b+c-a))/4");    //Math类中有静态方法sqrt(),类名.sqrt()即可调用
        }
    }

    问题:为什么变量 r, a, b, c 不用定义成static,即可在main()中调用

    分析:不同于上一个程序,变量 i 定义在main()外面,main()要调用它,必须确保它已经生成。所以定义 i 为static,才能随着类的生成而生成,而不需要等待对象的生成。

    本程序,变量 r, a, b, c 定义在main()里面,是main()中的局部变量,随着main()方法而生成,能够调用到。

  • 相关阅读:
    700. Search in a Binary Search Tree
    100. Same Tree
    543. Diameter of Binary Tree
    257. Binary Tree Paths
    572. Subtree of Another Tree
    226. Invert Binary Tree
    104. Maximum Depth of Binary Tree
    1、解决sublime打开文档,出现中文乱码问题
    移植seetafaceengine-master、opencv到ARM板
    ubuntu16.04-交叉编译-SeetaFaceEngine-master
  • 原文地址:https://www.cnblogs.com/jolene-wu/p/8325648.html
Copyright © 2011-2022 走看看