学习 Java类和对象——static关键字

为了完成本次学习,我们需要掌握: static 关键字:静态变量、常量和方法。

实战1.求圆环面积和周长

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

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

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

public class RingArea {
   
    // 定义三个量,两个变量分别为大圆半径和小圆半径,常量表示π,它的值可以调用 Math.PI获取,并将其设为静态常量。
    double R;
    double r;
    static double pi = Math.PI;
    // 定义一个无参构造方法,将小圆半径设为 10.0,大圆半径设为32.0
    public RingArea()
    {
        this.R = 32;
        this.r = 10;
    }
    /**
     * 定义一个静态方法,该方法实现计算圆环的周长,携带两个参数,分别为传来的小圆半径和大圆半径的值。
     * 将圆环周长的计算结果返回,返回类型为double
     */
    public static double Ring(double R,double r)
    {
        double c = 2*pi*(R+r);
        return c;
    }
    /**
     * 定义一个静态方法,该方法实现计算圆环的面积,携带两个参数,分别为传来的小圆半径和大圆半径的值。
     * 将圆环面积的计算结果返回,返回类型为double
     */
     public static double Area(double R,double r)
     {
         double s = pi*(R*R-r*r);
         return s;
     }
    // 定义主方法
    public static void main(String[] args)
    {
    // 在主方法中通过定义的无参构造方法定义一个对象
        RingArea ringarea = new RingArea();
    // 通过类名.方法名的方式调用计算圆环周长的方法,获取圆环周长,分别将该对象的小圆半径的值和大圆半径的值传入该方法中
    double c = ringarea.Ring(32,10);
    // 通过类名.方法名的方式调用计算圆环面积的方法,获取圆环面积,分别将该对象的小圆半径的值和大圆半径的值传入该方法中
    double s = ringarea.Area(32,10);
    // 不换行四舍五入保留两位小数后格式化输出求出的值,输出格式:该圆环的周长为xx,面积为xx
    System.out.printf("该圆环的周长为%.2f,面积为%.2f",c,s);
    }

}

输出结果:该圆环的周长为263.89,面积为2902.83

实战2.检验三边是否构成三角形

根据键盘输入的三个 double 型的数字判断其是否能构成三角形。


/**
 * 任务:根据键盘输入的三个 double 型的数字判断其是否能构成三角形。
 * 类名为:Triangle
 */
import java.util.Scanner;

public class Triangle {

    /**
     * 定义一个静态方法,该方法检验三边是否能构成三角形,携带三个参数,分别为传来的三个参数,无返回值
     * 如果能构成,不换行输出:这三条边可以构成三角形
     * 如果不能,不换行输出:这三条边不能构成三角形
     */
    public static void judge(double a,double b,double c)
    {
        int f=0;
        if(a+b>c && a+c>b && b+c>a)
        {
            f=1;
        }
        if(f==1)
        {
            System.out.print("这三条边可以构成三角形");
        }
        else System.out.print("这三条边不能构成三角形");
    }
    // 定义主方法
public static void main(String[] args)
{
    // 获取键盘输入的三个数
    Scanner sc = new Scanner(System.in);
    double a = sc.nextDouble();
    double b = sc.nextDouble();  
    double c = sc.nextDouble(); 
    // 通过类名.方法名的方式调用检验三边是否能构成三角形的方法,分别将键盘输入的三个数传入该方法中
    Triangle triangle = new Triangle();
    triangle.judge(a,b,c);
}

}

测试输入:

3 4 5

预期输出:

这三条边可以构成三角形

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

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

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

static 的特点:

随着类的加载而被加载;

优先于对象存在;

被所有对象共享;

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

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

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

例子:

public class Person{  
    static int a = 10;  
    public static void main(String[] args) {  
        System.out.print(Person.a);
    }  
}


执行结果:  

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

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

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

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

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

静态方法
被 static 修饰的成员方法叫做静态方法,也叫做类方法,静态方法可以直接通过类名.静态方法名称调用(同样也可以用对象.方法的方式),不属于对象的。

public class Person{  
    public static void sleep (){  
        System.out.print("我要睡觉了");  
    }
    public static void main(String[] args) {  
        System.out.print(Person.sleep());
    }  
}


执行结果:  

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值