美文网首页
第二十一节课:static

第二十一节课:static

作者: 冰J冰 | 来源:发表于2016-01-12 11:09 被阅读71次
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;

}

相关文章

网友评论

      本文标题:第二十一节课:static

      本文链接:https://www.haomeiwen.com/subject/qyfckttx.html