[1]static可以修饰:属性,方法,代码块,内部类。
[2]static修饰属性;
package com.msb5; public class Text { //属性 int id; static int sid; public static void main(String[] args) { //创建一个对象 Text t1 = new Text(); t1.id = 10; t1.sid = 10; Text t2 = new Text(); t2.id = 20; t2.sid = 20; Text t3 = new Text(); t3.id = 30; t3.sid = 30; System.out.println(t1.id); System.out.println(t2.id); System.out.println(t3.id); System.out.println(t1.sid); System.out.println(t2.sid); System.out.println(t3.sid); } }
输出如上图所示。
从内存分析可以很直观的看出。
一般官方的推荐访问方式:
类名.属性名去访问,
Text.sid = 100; System.out.println(sid);
总结:
(1)在类加载的时候一起加载入方法区中的静态域中
(2)先于对象存在
(3)访问方式:对象名.属性名 类名.属性名(推荐)
static修饰属性的应用场景:
我们想要实现一个数据的共享,某些特定的数据,想要在内存中共享,只有一块,那么这种情况下,就可以用static修饰。
package com.msb5; public class xupt { String name; int age; static String school; public static void main(String[] args) { xupt.school="西安邮电大学"; xupt t1 = new xupt(); t1.name = "李四"; t1.age = 19; xupt t2 = new xupt(); t2.name = "四"; t2.age = 12; System.out.println(t2.school); } }
属性:
静态属性(类变量)
非静态属性(实例变量)
[3]static修饰方法:
package com.msb5; public class Demo { public void eat() { System.out.println("------a"); } //1.static和public都是修饰符,并列的没有先后顺序,先写谁后写谁都行 //2.在静态方法中不能访问非静态的属性 public static void b() { //System.out.println(this.id);//4.在静态方法中不能使用this关键字 //a();//3.在静态方法中不能访问非静态的方法 System.out.println("------b"); } public static void main(String[] args) { //5.非静态的方法可以用对象名.方法名去调用 Demo d = new Demo(); d.eat(); //6.静态的方法可以用对象名.方法名去调用,也可以用类名.方法名去调用(推荐) Demo.b(); } }
总结:静态的去找静态的