1.类成员和实例成员
1)类的成员:字段,方法,内部类;使用static修饰的成员
2)实例成员:没有使用static修饰的成员
3)类成员只能访问类成员,实例成员只能访问实例成员
4)类成员直接属于类,可以通过类来访问static字段和static方法。实例成员只属于对象,通过对象来访问非static字段和非static方法(对象其实可以访问类成员,但是底层依然使用类名访问的)
2.使用类成员跟实例成员的注意事项
1)在static方法中,只能调用static成员,否则出现”无法从静态上下文中引用非静态变量”
2)非static方法,可以访问静态成员,也可以访问实例成员
3)静态成员访问成员变量,该成员变量必须使用static进行修饰
3.什么时候定义成static的字段和方法
如果这个状态/行为属于整个事物(类),就直接使用static修饰,被所有对象所共享。在开发中往往把工具方法使用static修饰,如所用到的二分法查找,排序等等,如果不使用static修饰,则这些方法属于该类的对象,我们得创建对象再调用方法,因为创建N个对象会损耗内存,降低性能。在开发中工具对象只需要一份即可,可能创建N个对象,此时我们往往把该类设计为单例,但是还是有点麻烦。所以一般的,在开发设计中,为了调用简单,我们使用static修饰
“`
4.类成员使用的优点和缺点
1)优点:对对象的共享数据进行单独空间的存储,节省空间,没有必要每一个对象都存储一份,可以直接被类名调用
2)缺点:生命周期过长。因为类成员是随着类的加载而加载的,意味着只要JVM还在运行就会一直存在,而不像实例成员那样,只要对象没有使用了就会被回收
5.代码:
package com.JAVABASIS6;
class ClassDemo2{
void isDo(){
System.out.println(“该学习了”);
}
}
public class StaticAndObjectDemo {
static String name = “成员变量”;
public static void main(String[] args){
//如果成员变量前面不用static进行修饰则会报错,Cannot make a static reference to the non-static field name,因为静态变量访问成员变量,该变量必须使用static进行修饰
System.out.println(name); //输出为”成员变量”
//当使用这句:ClassDemo2.isDo();//会报错:Cannot make a static reference to the non-static method isDo() from the type ClassDemo2
}
}