java修饰符1

来源:互联网 发布:软件测试有哪些行业 编辑:程序博客网 时间:2024/06/06 03:54

原-孙卫琴《JAVA面向对象编程》读书笔记-修饰符

(2007-09-09 16:38:47)
转载
标签:

读书笔记

面向对象编程

孙卫琴

修饰符

 
java语言采用访问权限控制修饰符来控制类及类的方法和变量的访问权限,从而只向使用者暴露接口,但隐藏实现细节。访问控制分4种级别:(仅仅适用于类及类的成员,不适用于局部变量,局部变量只能在方法内部被访问,不能用public,protected,private来修饰)
公开:public,对外公开。
受保护:protected,向子类及同一个包中的类公开。
默认:没有修饰符,向同一个包中的类公开。
私有:private,只有类本身可以访问,不对外公开。
成员变量,成员方法和构造方法可以处于4个访问级别中的一个。
顶层类(非内部类)只可以处于 公开 或 默认的访问级别。不能用protected和private来修饰。
(修饰顶层类的修饰符包括abstract,public和final,而static,protected和private不能修饰顶层类;成员方法和成员变量可以有多种修饰符,而局部变量只能用final修饰。)
abstract修饰符:
可用于修饰类和成员方法。
抽象类不能被实例化。
抽象方法没有方法体。抽象方法用来描述系统具有什么功能,但是不提供具体实现。
它的语法规则如下:
抽象类可以没有抽象方法。但是包含了抽象方法的类一定是抽象类。(即抽象方法必须是在抽象类中定义。)
没有抽象构造方法,也没有抽象静态方法。
抽象类及抽象方法不能被final,static,private修饰符修饰。(原因:static方法必须被实现,abstract方法没有方法体,矛盾;final修饰的类不能被继承,没有子类,而抽象类必须是被继承实现的;.....)


final修饰符:
final具有“不可改变”的含义,它可以修饰非抽象类,非抽象成员方法和变量,。
用final修饰的类不能被继承,没有子类。
用final修饰的方法不能被子类的方法覆盖。
用final修饰的变量表示常量,只能赋一次值。
不能用来修饰构造方法。
final修饰的变量必须显式的初始化。(对于final类型的实例变量,可以在定义变量时,或在构造方法中进行初始化;对于final类型的静态变量,可以在定义变量时,或在静态代码块中初始化。)
示例:
//final类型的静态变量的初始化;
public class Sample{
static final int a=1;//定义变量时初始化;
static final int b; //静态代码块中初始化;
static{
b=1;
}
//final类型的实例变量的初始化;
final int d=2; //定义变量时初始化;
final int c;//构造方法中初始化;
Sample(int x){ c=x; }
}

static修饰符
可以修饰类的成员变量,成员方法和代码块。
用static修饰的成员变量表示静态变量,可以直接通过类名来访问。
用static修饰的成员方法表示静态方法,可以直接通过类名来访问。
用static修饰的程序代码块表示静态代码块,当java虚拟机加载该类时,就会执行该代码块。且只执行一次。
注:被static所修饰的成员变量和成员方法表明被某个类所有,它不依赖于类的特定实例,被类的所有实例所共享。只要这个类被加载,java虚拟机就能根据类名在运行时数据区的方法区找到它们。

类的成员变量分2种:
被static修饰的类的成员变量,叫类变量(静态变量);
另一种没有被static修饰的变量,叫实例变量。
类变量(静态变量)和实例变量的区别:
静态变量在内存中只有一个拷贝。可以直接通过类名来访问。
实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响。


static方法
因为静态方法不需要通过它所属的类的任何实例就会被调用,因此在静态方法中不能使用this,super关键字;不能直接访问所属类的实例变量和实例方法,但是可以直接访问所属类的静态变量和静态方法;
静态方法用来表示某个类所特有的功能,这种功能的实现不依赖于类的具体实例,也不依赖于它的子类。因此静态方法必须被实现。
作为程序入口的main()方法是静态方法(因此也符合上述要求)。原因:只要java虚拟机加载了main()所属的类,就能执行main()方法,而无需先创建这个类的实例。

static代码块
不存在于任何方法体中,java虚拟机在加载类时,会依顺序,首先执行这些代码块。且只执行一次。
通常,类的静态代码块用于初始化类,给类的静态变量赋初始值,而类的构造方法用于初始化类的实例;


静态代码块和静态方法一样,也不能直接访问类的实例变量和实例方法。而必须通过实例的引用来访问它们。

备注:使用多个修饰符,顺序可以颠倒,但是作为规范,通常是

访问控制修饰符-->static/abstract-->其它。

原创粉丝点击