——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
复制代码
Static关键字的学习
一 Static是一个修饰符,用于修饰成员(成员变量和成员函数)
1,想要实现对象中的共性数据的对象共享。可以将这个数据进行静态修饰。 而由于该数据是共享的,所以如果某一个对象修改了该变量的值,那么同一个类的所有对象的该数据都会受到影响。故有时可以用Static修饰的成员变量来计数。
2,被静态修饰的成员,可以直接被类名所调用。也就是说,静态的成员多了一种调用方式。类名.静态方式。
3,静态随着类的加载而加载。而且优先于对象存在。
二 Static关键字使用时的注意事项;
1 静态方法只能访问静态成员,不可以访问非静态成员,反之亦然。
2 静态方法中不能使用this,super关键字。 因为this代表对象,而静态在时,有可能没有对象,所以this无法使用
3 静态的注意:静态的生命周期很长。
三 静态代码块:就是一个有静态关键字标示的一个代码块区域。
定义在类中;可以完成类的初始化。静态代码块随着类的加载而执行,而且只执行一次(new 多个对象就只执行一次)。如果和主函数在同一类中,优先于主函数执行。
用Static修饰的成员变量来计数列子
package Chapter8;
public class Circle2 {
double radius;
static int numberOfObjects = 0;
Circle2(){
radius = 1.0;
numberOfObjects++;
}
Circle2(double newRadius){
radius = newRadius;
numberOfObjects++;
}
static int getNumberaOfObjects(){
return numberOfObjects ;
}
double getArea(){
return radius * radius * Math.PI;
}
}
---------------------------------
package Chapter8;
public class TestCircle2 {
static {
int numberOfObjects = 1;
}
public static void main(String[] args){
System.out.println("Before creating objects");
System.out.println("The number of Circle objects is " + Circle2.numberOfObjects );
Circle2 c1 = new Circle2();
System.out.println("\nAfter creating c1");
System.out.println("c1: radius (" + c1.radius +
") and number of Circle objects(" + c1.numberOfObjects);
Circle2 c2 =new Circle2(2.0);
System.out.println("\nAfter creating c2");
System.out.println("c2: radius (" + c2.radius +
") and number of Circle objects(" + c2.numberOfObjects);
}
}
--------------------------------
Before creating objects
The number of Circle objects is 0
After creating c1
c1: radius (1.0) and number of Circle objects(1)
After creating c2
c2: radius (2.0) and number of Circle objects(2)
四静态导入
静态导入是 Java 5 的新增特性,用来导入类的静态变量和静态方法。
一般我们导入类都这样写:
1 import packageName.className; // 导入某个特定的类
或者
1 import packageName.*; // 导入包中的所有类
而静态导入可以这样写:
1 import static packageName.className.methonName; // 导入某个特定的静态方法
或
1 import static packageName.className.*; // 导入类中的所有静态成员
导入后,可以在当前类中直接用方法名调用静态方法,不必再用 className.methodName 来访问。
对于使用频繁的静态变量和静态方法,可以将其静态导入。静态导入的好处是可以简化一些操作,例如输出语句 System.out.println(); 中的 out 就是 System 类的静态变量,可以通过 import static java.lang.System.*; 将其导入,下次直接调用 out.println() 就可以了。
列如:
1 import static java.lang.System.*;
2 import static java.lang.Math.random;
3 public class Demo {
4 public static void main(String[] args) {
5 out.println("产生的一个随机数:" + random());
6 }
7 }
运行结果:
产生的一个随机数:0.05800891549018705
总结:如果一个成员变量或方法依赖于类的某个具体实例,那就应该将其定义成实例变量或实例方法。如果一个变量或方法不依赖类的某个具体实例,就应当将其定义成静态的变量或静态方法。