一.几种变量的介绍与区别
1.实例变量(又称成员变量):成员变量定义在类中,方法之外,在整个类中都可以被访问;成员变量随着对象的建立而建立,随对象的消失而消失;存在于对象所在的对内存中成员变量有默认初始值。
2.静态变量(类变量):是在类之中,方法之外,以static关键字申明的变量,其独立在对象之外,有许多对象共享的变量。静态变量在对象产生之前产生,并长驻于内存,其在JVM关闭时销毁。可通过类名与对象名(不建议)调用。
3.局部变量:在方法或语句块中申明的变量,生命周期只在定义的{}之中,不能跨方法或语句块使用。存在于栈内存中,作用的范围结束,变量空间自动释放;默认没有初始化值,使用时需要进行初始化。
二.修饰符
1.abstract抽象:可以修饰类与方法,类不能被实例化,其方法需要在子类中实现。 一个类继承了一个抽象类,那么必须要实现抽象类中的抽象方法,否则这个类还是一个抽象类。抽象类中可以存在普通方法,也可以没有抽象方法,但是抽象方法必须包含在抽象类中。
一个抽象类的子类如果不是抽象类,则它必须为父类中所有的抽象方法写出方法体,即重写父类中所有的抽象方法。
2.static静态:
数据(类数据):生命周期从创建开始到程序运行结束。不属于某个对象,为共有数据。
方法(类方法):属于类,可直接通过类名访问,如主程序的入口main()方法:public static void main(String[] args)。static方法不能被特定的对象调用,需要通过类调用且他们只能引用类数据以及其他类方法。
即使可以不通过对象在main里直接调用显得方便一些,但这样失去了面向对象的特点以及封装的意义。
3.final终态
在类之前,表示终结类,不能再被继承。
在方法之前,表示终结方法,不能被覆盖。因此final不能与abstract联合使用,abstract修饰的方法必须被子类覆盖重写。
在变量之前:不能修改,即常量。
访问控制修饰符
类的访问控制:public以及包访问权限。
类成员:public:公有,任何对象访问。
protected:同类以及子类的对象
private:类本身,类外不可见。(私有的数据成员与方法只能通过公有方法来访问)
包:不加任何修饰符,同包的成员可访问。
若把父类的数据成员均定义为protected,即使父子类放在不同的包内,子类的方法仍然可以访问到从父类中继承而来的protected的数据成员,然而子类的对象不属于子类,无法直接访问父类数据中protected的数据成员。