static修饰的(静态的)类属性叫做静态属性,没有使用..叫实例属性,可以让类的所有对象共享这一属性
静态方法 类方法内部不能用this
package staticfield;
/*static修饰的类属性*/
public class StaticfieldTest {
@SuppressWarnings("static-access")
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("当前编号是"+Tiger.count);
Tiger tiger=new Tiger("虎子1");
tiger.displayInfo();
Tiger tiger2=new Tiger("虎子2");
tiger2.displayInfo();
Tiger tiger3=new Tiger("虎子3");
tiger3.displayInfo();
tiger3.currentCount();
}
}
/*新建一个老虎类*/
class Tiger{
public static int count=100;
private int id; /*jvm加载该类时,会先对该类进行初始化,并只初始化一次,这个类属性在内存中只有一份,所有对象共享这一属性*/
private static String name;
public Tiger(String name){
this.name=name;
count++;
id=count;
}
public void displayInfo(){
System.out.println(name+"的编号是"+id);
}
public static void currentCount(){
System.out.println(name+"当前编号是:"+count);
}
}
运行结果:
当前编号是100
虎子1的编号是101
虎子2的编号是102
虎子3的编号是103
虎子3当前编号是:103
在StaticBlockTest类中,静态初始化模块对类属性country进行显式初始化,并输出初始化的值。
如果一个类中包含多个静态模块,它们将以在类中出现的顺序执行。
package staticfield;
public class StaticBlockTest {
private static String country;
private String name;
static{ //静态初始化块
country="中国";
System.out.println("StaticBlockTest已加载!");
System.out.println("StaticBlockTest.country"+StaticBlockTest.country);
}
public StaticBlockTest(String name){
this.name=name;
}
public void displayInfo(){
System.out.println("我的名字是"+name+",我来自"+country);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
运行结果:
StaticBlockTest已加载!
StaticBlockTest.country:中国
静态初始化块:在类的内部并且用static修饰的代码块,会在该类被jvm(Java Virtual Machine)java虚拟机第一次加载到内存中执行一次、从此便不会执行。经常用来显示初始化类属性。
package staticfield;
/*通过类方法返回本类的对象,而不是用构造器*/
public class SingletonTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Singleton i=Singleton.getInstance();/*再类的外部,只有通过getInstance()方法才能获取它的对象,
获取的对象永远是类属性sing所引用的那个对象。*/
i.test();
}
}
class Singleton{
private static Singleton sing=new Singleton();//自定义一个Singleton类类属性sing,并对它显示初始化。
private Singleton(){
}//新建一个私有的构造方法 不能在其他class新建并初始化Singleton类
public static Singleton getInstance() {
return sing;
}//提供获取sing属性的方法
public void test(){
System.out.println("test");
}
}
运行结果:
test