type
status
date
slug
summary
tags
category
icon
password
Property
我们经常看到
public
、protected
、private
这些修饰符。在Java中,这些修饰符可以用来限定访问作用域public
定义为
public
的class
、interface
可以被其他任何类访问:上面的
Hello
是public
,因此,可以被其他包的类访问:定义为
public
的field
、method
可以被其他类访问,前提是首先有访问class
的权限。private
定义为
private
的field
、method
无法被其他类访问:实际上,确切地说,
private
访问权限被限定在class
的内部,而且与方法声明顺序无关。推荐把private
方法放到后面,因为public
方法定义了类对外提供的功能,阅读代码的时候,应该先关注public
方法:由于Java支持嵌套类,如果一个类内部还定义了嵌套类,那么,嵌套类拥有访问
private
的权限:定义在一个
class
内部的class
称为嵌套类(nested class
),Java支持好几种嵌套类。protected
protected
作用于继承关系。定义为protected
的字段和方法可以被子类访问,以及子类的子类:上面的
protected
方法可以被继承的类访问:package
最后,包作用域是指一个类允许访问同一个
package
的没有public
、private
修饰的class
,以及没有public
、protected
、private
修饰的字段和方法。只要在同一个包,就可以访问
package
权限的class
、field
和method
:注意,包名必须完全一致,包没有父子关系,
com.apache
和com.apache.abc
是不同的包。局部变量
在方法内部定义的变量称为局部变量,局部变量作用域从变量声明处开始到对应的块结束。方法参数也是局部变量。使用局部变量时,应该尽可能把局部变量的作用域缩小,尽可能延后声明局部变量。
final
Java还提供了一个
final
修饰符。final
与访问权限不冲突,它有很多作用。用
final
修饰class
可以阻止被继承:用
final
修饰method
可以阻止被子类覆写:用
final
修饰field
可以阻止被重新赋值:用
final
修饰局部变量可以阻止被重新赋值:如果不确定是否需要
public
,就不声明为public
,即尽可能少地暴露对外的字段和方法。把方法定义为
package
权限有助于测试,因为测试类和被测试类只要位于同一个package
,测试代码就可以访问被测试类的package
权限方法。一个
.java
文件只能包含一个public
类,但可以包含多个非public
类。如果有public
类,文件名必须和public
类的名字相同。