博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类及成员的属性——静态成员与实例成员
阅读量:4613 次
发布时间:2019-06-09

本文共 1691 字,大约阅读时间需要 5 分钟。

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

转载于:https://www.cnblogs.com/jolene-wu/p/8325648.html

你可能感兴趣的文章
pom.xml里有红叉报错的解决办法
查看>>
Perl last和next的用法区别
查看>>
Selenium 管理 Cookies
查看>>
exceptionfunction[LeetCode]Permutations
查看>>
xp_cmdshell 命令的开启与关闭,和状态查询
查看>>
Linux sudoers
查看>>
bzoj 4595 激光发生器
查看>>
multi cookie & read bug
查看>>
js时间转换
查看>>
(转载) Android Studio你不知道的调试技巧
查看>>
队列实现霍夫曼树
查看>>
关于微信公众平台测试号配置失败的问题
查看>>
【NOIP2001】统计单词个数
查看>>
linux常用端口
查看>>
异常处理
查看>>
/proc/uptime详解
查看>>
如何建立合适的索引?
查看>>
acwing 651. 逛画展
查看>>
Vijos P1243 生产产品 (单调队列优化DP)
查看>>
iOS常用第三方库 -转
查看>>