练习:
static:方便在没有创建对象的情况下调用域或者方法
比较好的博客:https://www.cnblogs.com/dolphin0520/p/3799052.html
E1.2 概述static域的所有用途
static域为类的所有对象所共有,在内存中只存在一个副本,它当且仅当类在初次加载的时候会被初始化;可以通过类直接进行调用。静态成员变量虽然独立于对象,但是仍然可以通过对象去访问
非static域是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
static不能用来修饰局部作用域
E1.3 概述static方法的可能使用
static方法可以通过类名直接进行调用。
1. static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的;而且可以在没有创建任何对象的情况下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途
2. static方法可以用来优化程序性能,因为只会在类加载时执行一次,适用于只创建一次对象可以多次使用的场景。
E1.4 静态方法可以引用它所在类的非静态域吗?请说明,非静态方法可以引用静态域吗?请说明
(1)静态方法不可以引用它所在类的非静态域,因为非静态域的使用需要通过类的对象进行调用,静态方法是直接用类名进行调用的。
静态方法在构造方法之前执行,非静态域需要在对象创建的时候进行初始化,也就是说非静态域要在对象出现以后才能调用,但是非静态块是在构造函数之前执行的,所以此时对象都还没有产生,所以无法调用非静态域。
(2) 非静态方法可以引用它所在类的静态域,因为可以通过类名进行直接调用。
E1.5 在定义类时,把一种特殊域定义为public总是安全的,为什么?
可以被继承
E1.6 从最不严格到最严格排序访问控制级别:public 包访问 protected protected 包访问 private
public:
1. public修饰类,可以在不同的包之间被使用
2. public修饰域,可以在本类中使用,在类可以被访问的地方都是可以使用的,可以被继承
3. public修饰方法,可以在本类中使用,在类可以被访问的地方都是可以使用的,可以被继承
protected:protected域或方法或类对子类是可继承的,而且对于同一个包中的类是可访问的。在默认包访问权限的基础上,其他包中子类也可以访问。
包访问权限:没有任何修饰符修饰的域/方法/类,可以被同一个包中的所有类访问和继承。而这个包外面的任意类都不能访问或继承它。
https://blog.csdn.net/wanghao_0206/article/details/52710094