学习Static-Java类和对象之static关键字之求圆环面积和周长

  • static 关键字
    • 静态变量
    • 静态方法
    • 静态常量



       
    • static 关键字

      static 关键字可以用来可以用来修饰类的属性或者方法。例如我们之前学习的静态变量、静态方法等。

      当属于同一个类的所有对象出现共享数据时,就需要将存储这个共享数据的成员用 static 修饰。例如:在我们之前学习的 Person 类中,对象“张三”有两个眼睛一个嘴巴,而其它的对象同样有两个眼睛一个嘴巴,也就是说这个属性的资源是被共享的,是属于这个类的,并不单单是属于某个对象的,我们可以将其设置为静态的。

      static 修饰成员属性和方法最大的作用,就是可以使用"类名."的方式操作方法和属性,避免了先要 new 出对象的繁琐和资源消耗。

      static 的特点:

    • 随着类的加载而被加载;

    • 优先于对象存在;

    • 被所有对象共享;

    • 被 static 所修饰的变量或者方法会储存在数据共享区;

    • 被 static 修饰后的成员变量只有一份。

静态变量

被 static 修饰的成员变量叫做静态变量,也叫做类变量,说明这个变量是属于这个类的,而不是属于是对象,没有被static修饰的成员变量叫做实例变量,说明这个变量是属于某个具体的对象的。静态变量可以直接通过类名.静态变量名称调用,虽然也能通过对象来访问静态变量和方法,但为了可读性,方便分辨静态变量,应该通过类名来调用。

例子:

 
  1. public class Person{
  2. static int a = 10;
  3. public static void main(String[] args) {
  4. System.out.print(Person.a);
  5. }
  6. }

执行结果:

  1. 10

静态变量和实例变量的区别:

  1. 生命周期的不同;
    成员变量随着对象的创建而存在随着对象的回收而释放,静态变量随着类的加载而存在随着类的消失而消失。

  2. 调用方式不同;
    成员变量只能被对象调用,静态变量可以被对象调用,也可以用类名调用。(推荐用类名调用

  3. 数据存储位置不同;
    成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据,静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。

  4. 内存中的数量不同。
    每次创建对象,都会为每个对象分配成员变量内存空间,实例变量是属于实例对象的,在内存中,创建几次对象,就有几份成员变量。静态变量由于不属于任何实例对象,是属于类的,所以在内存中只会有一份,在类的加载过程中,JVM 为静态变量分配一次内存空间。

要注意的是静态的可以访问静态的,但是不能访问非静态的成员属性和方法,这很好理解,因为 static 修饰的方法是属于类的,如果去直接使用对象的成员变量,它会不知所措(不知该使用哪一个对象的属性)。

静态常量

在 Java 中,final 表示不变,所以用它修饰的量表示常量,例如:

 
  1. final double pi = 3.1415;

在 Java 中,常量一般会用 static 进行修饰,变成静态变量的,这是为什么呢?

在创建类的多个对象时,用 static 修饰的常量在内存中只有一份拷贝。不用 static 修饰,则每创建一个对象会拷贝一份到内存中。

例如: static final double PI = Math.PI;

看个小例题

学习-Java类和对象之static关键字之求圆环面积和周长

见代码:

/**
 * 任务:已知圆环的大圆半径 R 和 小圆半径 r 的长度分别为 32.0 和 10.0,求该圆环的面积和周长。
 * 类名为:RingArea
 */

public class RingArea {
    // 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
    /********** Begin **********/

    // 定义三个量,两个变量分别为大圆半径和小圆半径,常量表示π,它的值可以调用 Math.PI获取,并将其设为静态常量。
     double R;
     double r;
     static final double PI = Math.PI;
    // 定义一个无参构造方法,将小圆半径设为 10.0,大圆半径设为32.0
    public RingArea(){
        this.R = 32.0;
        this.r = 10.0;
    }
    /**
     * 定义一个静态方法,该方法实现计算圆环的周长,携带两个参数,分别为传来的小圆半径和大圆半径的值。
     * 将圆环周长的计算结果返回,返回类型为double
     */
    public static double zhouchang(double R, double r){
        double C = 2 * PI * (R + r);
        return C;
    }
    /**
     * 定义一个静态方法,该方法实现计算圆环的面积,携带两个参数,分别为传来的小圆半径和大圆半径的值。
     * 将圆环面积的计算结果返回,返回类型为double
     */
    public static double mianji(double R, double r){
        double S = PI * (Math.pow(R,2) - Math.pow(r,2));
        return S;
    }
    // 定义主方法
    public static void main (String[] args){
        RingArea ringArea = new RingArea();
        double zhouchang = ringArea.zhouchang(32.0,10.0);
        double mianji = ringArea.mianji(32.0,10.0);
        System.out.print("该圆环的周长为"+String.format("%.2f",zhouchang)+",面积为"+String.format("%.2f",mianji));
    }
    // 在主方法中通过定义的无参构造方法定义一个对象


    // 通过类名.方法名的方式调用计算圆环周长的方法,获取圆环周长,分别将该对象的小圆半径的值和大圆半径的值传入该方法中


    // 通过类名.方法名的方式调用计算圆环面积的方法,获取圆环面积,分别将该对象的小圆半径的值和大圆半径的值传入该方法中


    // 不换行四舍五入保留两位小数后格式化输出求出的值,输出格式:该圆环的周长为xx,面积为xx



    /********** End **********/
}

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nefelibata_2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值