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()方法而生成,能够调用到。

  • 相关阅读:
    JS 中的require 和 import 区别
    DIV为空时占据空间的解决办法
    学习Web标准不要对IE抱有偏见
    JspSmartUpload上传常见问题解析
    Windows下JSP开发环境的配置
    Div CSS网页布局:用class组合实现
    WEB2.0标准教程:如何应用WEB标准改善现有网站?
    高效整洁CSS代码原则【转载】
    51Test.NET-input标签写CSS时需要注意一些
    程序员应该怎么做呢?【转载】
  • 原文地址:https://www.cnblogs.com/jolene-wu/p/8325648.html
Copyright © 2011-2022 走看看