import static java.lang.Math.random;
// import java.lang.Math;
class StaticModifier {
/*
类中的静态变量和静态方法能够与“类名”一起使用,不需要创建一个类的对象来访问该类的静态成员.
*/
static int i= 10;
int j;
StaticModifier() {
j = 20;
}
}
public class TestStatic {
// 多个实例中的静态变量 um 是共享同一内存空间,t1.um 和 t2.um 其实指向的都是同一个内存空间
static UserModel um = new UserModel();
//1.static 修饰符
public static void main(String args[]) {
// 类.static 变量
StaticModifier.i = 20;
System.out.println("类变量i=" + StaticModifier.i);
// 对象.实体变量
StaticModifier s = new StaticModifier();
System.out.println("实例变量j=" + s.j);
/*2.编译器只为整个类创建了一个静态变量的副本,因此它能够用类名进行访问。
也就是说:一个类中,一个 static 变量只会有一个内存空间,虽然有多个类实例,
但这些类实例中的这个 static 变量会共享同一个内存空间*/
TestStatic t1 = new TestStatic();
t1.um.userName = "张三";
TestStatic t2 = new TestStatic();
t2.um.userName = "李四";
System.out.println("t1.um.userName=="+t1.um.userName);
System.out.println("t2.um.userName=="+t2.um.userName);
//3. static 方法可以用类名而不是引用来访问
System.out.println(GeneralFunction.addUp(1,2));
// // 如访问控制权限允许,static 属性和方法可以使用对象名加‘.’方式调用;当然也
// GeneralFunction a = new GeneralFunction();
// a.addUp(3,4);
// 4.静态import
System.out.printf("\n随机数是:%f",random());
/*5.静态初始器(Static Initializer)是一个存在与类中方法外面的静态块。静态初始器仅仅
在类装载的时候(第一次使用类的时候)执行一次。
静态初始器的功能是:往往用来初始化静态的类属性。
*/
System.out.println("counter=" + Count.counter);
new Count().test();
}
}
class UserModel{
public String userName="";
}
class GeneralFunction {
int temp;
// static 的基本规则:有关静态变量或方法的一些要点如下:
public int getTemp(){
return temp >0?temp:0;
}
// 构造方法不允许声明为 static 的
public GeneralFunction(){
}
// static 方法可以用类名而不是引用来访问
public static int addUp(int x, int y) {
/* 一个类的静态方法只能访问静态属性,否则出错,
并且静态方法中不存在当前对象,因而不能使用“this”,当然也不能使用”super”;*/
//temp = 10;
// 一个类的静态方法不能够直接调用非静态方法,否则出错
// x = getTemp();
return x + y;
}
}
class GeneralFunctionSon extends GeneralFunction{
// 静态方法不能被非静态方法覆盖;
public static int addUp(int x, int y) {
return x+y;
}
}
class Count {
public static int counter;
static {//只运行一次
counter = 123;
System.out.println("Now in static block.");
}
public void test(){
System.out.println("test method=="+counter);
}
}
public class People{
Dog d ;
public static void main(String[] args) {
People zhangSan = new People();
zhangSan.d = new Dog();
zhangSan.d.nikName = "gouDan";
System.out.print(zhangSan.d.nikName);
}
}
class Dog{
int legs;
String nikName;
}