一、成员变量和局部变量
成员变量分为实例属性和类属性。实例属性就是不以static修饰类属性是以static修。
局部变量分为形参,方法内定义的方法局部变量和在代码块中定义的代码块局部变量。
注意:
Java 允许局部变量和成员变量同名,如果局部变量和成员变量同名局部变量会覆盖成员变量,如果需要在这个方法中引用覆盖的成员变量,则对于实例属性可以使用this访问对于类属性可以使用类名来访问。
不要移位的定义类属性或实例属性来解决问题,而忽视局部变量。因为成员变量的作用域将扩大到类存在范围或或者对象存在的范围,这样就扩大了变量的生存时间,导致更大的系统开销,同时扩大了变量的作用域,这不利于提高程序的内聚性。
访问控制符
访问控制符控制级别由小到大依次是:private、default、protected、public。
Private修饰属性和方法,该控制符喜事属性最合适,可以把属性隐藏在类的内部;protected修饰的成员可以被同一个包中其他类访问,如果使用protected修饰一个方法,通常是希望其子类重写这个方法。
继承之重写父类的方法
1、方法的重写遵循“两同两小一大”规则。两同即方法名相同、形参列表相同,两小指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法抛出的异常应该比父类方法声明抛出的异常更小或相等。一大指的是子类方法的访问权限应该比父类方法更大或相等,尤其需要指出的是,覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法,不能一个是类方法,一个是实例方法。如果子类中定义了一个与父类private方法具有相同方法名,相同形参列表,形同返回值类型的方法,依然不是重写,只是在子类中重新定义了一个新方法,与父类无关。如果父类中方法需要被外部类调用,必须以public修饰,但是又不希望子类重写该方法,可以使用final修饰符。
静态初始化块
静态初始化块,也属于类的静态成员,同样需要遵循静态成员不能访问费静态成员的规则,因此静态初始化块不能访问非静态成员,包括不能访问实例属性和实例方法。
final修饰符
与普通成员变量不同的是,final成员变量包括实例属性和类属性,必须由程序员显示的初始化,系统不会对final成员进行隐式的初始化。Final修饰的实例属性,要么在定义该属性时指定初始值,要么在普通初始化块或构造器中为该属性指定初始值,但是如果普通初始化块已经为某个实例属性指定了初始值,则不能再在构造器中为该实例属性指定初始值。Final修饰的类属性,要么在定义时指定初始值,要么在静态初始化块中为该属性指定初始值。
Final修饰局部变量注意事项。使用final修饰局部变量是既可以在定义时指定默认值,也可以不指定。不指定则可以在后面的代码中复制,但只能一次,不能重复赋值。若指定了默认值,则在后面的代码中不能再对该变量赋值。
Final修饰的类不可以有子类,为了保证某个类不可以被继承,则可以使用final修饰这个类。
抽象类
抽象类可以包含属性、方法、构造函数、初始化块、内部类和枚举类六种成分。Abstract不能用于修饰属性,局部变量,构造方法。
Static和abstract 不能同时修饰某个方法。如果static修饰的类方法被定义成抽象方法,则调用了一个没有方法体的方法肯定会引起错误。同时private和abstract不能同时使用。
接口
接口里的属性默认使用public static final修饰。
接口修饰符只能是public或者省略,接口里的方法都是public所以实现接口方法时必须使用public。
内部类
1、非静态的内部类可以直接访问外部类成员。外部类成员不能直接访问非静态内部类的实例属性,如果需要访问内部类的实例属性,必须显示的建立内部对象。
总结:只是简单的总结一下基础的内容,很多更小的细节可能还没有说道,后期将会根据学习情况继续努力总结这些不被人注意的小细节。 |
|