Contents
5.3. 静态变量、常量和方法(static关键字)¶
static修饰的成员变量是静态变量,staitc修饰的方法是静态方法,相 反,没有static修饰的成员变量是实例变量,静态方法可以访问静态变量和其他静态方法。
public class Pool {
// 定义静态变量
static public int water = 0;
// 定义进水的方法
public void inlet() {
// 进水每次进3个单位
water += 3;
}
// 定义出水的方法
public void outlet() {
if (water >= 2) {
water -= 2;
} else {
water = 2;
}
}
// 主方法
public static void main(String[] args) {
// 实例化in进水类和出水类out
Pool in = new Pool();
Pool out = new Pool();
System.out.println( "水池中的水量为: " + Pool.water);
System.out.println("开始进水2次");
in.inlet();
in.inlet();
System.out.println( "水池中的水量为: " + Pool.water);
System.out.println("开始出水1次:");
out.outlet();
System.out.println( "水池中的水量为: " + Pool.water);
}
}
/*
输出结果
水池中的水量为: 0
开始进水2次
水池中的水量为: 6
开始出水1次:
水池中的水量为: 4
*/
5.3.1. 静态变量¶
静态变量在实例和类中是共享的
public class staticVar {
// 静态变量
static int x;
// 变量
int y;
// 构造方法,对实例进行初始化传参
public staticVar(int x, int y) {
this.x = x;
this.y = y;
}
public static void main(String[] args) {
staticVar hu= new staticVar(1,2);
staticVar hu2= new staticVar(94,722);
System.out.println("x的值为:"+hu.x);
System.out.println("y的值为:"+hu.y);
System.out.println("x的值为:"+hu2.x);
System.out.println("y的值为:"+hu2.y);
}
}
/*输出
* 结果
x的值为:94
y的值为:2
x的值为:94
y的值为:722
*/
5.3.2. 静态常量¶
静态常量
用final 修饰一个成员变量, 这个成员变量就会变成一个静态常量。 所有类都要使用的常量,共享的,静态常量一定是大写的。
eg:
public class final_var {
//静态常量PI π。提供给圆和球共享使用
final static double PI = 3.1415926;
public static void main(String[] args) {
Yuanxing hu = new Yuanxing(3.0);
Qiuxing hu2 = new Qiuxing(3.0);
}
}
class Yuanxing {
// 圆的半径
double radius;
// 圆的面积
double area;
public Yuanxing(double radius) {
// 构造函数,圆的半径radius。
this.radius = radius;
area = final_var.PI * radius * radius;
System.out.println("圆的半径是:" + radius);
System.out.println("圆的面积是:" + area);
}
}
class Qiuxing {
// double型表示半径
double radius;
// 球的体积
double volume;
public Qiuxing(double radius) {
// 构造函数进行传参,radius为半径
this.radius = radius;
volume = 4 / 3 * final_var.PI * radius * radius * radius;
System.out.println("球的半径为:" + radius);
System.out.println("球的体积为:" + volume);
}
}
/*输出
* 结果
圆的半径是:3.0
圆的面积是:28.274333400000003
球的半径为:3.0
球的体积为:84.82300020000001
*/
5.3.3. 静态方法¶
静态方法不需要实例化,直接使用类名+方法名进行调用,和python类似,
静态方法可以访问静态变量和其他静态方法,
eg:
public class static_fangfa {
public static void show() {
System.out.println("我是静态方法....");
}
public static void main(String[] args) {
static_fangfa.show();
}
}
/*输出
我是静态方法....
*/
5.3.4. 静态代码块¶
如果初始化静态变量不是简单常量,需要进行计算才能初始化,可以使用静态(static)代码块,静态代码块在类第一次加载时执行,并只执行一次。
eg:
public class jingtaidaimakuai {
static {
System.out.println("这里是静态代码块.......");
}
{
System.out.println("这里是非静态代码块......");
}
public jingtaidaimakuai() {
// TODO 自动生成的构造函数存根
System.out.println("这里是构造方法......");
}
public void method() {
System.out.println("这里是成员方法........");
}
public static void main(String[] args) {
jingtaidaimakuai hu = new jingtaidaimakuai();
hu.method();
}
}
/*输出信息
这里是静态代码块.......
这里是非静态代码块......
这里是构造方法......
这里是成员方法........
*/
示例代码如下:
package com.company4;
public class Account {
double amount =0.0;
String owner;
// 静态变量利率
static double interestRate;
//静态方法
public static double interestBy(double amt){
// 静态方法可以访问静态变量和其他静态方法
return interestRate * amt;
}
//静态代码块
static {
System.out.println("静态代码块被调用");
// 初始化静态变量
interestRate = 0.0668;
}
public static void main(String[] args) {
Account myAccount = new Account();
//访问静态变量
System.out.println(Account.interestRate);
//访问静态方法
System.out.println(Account.interestBy(1000));
}
}
/*
静态代码块被调用
0.0668
66.8*/