day12static

89 阅读3分钟

static修饰成员变量的使用

static关键字:  被该类的所有对象共享使用,不依赖于某个具体的对象,和对象无关,依赖于类,在内存中唯一只有一份 
static修饰修饰成员变量(类变量: 依赖于类,与对象无关)
1.定义格式:  static 数据类型 变量名称 = 数据值;
2.使用格式: 类名.静态成员变量名称;        推荐使用
          对象名.静态成员变量名称;      不推荐使用
 ### static修饰成员方法的使用
 static修饰成员方法(类方法: 依赖于类,与对象无关)
1.定义格式:
    public static 返回值类型 方法名称(参数列表...) {...}

2.使用格式:
   类名.静态成员方法名称(...)        推荐使用
    对象名.静态成员方法名称(...)      不推荐使用 
3.注意: 静态成员变量也有默认初始化值
public class JavaEE372Student {
    
    String name;//不能使用static修饰: 属于每个对象的特有数据
    static String room;//使用static修饰: 属于所有对象的共享数据

    //定义静态方法
    public static void show() {
        System.out.println("班级: "+room);
    }
}
public class Demo05Static {
    public static void main(String[] args) {
        System.out.println(JavaEE370Student.room);//null
        //创建JavaEE372Student类的对象
        JavaEE372Student stu = new JavaEE372Student();
        //不推荐使用对象调用静态成员
        System.out.println(stu.room);//null 
        //给静态成员赋值
        JavaEE372Student.room = "HMTBD1002";  
        //调用静态成员方法
        //推荐使用类名调用
        JavaEE372Student.show();//班级: HMTBD1003 
        //不推荐使用对象调用
        stu.show();//班级: HMTBD1003
    }
}
静态的内容只能使用静态的内容,不能使用非静态的内容
静态的注意事项
  (1)静态方法可以直接访问静态变量和静态方法。
  (2)静态方法不能直接访问非静态成员变量或非静态成员方法。
  (3)非静态方法可以直接访问静态变量或静态方法。
  (4)静态方法中,不能使用this关键字。
 //此类只针对黑马的老师
public class HMTeacher {
    String name; 
    static String country = "CHINA";   
    //静态方法
    public static void show() {
        //静态方法中可以直接使用静态成员变量
        System.out.println("国籍: "+country); 
        System.out.println("姓名: "+name);//错 
        //method方法和show方法在同一个类中,可以省略类名
       //printName();错 
    }  
    public static void method() {
        System.out.println("静态方法...method...");
    } 
    //非静态方法
    public void printName() { 
        System.out.println("姓名: "+name+", 国籍: "+country);//正确
       //调用静态方法
        show();//正确 
    }
}
//测试类
public class Demo06StaticNotice {
    public static void main(String[] args) {
        //直接使用类名调用静态方法,根本没有对象
        //HMTeacher.show(); 
        //创建对象
        HMTeacher ht = new HMTeacher(); 
        //对象调用成员方法
        ht.printName();
    }
}

静态代码块

  静态代码块 static { }---- 完成静态成员变量的赋值  静态代码块,仍然属于静态内容,内部不能使用非静态
  public class Demo07StaticKuai {
    public static void main(String[] args) {
        //创建对象
        //Person p = new Person();
        //Person p2 = new Person();

        System.out.println(Person.country);
    }
}
//此类只针对咱们中国人
public class Person {
    String name;//不能使用static修饰: 每个对象的特有数据
    static String country = "CHINESE";//必须使用static修饰: 所有的对象的共享数据
    //空参构造方法
    public Person(){
        System.out.println("空参构造被执行了...");
    }
    //静态代码块
    static {
        System.out.println("静态代码块执行了...");
        //(3)完成静态成员变量的赋值
        country = "CHINA";
        //(4)静态代码块,仍然属于静态内容,内部不能使用非静态,也不能使用this
        (5)完成项目的初始化工作
        init();
    }
    //模拟项目初始化的方法
    public static void init() {
        System.out.println("项目正在完成初始化,需要稍等10秒钟....");
        for (int i = 10; i > 0; i--) {
            //此代码直接复制,后面多线程中讲解
            try {
                Thread.sleep(1000);//1000毫秒,程序在此处休眠1000毫秒(1秒)
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(i);
        }
        System.out.println("项目初始化完成,你可以尽情使用了....");
    }
}