Java常量(final, static final, public static final作用)
final
在java中,使用final
指示一个常量,一般常量的名称使用全大写,比如:
public class Demo {
public static void main(String[] args) {
final double PI = 3.14;
double r = 2;
double area = PI * r * r;
System.out.println(area);
}
}
使用final
修饰的常量只能在当前方法中使用,不能在同一类的其他方法下使用,比如:
public class Demo {
public static void main(String[] args) {
final double PI = 3.14;
double r = 2;
double area;
double cir;
Demo1 demo1 = new Demo1();
area = demo1.getArea(r);
cir = demo1.getCir(r);
}
public double getArea(double r) {
return PI * r * r;
}
public double getCir(double r) {
return 2 * PI * r;
}
}
会发现getArea
和getCir
方法中的PI
报错,这个时候我们可以把定义的这条语句放到方法外部
public class Demo {
final double PI = 3.14;
public static void main(String[] args) {
double r = 2;
double area;
double cir;
Demo1 demo1 = new Demo1();
area = demo1.getArea(r);
cir = demo1.getCir(r);
}
public double getArea(double r) {
return PI * r * r;
}
public double getCir(double r) {
return 2 * PI * r;
}
}
这个时候就可以正常运行了
static final
如上述所示,这时候我们的main
函数就不能使用PI
,因为main
函数用了static
修饰,是静态方法,所以要使用PI也要用static修饰,成为一个静态的常量
public class Demo {
static final double PI = 3.14;
public static void main(String[] args) {
double r = 2;
double area;
double cir = 2 * PI * r;
Demo1 demo1 = new Demo1();
area = demo1.getArea(r);
}
public double getArea(double r) {
return PI * r * r;
}
}
public static final
在java中,使用public
修饰的是公开资源,意味着其他包的类也可以使用这些方法或者变量等,所以使用public后其他包的类也可以调用PI来运算,比如(Demo1.java和Demo2.java不在同一包内):
Demo1.java
package upJava;
import com.sanJin.test.Demo2;
public class Demo1 {
public static final double PI = 3.14;
public static void main(String[] args) {
double r = 2;
double area;
double cir;
Demo2 demo2 = new Demo2();
area = demo2.getArea(r);
cir = demo2.getCir(r);
}
}
Demo2.java
package com.sanJin.test;
import upJava.Demo1;
public class Demo2 {
public double getArea(double r) {
return Demo1.PI * r * r;
}
public double getCir(double r) {
return 2 * Demo1.PI * r;
}
}
首先Demo2要导入Demo1,这样Demo2就可以使用 类名.变量名
来调用Demo1定义的常量了,虽然Demo1定义常量,Demo2调用常量,Demo1又要用Demo2的方法,这种写法有些奇妙,不过这也是为了更好的演示
如果两个类在同一个包里,常量不需要public修饰,类也不需要import导入就可以相互之间调用,这么搞下来,我自己都要晕了