特点:
随着类的加载而加载
优先于对象存在
被所有对象所共享
可以直接被类名调用
使用注意:
静态方法只能访问静态成员 但是非静态成员可以访问静态成员;
静态方法中不可以使用this,super关键字
主方法(main)是静态的 public static void main(String[] agrs){}
方法的调用:
1 /* 2 特点: 3 随着类的加载而加载 4 优先于对象存在 5 被所有对象所共享 6 可以直接被类名调用 7 8 方法的调用: 9 1.对象调用: 对象.方法(实参); 10 11 2.类调用 这个方法所在的类的名字.方法(实参); 12 //前提: 这个被调用的方法必须使用 static修饰 13 14 static in num = 100;//表示人类的总数 15 16 17 在JVM内存区中有一块存储区域: 静态区域,专门存储类成员 18 19 */ 20 21 22 //描述人类 23 class Person 24 { 25 26 27 //static Person(){}//StaticDemo.java:27: 错误: 此处不允许使用修饰符static 28 /* 29 没有使用static修饰的方法或字段,属于对象 -- > 实例成员 30 31 32 使用static修饰的方法或字段,属于类 ---> 类成员 33 34 35 调用: 36 若是实例成员:只能通过对象来调用; 37 若是类成员: 可以使用类名调用; 也可以使用对象来调用; 38 建议使用:类名来调用; 其实在底层,对象调用类成员,也会转换类名调用 39 40 41 42 43 static方法,主要用在做工具类的方法的时候(工具方法) 44 */ 45 String name; 46 47 int age; 48 49 50 static int num = 100;//人类总数 51 } 52 53 class StaticDemo 54 { 55 public static void main(String[] args) 56 { 57 System.out.println("通过类名来调用类成员= " + Person.num); 58 //System.out.println("通过类名来调用实例成员= " + Person.age); 59 System.out.println("通过对象来调用实例成员= " + new Person().age); 60 System.out.println("通过对象来调用类成员= " + new Person().num); 61 62 63 //故意使用对象来调用类成员 64 65 Person p1 = new Person(); 66 67 //p1去修改人类总数 68 p1.num = 95; 69 70 System.out.println("p1.num= " + p1.num);//95 71 Person p2 = new Person(); 72 73 System.out.println("p2.num= " + p2.num);//95 //因为staric是被所有对象所共享 74 75 76 //对方法或字段只进行一次调用时; 77 //new Person();表示匿名对象,没有名字的对象 78 79 new Person().age = 17;//使用一次之后就被销毁了 80 System.out.println(new Person().age);//0 81 82 83 84 //== 判断对象时候是同一个对象,其实比较的是 堆里面的地址 85 System.out.println("p1 == p1" +(p1 == p1));//true 86 System.out.println("new Preson() == new Person()" + (new Person() == new Person()));//false 87 88 } 89 }
访问字段和方法:
- 类和实例访问字段和方法的语法:
- 访问类成员: 类.字段 类.方法
- 访问实例成员: 实例.字段 实例.方法
static 修饰的字段和方法,既可以通过类调用,也可以使用实例调用;
没static 修饰的字段和方法,只能使用实例来调用
匿名独享:
特点:
对方法或字段只进行一次调用时;
new Car().show();
new Car().run();
可作为实际参数进行传递;
public void show(Car c){ }
new Car().show(new Car());
只在堆内存中开辟空间,而没有在栈内存的引用。
如果只调用一次:匿名对象
如果要调用多次:实例