关于static的第一点说明:
假如我们编写一个计算圆的周长和面积的java程序,其中圆的属性就是半径,这个半径是由用户给定的,代码实现如下:
1 package com.hw.static0127;
2 import java.util.Scanner;
3 class Circle{
4 public float radius;
5 public static float π = 3.14159265f;
6 public void getPerimeter(){
7 float perimeter;
8 perimeter = 2*π*radius;
9 System.out.println("圆的周长为"+perimeter);
10 }
11 public void getSpace(){
12 float space;
13 space = π * radius * radius;
14 System.out.println("圆的面积为"+space);
15 }
16 }
17 public class CircleDemo {
18 public static void main(String[] args){
19 Scanner s = new Scanner(System.in);
20 Circle ci = new Circle();
21 while(s.hasNext())
22 {
23 ci.radius = s.nextInt();
24 if(ci.radius < 0) break;
25 ci.getPerimeter();
26 ci.getSpace();
27 System.out.println();
28 }
29 }
30 }
运行效果如下:
在代码中,我们可以看到,圆周率π,是一个固定的常数,不管创建多少个对象,它都是常数,因此,我们可以把它声明成静态变量,这样可以节约内存空间。否则,每创建一个新的对象(在本程序中未体现),都会开辟一块新的内存区域来存放变量π,而它又是个常数,这样做很浪费空间。
关于static关键字的第二点说明:
如果我们要自己开发一个数组的工具类(为了说明的简便,只实现了数组数据的填充功能),代码实现如下:
1 package com.hw.static0127;
2 class ArrayTool{
3 private ArrayTool(){
4
5 }
6 public static void fill(int arr[],int data){ //用data填充数组arr[]
7 for(int i = 0;i < arr.length;i++)
8 {
9 arr[i] = data;
10 }
11 }
12 }
13 public class StaticDemo3 {
14 public static void main(String[] args){
15 int arr[] = new int[100]; //声明一个数组
16 ArrayTool.fill(arr, 20);
17 System.out.println(arr[1]+" "+arr[2]+" "+arr[98]);
18 }
19 }
运行效果如下:
我们如果把fill这个方法声明成静态的,那就可以直接用类来调用,而不需要像:
1 ArrayTool tool = new ArrayTool();
2 tool.fill(arr,20);
这么麻烦。
当然,由于以后在公司里面做开发,是有一个团队一起协作的,团队成员间互相使用对方开发的类时,用起来不会像自己那么熟悉,这个时候为了防止代码麻烦,我们可以直接把ArrayTool这个类弄成private,这样,是没有办法创建对象的,所以在编译的时候就会出错,也就提醒了别人。直接用类来调用即可。
原文:https://www.cnblogs.com/EvanTheGreat/p/14339200.html