一旦用了static关键字
那么这样的内容不再属于对象自己,
而是属于类的,
所以凡是本类的对象,都共享同一份。
1 /** 2 * 如果一个成员变量使用类static关键字,那么这个变量不再属于对象自己,而是属于类的,多个对象共享同一份数据。 3 */ 4 public class Demo01StaticField { 5 public static void main(String[] args) { 6 Student one = new Student("郭静",19); 7 one.room = "101"; 8 System.out.println("姓名:" + one.getName() + ",年龄:" + one.getAge() + ",教室:" + one.room + ",id:" + one.getId()); 9 Student two = new Student("黄蓉", 16); 10 System.out.println("姓名:" + two.getName() + ",年龄:" + two.getAge() + ",教室:" + two.room + ",id:" + two.getId()); 11 12 } 13 }
姓名:郭静,年龄:19,教室:101,id:1
姓名:黄蓉,年龄:16,教室:101,id:2
1 public class Student { 2 private int id; // 学号 3 private String name; // 姓名 4 private int age; // 年龄 5 static String room; // 所在教室 6 private static int idCounter = 0; // 学号计数器, 每当new了一个新对象当时候,计数器++ 7 8 public Student() { 9 this.id = ++idCounter; 10 } 11 12 public int getId() { 13 return id; 14 } 15 16 public Student(String name, int age) { 17 this.name = name; 18 this.age = age; 19 this.id = ++idCounter; 20 } 21 22 public String getName() { 23 return name; 24 } 25 26 public void setName(String name) { 27 this.name = name; 28 } 29 30 public int getAge() { 31 return age; 32 } 33 34 public void setAge(int age) { 35 this.age = age; 36 } 37 }
1 package cn.mantishell.day08.demo03; 2 3 /** 4 * 一旦使用static修饰成员方法,那么就成了静态方法,静态方法不属于对象,而是属于类。 5 * 6 * 如果没有static关键字,那么必须先创建对象,然后通过对象才能使用它 7 * 如果有了static关键字,那么不需要创建对象,直接可以通过类名称来使用它 8 * 9 * 无论是成员变量还是成员方法,如果有来static,都推荐使用类名称进行调用 10 * 静态变量:类名称.静态变量 11 * 静态方法:类名称.静态方法() 12 * 注意事项: 13 * 1、静态不能直接访问非静态 14 * 2、静态方法当中不能使用this 15 */ 16 public class Demo02StaticMethod { 17 public static void main(String[] args) { 18 MyClass obj = new MyClass();//首先创建对象 19 //然后才能使用没有static关键字都内容 20 obj.method(); 21 22 //对于静态方法,可以通过对象名进行调用,也可以通过类名称调用 23 obj.methodStatic();//不推荐 24 MyClass.methodStatic();//推荐 25 26 //对于本类中的静态方法,可以省略类名称 27 myMethod();//等效:Demo02StaticMethod.myMethod(); 28 29 } 30 31 public static void myMethod(){ 32 System.out.println("自己都方法"); 33 } 34 }
1 package cn.mantishell.day08.demo03; 2 3 /** 4 * 静态代码块的格式: 5 * public class 类名称{ 6 * static { 7 * //静态代码块 8 * } 9 * } 10 * 11 * 特点:当第一次用到本类时,静态代码块执行唯一一次。 12 * 13 * 静态代码块当典型用法: 14 * 用来一次性当堆静态成员变量进行赋值 15 */ 16 public class Demo03StaticStudent { 17 static { 18 System.out.println("静态代码块执行!"); 19 } 20 21 public Demo03StaticStudent(){ 22 System.out.println("构造方法执行!"); 23 } 24 }