【Java笔记】静态变量、常量和方法

下面是我对静态变量、常量和方法的一些理解,因为是学生所以不那么专业,有问题希望大家提出纠正!

 

import java.lang.Math;

public class Test{
	public static void main(String[] args){
		System.out.println("The number of circle is " + Circle.circleNumber);
		
		Circle circle1 = new Circle(4);
		System.out.println("circle1.radius = " + circle1.radius + "\tcircle1.circleNumber = " 
							+ circle1.circleNumber + "\tCircle.circleNumber = " + Circle.circleNumber
							+ "\tcircle1.getArea() = " + circle1.getArea());
		
		Circle circle2 = new Circle(2);
		System.out.println("circle2.radius = " + circle2.radius + "\tcircle1.circleNumber = " 
							+ circle2.circleNumber + "\tCircle.circleNumber = " + Circle.circleNumber
							+ "\tcircle2.getArea() = " + circle2.getArea());
	}
}

class Circle {
	double radius;
	static int circleNumber;
	
	Circle () {
		radius = 1.0;
		circleNumber ++;
	}
	
	Circle (double radius) {
		this.radius = radius;
		circleNumber ++;
	}
	
	double getArea() {
		return radius * radius * Math.PI;
	}
}

 

输出结果是:

The number of circle is 0
circle1.radius = 4.0     circle1.circleNumber = 1     Circle.circleNumber = 1     circle1.getArea() = 50.26548245743669
circle2.radius = 2.0     circle1.circleNumber = 2     Circle.circleNumber = 2     circle2.getArea() = 12.566370614359172

 

与静态相对的就是实例,实例是要依靠具体对象的,而静态不需要。

 

首先是静态变量

 

Circle 类有两个变量,radius 是实例变量,circleNumber 就是静态变量,声明静态变量只需要在前面加上修饰符 static 即可。

 

实例变量是要依靠具体的对象才能够存在的,是被绑定到类的某个特定的实例,它是不能被同一个类的不同对象所共享的。例如,上面我们创建的 circle1 和 circle2 的 radius 是不相关的,是被储存在不同内存位置的变量,在不同的对象中 radius 的值是不同的。

 

静态变量是不需要依靠具体的对象存在的,即使没有创建对象也是可以访问的,例如,上面主方法的第一句输出语句中就直接调用了 circleNumber 。

它是被同一个类的所有对象共享的,同个类的不同对象的 circleNumber 变量是储存在同一个内存位置的,是相关的,修改同一个类中的某个对象的 circleNumber 的值会改变所有该类对象的 circleNumber  的值。例如,上面创建了 circle2 后自增 circleNumber ,属于同一个类的 circle1 的circleNumber 也发生了改变。

静态变量可以通过类名进行访问(如:Circle.circleNumber)而实例变量不行,因为实例变量是依靠具体对象存在的。

 

静态常量也是被用一个类中的所有对象所共享的,在前面加上 final static 即可声明为静态常量,final 是声明常量的修饰符。

 

静态方法也是不需要依靠具体对象而可以使用的,JAVA 中存在大量的静态方法,我们使用的 Math 类中的所有方法都是静态方法,你不需要创建 Math 对象就可以调用它的方法。

 

实例方法则不同,它是要依靠具体的对象的,如上面的 getArea() 方法就是实例方法,同一个类中的不同对象使用了同一个实例方法后的结果是不一样的,就像对每个圆求面积,我们用的是相同的方法,但每个圆有着不一样的面积,实例方法就是这样,它会随着它的对象而有所改变,它是创建了对象之后才随之出现的。

 

希望我的一些拙见可以对大家有点点帮助!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值