1 package com.bytezreo.statictest; 2 3 /** 4 * 5 * @Description static 关键字的使用 6 * @author Bytezero·zhenglei! Email:420498246@qq.com 7 * @version 8 * @date 上午8:43:02 9 * @ 1.static :静态的 10 * 2.static:可以用来修饰:属性,方法,代码块,内部类 11 * 不能修饰构造器 12 * 3.使用static修饰属性:静态变量(或类变量) 13 * 3.1 属性,按是否使用static修饰,又分为:静态属性 vs 非静态属性(实例变量) 14 * 实例变量:我们创建了类的多个对象,每个对象都独立的拥有了一套类中的非静态属性.当 15 * 修改其中一个对象的非静态属性时,不会导致其他对象中同样的属性值修改 16 * 17 * 静态变量:我们创建了多个对象,多个对象共享同一个静态变量,当通过某一个对象修改静态 18 * 变量时,时修改过了的。 19 * 3.2 static 修饰属性的其他说明: 20 * ① 静态变量随着类的加载而加载。可以通过“类.静态变量”的方式进行调用 21 * ② 静态变量加载早于对象的创建。 22 * ③ 由于类只会加载一次,则静态变量在内存中也只会存在一份,存在方法区的静态域中 23 * 方法区--->缓存 24 * ④ 静态变量(类变量) 实例变量 25 * 类 yes no 26 * 对象 yes yes 27 * 28 * 3.3 静态属性举例:System.out; Math.PI; 29 * 30 * 31 * 32 * 33 * 4.使用static修饰方法:静态方法 34 * ① 随着类的加载而加载,可以通过“类.静态方法”的方式调用 35 * ② 静态方法 非静态方法 36 * 类 yes no 37 * 对象 yes yes 38 * ③ 静态方法中,只能调用静态的方式或属性 39 * 非静态方法中,即可以调用非静态的方法或属性,也可以调用静态的方法或属性 40 * 41 * 5.static注意点: 42 * 5.1 在静态的方法内,不能使用this关键字,super关键字 43 * 5.2 关于静态属性和静态方法的使用,从生命周期角度去理解 44 * 45 * 46 * 6.开发中如何确定一个属性是否要声明为static的? 47 * > 属性是可以被多个对象所共享的,不会随着对象的不同而不同的 48 * 49 * 开发中如何确定一个方法是否要声明为static的? 50 * > 操作静态属性的方法,通常设置为 static的 51 * > 工具类的方法,习惯上声明为 static 的,比如:Math,Arrays,Collections 52 * 53 * 54 */ 55 public class StaticTest 56 { 57 public static void main(String[] args) { 58 59 Chinese.nation = "中国"; 60 61 Chinese c1 = new Chinese(); 62 c1.name = "姚明"; 63 c1.age = 21; 64 c1.nation = "CHN"; 65 66 67 68 Chinese c2 = new Chinese(); 69 c2.name = "马龙"; 70 c2.age = 30; 71 c2.nation = "China"; 72 73 System.out.println(c2.nation); 74 System.out.println(c1.nation); 75 76 c1.eat(); 77 Chinese.show(); 78 79 80 81 } 82 } 83 84 85 //中国人 86 class Chinese 87 { 88 String name; 89 int age; 90 static String nation; 91 92 93 public void eat() 94 { 95 System.out.println("中国人吃中餐"); 96 //非静态结构 97 this.info(); 98 99 //静态结构 100 Chinese.show(); 101 show(); 102 walk(); 103 System.out.println(Chinese.nation); 104 105 } 106 107 public static void show() 108 { 109 System.out.println("我是一个中国人"); 110 //不能调用非静态结构 111 //eat(); 112 //name = "Tom"; 113 114 //可以调用静态结构 115 System.out.println(Chinese.nation); 116 walk(); 117 } 118 119 public static void walk() 120 { 121 System.out.println("溜达"); 122 } 123 124 public void info() 125 { 126 System.out.println("介绍"); 127 } 128 }