Package
Java里的每一个类都属于一个包,包是管理类的容器,在默认情况下,java会为每一个类生成一个默认包,同一个包下的类可以相互引用非private的方法,但是不同的包之间不可以。
Java用包来管理名称空间,同一个包下面的类不能重名
在eclipse里可以直接new一个包出来,下面放不同的类和接口
Final
在c++中,声明常量是const 关键词
但在Java中,使用final; 当然也可以修饰类和方法
用final修饰的类表示这是最终类,不能派生子类。
Final类中的方法可以不声明成final的,但是实际上所有的方法都是隐式的final;而final修饰的方法不一定必须在final类中,final的方法不能被子类重写
用final修饰的方法既不能被覆盖,也不能被重载
Abstract and final是不能同时修饰一个类的
但是非final类生成的final对象可以改变非final的变量,比如public class A{};
Final A a = new A(); A b = new A(); 也可以调用非final的方法
a=b这是不行的,但是a.vir = b.vir是可以的
final的常量一经赋值不能改变,但是不一定非得声明时赋值,声明和赋值分开叫做blank final variable,必须要在使用前设定值,必须在每一个构造函数中用构造器初始化,好处是可以实现依据对象而变化,但对每个对象而言又是常量。
例如 final int a ;
构造函数(int x){a = x;}
static
程序运行时占用的内存有:
代码区 存放代码的区域
数据区 存放全局数据和静态数据
堆区 存放动态申请的区域
栈区 存放局部数据和参数
什么情况下用静态数据呢?
希望不论有多少对象有没有对象,这些数据的存储都只有一份
或者希望这是不和对象相关的量(实例变量,不用static的变量)而是作为类的变量(静态变量)
调用的方式就是类名|变量名.静态的成员或方法
只有一份,类与各个对象共享
注意static方法中不能处理非static的域或方法,也不能用this 和super因为非static方法得首先属于一个对象,
Static方法独立于所有对象,所以必须被实现,不能是abstract的。
Static代码块,也就是在类中任何位置有个static{},里面的内容就是static代码块,这个块只被执行一次,在类被加载的时候,所以你会发现这比构造函数还要优先实现。通常情况下static代码块会用于初始化静态变量,比如
Class A{
Static int a ;
Static{A.a = 5; System.out.println(a);}
}//这里无论是a=5还是A.a=5都是可以的
Static和final一起修饰的时候,就变成全局常量了