package和import
package:
定义类时需要指定类的名称,但如果仅仅将类名作为类的唯一标识,则不可避免的出现命名的冲突,这会给组件复用以及团队间的合作造成很大的麻烦
在Java语言中,用包(package)的概念来解决命名冲突的问题。在定义包的语法为:package 包名;
注:必须写在Java源文件的最开始,此时类的全名为:包名+类名。不同的包中也可以有相同类名。
- 作用:避免类名的冲突
- 包名可以有层次结构
- 类的全称:包名.类名
- 建议:包名所用字母都小写
import:
- 同包中的类可以直接访问
- 声明类,不有写全称(不建议.* 影响运行效率)
访问控制修饰符
数据私有化private,行为公开化public
- public:公开的,-----------任何类
- protected:受保护的,–本类,派生类,同包类
- 默认的:什么也不写,----本类,同包类
- private:私有的,---------本类
修饰符 | 本类 | 同包类 | 子类 | 其他类 |
---|---|---|---|---|
public | 可以 | 可以 | 可以 | 可以 |
protected | 可以 | 可以 | 可以 | 不能 |
默认(什么也不加) | 可以 | 可以 | 不能 | 不能 |
private | 可以 | 不能 | 不能 | 不能 |
final:最终的、不可变的———一般不用
- 修饰变量:变量不能被改变
- 修饰方法:方法不能被重写
- 修饰类:类不能被继承,但可以继承其他类
static
-
静态变量
- 由static修饰
- 属于类的,存储在方法区中,只有一份
- 常常通过类名点来访问
- 怎么用:所有对象所共享的数据(图片、音频、视频等)
-
静态方法
- 由static修饰
- 属于类的,存储在方法区中,只有一份
- 常常通过类名点来访问
- 静态方法没有隐式this传递,没有this意味着没有对象,而实例变量必须通过对象来访问,所以静态方法中不能直接访问实例成员。
- 何时用:方法的操作仅与参数变量相关,与对象无关。
-
静态块
- 属于类的,在类被加载期间自动执行,类只被加载一次,所以静态块只执行一次
- 何时用:常常用于加载/初始化静态资源(图片、视频、音频等)
在new的时候执行。即使创建多个对象,也只有一份,降低内存的开销
扩展:成员变量
- 实例变量:没有static修饰,属于对象的,存储在堆中,有几个对象就有几个
- 静态变量:由static修饰,属于类的,存储在方法区中,只有一份
内存管理
- 堆:new出来的对象(包括实例变量)
- 栈:局部变量(包括方法的参数)
- 方法区:class字节码文件(包括方法,静态变量)