java基础 static关键字

一旦用了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 }

 

posted @ 2019-10-14 21:30  mantishell  阅读(109)  评论(0编辑  收藏  举报