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

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

任务描述

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

圆环面积公式为:S=π(R2−r2); 圆环周长公式为:C=2π(R+r)。

相关知识

为了完成本关任务,你需要掌握: static 关键字:静态变量、常量和方法。

static 关键字

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

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

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

static 的特点:

  1. 随着类的加载而被加载;

  2. 优先于对象存在;

  3. 被所有对象共享;

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

  5. 被 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 修饰的成员方法叫做静态方法,也叫做类方法,静态方法可以直接通过类名.静态方法名称调用(同样也可以用对象.方法的方式),不属于对象的。

 
  1. public class Person{
  2. public static void sleep (){
  3. System.out.print("我要睡觉了");
  4. }
  5. public static void main(String[] args) {
  6. System.out.print(Person.sleep());
  7. }
  8. }

执行结果:

 
  1. 我要睡觉了

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

静态常量

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

 
  1. final double pi = 3.1415;

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

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

编程要求

仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。

测试说明

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。 可在右侧“测试结果”区查看具体的测试集详情。


开始你的任务吧,祝你成功!

源代码:

/**
 * 任务:已知圆环的大圆半径 R 和 小圆半径 r 的长度分别为 32.0 和 10.0,求该圆环的面积和周长。
 * 类名为:RingArea
 */
public class RingArea {
    // 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
    /********** Begin **********/
 
    // 定义三个量,两个变量分别为大圆半径和小圆半径,常量表示π,它的值可以调用 Math.PI获取,并将其设为静态常量。
    static double PI = Math.PI;
    double R;
    double r;
    // 定义一个无参构造方法,将小圆半径设为 10.0,大圆半径设为32.0
    public RingArea() {
        this.R = 32.0;
        this.r = 10.0;
    }
    /**
     * 定义一个静态方法,该方法实现计算圆环的周长,携带两个参数,分别为传来的小圆半径和大圆半径的值。
     * 将圆环周长的计算结果返回,返回类型为double
     */
    public static double ring(double R,double r){
        return 2 * PI * (R + r);
    }
    /**
     * 定义一个静态方法,该方法实现计算圆环的面积,携带两个参数,分别为传来的小圆半径和大圆半径的值。
     * 将圆环面积的计算结果返回,返回类型为double
     */
    public static double area(double R,double r){
        return PI * (R * R - r * r);
    }
    // 定义主方法
public static void main(String[] args) {
    // 在主方法中通过定义的无参构造方法定义一个对象
        RingArea ringArea = new RingArea();
    // 通过类名.方法名的方式调用计算圆环周长的方法,获取圆环周长,分别将该对象的小圆半径的值和大圆半径的值传入该方法中
        double c = RingArea.ring(ringArea.R,ringArea.r);
    // 通过类名.方法名的方式调用计算圆环面积的方法,获取圆环面积,分别将该对象的小圆半径的值和大圆半径的值传入该方法中
        double s = RingArea.area(ringArea.R,ringArea.r);
    // 不换行四舍五入保留两位小数后格式化输出求出的值,输出格式:该圆环的周长为xx,面积为xx
        System.out.print("该圆环的周长为" + String.format("%.2f",c));
        System.out.print(",面积为" + String.format("%.2f",s));
        }
    /********** End **********/
}

  • 27
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值