1.static关键字的使用

(1)静态变量

public class static1 {
      String name;
      int age;
     static String city="乌克兰";//静态变量
      static1(String n,int a){
          name=n;
          age=a;
      }
      String talk(){
        return  "我是"+name+"今年"+age+"岁"+city+"人";
      }
}
public class static11 {

    public static void main(String[] args) {
        static1 s1=new static1("lady",18);
        static1 s2=new static1("lady2",18);
        System.out.println(s1.talk());
        System.out.println(s2.talk());
        //修改国家后
        static1.city="中国";
        System.out.println(s1.talk());
        System.out.println(s2.talk());
    }

}

计算类产生了多少个对象

public class static1 {
      String name;
      int age;
     static String city="乌克兰";//静态变量
     static int count=0;
     static1(){
         count++;//新增一个对象
         System.out.println("一共产生了"+count+"对象");
     }
     static1(String n,int a){
          this();
          name=n;
          age=a;
      }
      String talk(){
        return  "我是"+name+"今年"+age+"岁"+city+"人";
      }
}

2.静态方法

使用static类型声明方法时,如果类中声明了一个static类型的属性,则该属性可以在非static类型方法中使用和是static类型方法中使用,但是,static类型的方法调用非static类型的属性,则会报错

public class static1 {
      String name;
      int age;
    private static String city="乌克兰";//静态变量
   //静态方法
public static void setCity(String c){ city=c; } static1(String n,int a){ name=n; age=a; } String talk(){ return "我是"+name+"今年"+age+"岁"+city+"人"; } }
public class static11 {

    public static void main(String[] args) {
        static1 s1=new static1("lady",18);
        static1 s2=new static1("lady2",18);
        System.out.println(s1.talk());
        System.out.println(s2.talk());
        //修改国家后
        static1.setCity("中国");
        System.out.println(s1.talk());
        System.out.println(s2.talk());
        
    }

}

运行结果:

我是lady今年18岁乌克兰人
我是lady2今年18岁乌克兰人
我是lady今年18岁中国人
我是lady2今年18岁中国人

3.静态代码块

一个类可以使用不包含在任何方法中的静态代码块,当类被载入时,静态代码块被执行,且只执行一次,静态代码块经常用来进行类属性的初始化。

public class static2 {
       static2(){
           System.out.println("a");
       }
       //先运行下面的静态代码
       static{
           System.out.println("b");
       }
}
public class static22 {
    static {
        System.out.println("c");
    }

    public static void main(String[] args) {
        System.out.println("程序开始执行!");
        new static2();
        new static2();
    }

}

运行结果:

c
程序开始执行!
b
a
a

4.构造方法的私有

构造方法用private修饰,则成为了私有

public class static3 {
    String name;

    // 私有构造方法,封装
    private static3() {
        name = "lady";
    }

    private static final static3 st = new static3();// 实例化私有构造方法,用final标记,表示不能在重新实例化

    public static static3 getSt() {
        return st;
    }
}
public class static33 {

    public static void main(String[] args) {
        static3 st = null;// 声明一个static3的对象,没有实例化
        st = static3.getSt();// 调用static3的getSt方法

        System.out.println(st.name);
    }

}

运行结果:lady

posted on 2017-04-12 15:07  梦幻紫星  阅读(216)  评论(0编辑  收藏  举报