static:静态修饰符。
由static修饰的变量、常量和方法。存放在内存的静态区中,静态区在整个程序运行结束后才会释放,索引用静态修饰符修饰的代码生命周期是整个程序的生命周期。
1.静态变量
静态区的变量可以被本类共享,其它类调用本类静态区变量和静态方法时无需实例化就可以调用。静态区就是内存公共区。
//被本类共享
package xun;
public class Myclass1 {
static int water = 0;
public void inWater()
{
water=water+3;
}
public void outWater()
{
if(water>=2)
water=water-2;
else
water=0;
}
public static void main(String[] args) {
Myclass1 in=new Myclass1();
Myclass1 out=new Myclass1();
System.out.println("此时水池中的水量:"+water);
in.inWater();
in.inWater();
System.out.println("注水两次水池中的水量:"+water);
out.outWater();
out.outWater();
System.out.println("放水两次水池中的水量:"+water);
}
}
//静态成员变量可以被其中任何一个对象所改变。
package xun;
public class Myclass1 {
static int i=36;
public void showName(){
System.out.println("'调用showName方法:");
for(i=0;i<5;i++)
System.out.print(i+" ");
System.out.println();
}
public static void main(String[] args) {
Myclass1 s1=new Myclass1();
Myclass1 s2=new Myclass1();
s2.i=70;
System.out.println("s1调用变量i的输出结果:"+s1.i);
s1.showName();
System.out.println("s2调用变量i的输出结果:"+s2.i);
s1.showName();
}
}
2.静态常量
用final static修饰一个成员变量,这个变量就会变成静态常量。静态常量相当于共享常量,所有类都可以用且必须大写。
package xun;
public class Graphical {
final static double PI = 3.2425926;
public static void main(String[] args) {
Circular cir = new Circular(2.0);
Spherical sph = new Spherical(2.0);
}
}
class Circular {
double radius;
double area;
public Circular(double radius) {
this.radius = radius;
area = Graphical.PI * radius * radius;
System.out.println("圆的半径:" + radius);
System.out.println("圆的面积:" + area);
}
}
class Spherical {
double radius;
double volume;
public Spherical(double radius) {
this.radius = radius;
volume = (Graphical.PI * radius * radius * radius * 4) / 3;
System.out.println("球的半径:" + radius);
System.out.println("球的体积:" + volume);
}
}
3.静态方法
在java中,我们如果想要使用类中的成员方法,首先先将这个类实例化,但当我们不想或者是不能创造类的实例化对象时,还要调用类中的方法才能完成时,我们可以使用静态方法。调用类的静态方法。无需创建类的对象。
package xun;
public class Myclass1 {
static public void showName() {
System.out.println("一个静态方法");
}
public static void main(String[] args) {
Myclass1.showName();
}
}
需要注意的几点:
①静态方法中不可以使用this关键字。
②静态方法中不可以调用非静态方法。
③System.out.println(); 和 public static void main(String[] args) {}都是典型的静态方法。
④静态成员可以使用“类名.静态成员”的形式调用,不鼓励使用“对象.静态成员”的形式。
⑤在java中不可以将方法体内的局部变量声明为“static”的。
4.静态代码块
除了类中成员方法外,用static修饰代码区域可以成为静态代码块。定义静态代码块,可以完成类的初始化操作,在类声明时就会运行。即当代码执行时,静态代码块首先执行且只执行一次。
package xun;
public class Myclass1 {
public static void main(String[] args) {
Myclass1 s1 = new Myclass1();
s1.showName();
}
public void showName() {
System.out.println("方法");
}
static {
System.out.println("静态代码块区域");
}
{
System.out.println("非静态代码块区域");
}
}
5.static与私有构造方法
用private修饰的构造方法即私有构造方法无法在本类外部使用,也就导致本类无法用new实例化,这样可以控制对象的生成。
若想要在本类外实例化对象,采用以下方式:
package xun;
public class Myclass {
//私有构造方法
private Myclass() {
}
//创建静态公开方法,返回本类实例对象
public static Myclass mcBorrow()
{
return new Myclass();
}
}
package xun;
public class Myclass1 {
public static void main(String[] args) {
//在非本类中创建一个实例对象,不是new实例化的,而是通过公开方法象mc借来的
Myclass myclass = Myclass.mcBorrow();
}
}