- 考点01 修饰符基础
- 规则01:Java语言共提供了10种修饰符,分别为public(公共的)、protected(受保护的)、private(私人的)、final(最后的)、abstract(抽象的)、static(静态的)、native(一个native方法是指该方法的实现由非Java语言实现,比如用C或C++实现)、transient(临时的)、synchronized(重量同步锁)和volatile(轻量同步锁)。
- 规则02:Java语言中各个修饰符所能应用的都西昂是不同的。
- 下面列出了Java修饰符即其可应用的对象(Y-Yes、N-No);
- 修饰符 类 属性 方法 构造器 代码块
- public Y Y Y Y N
- protected N Y Y Y N
- (default) Y Y Y Y Y
- private N Y Y Y N
- final Y Y Y N N
- abstract Y N Y N N
- static N Y Y N Y
- native N N Y N N
- transient N Y N N N
- synchronized N N Y N Y
- volatile N Y N N N
- 规则03:Java语言中对修饰符的出现顺序无特殊要求,即出现在同一个修饰符前的多个修饰符之间的先后顺序可任意排列。如果用于修饰方法,则必须防放置在方法返回类型前。
- 考点02 访问修饰符
- 规则01:Java语言提供了3种用来控制访问权限的访问修饰符,分别为public、protected和private。并且规定一个属性前最多只能有一个访问修饰符存在。
- 规则02:public是Java语言中对访问限制最宽的修饰符,被其修饰的类、属性、方法不仅可以跨类访问,而且允许跨包访问。
- 规则03:protected的访问范围介于public和private之间,被其修饰的类、属性、方法只能被类本身的方法及子类的方法访问,即使子类在不同的包中,也可以访问该变量。其他与声明变量的类无继承关系的类方法是不能访问该变量的。
- 规则04:private是Java语言中对访问限制最窄的修饰符,被其修饰的属性、方法只能被该类的对象访问,其子类不能访问,也更不允许跨包访问。
- 规则05:Java中除了public、protected和private修饰符外,还存在第四种修饰符,即不加任何访问关键字的默认访问模式。它只允许同包内进行访问,不同包之间不允许相互访问。
- 规则06:在Java语言中,规定一个非内部类,即顶层类的访问修饰符只能使用public,而不能把private和protected修饰符应用于顶层类。
- 规则07:一个Java Applet 被修饰为public,意为该小应用程序可以被浏览器直接实例化。
- 规则08:Java应用程序的主方法main()被public修饰,意为该方法可以被任意JVM调用,作为应用程序的执行入口。如果应用程序的main()没有被public修饰,不会产生编译错误,但该应用程序会因为JVM找不到执行入口而无法运行。
- 考点03 final
- 规则01:final关键字用于类、方法、变量前,表明该关键字修饰的对象具有不可变的特性。
- 规则02:final关键字用于基本数据类型变量前,表明该关键字修饰的变量为一个常量,其值在以后的使用中,只能被读取,而不能被改变。一个声明为final的变量就是一个常量,在使用前必须要被初始化,否则就会产生编译错误。
- 规则03:final关键字用于引用类型变量前,同final关键字修饰的基本数据类型变量一样,该变量一旦被分配给一个值就不能改变。该变量一旦引用一个对象后,也就不能再引用其他对象,不能再把其他对象句柄赋值给它。但是,可以改变一个final变量引用对象的内容。
- 规则04:final关键字用于方法声明前,该final方法的不可变特性体现在不能被子类重载,但可被过载。因为重载是对同一个方法的重新定义,而过载实质上是不同方法拥有同一个名称而已。
- 规则05:final关键字用于类名前,表明该类不能再被其他类扩展,即不能被其他类继承。因为被声明为final的类,其所有的方法都默认为final,因此无法对其进行重载,自然无法子类化。
- 考点04 abstract
- 规则01:abstract关键字只能用于修饰类和方法,不能修饰变量,因为该关键字表明的是未实现的含义,变量不存在未实现的概念。
- 规则02:一个抽象方法的定义,除了在方法前面加abstract关键字外,该方法还不能有方法体,即方法名后不能有花括号{}。注意方法体为空和无方法体是两个概念,方法体为空指方法名后存在花括号{},只是花括号{}没有内容,而无方法体是指方法名后就不存在花括号{}。
- 规则03:一个抽象类的定义是使用关键字abstract放置在表示类关键字class的前面来标识的。一般而言,一个抽象类至少定义一个抽象方法,但是并不是必须定义一个抽象方法,类体中也可以不存在抽象方法。
- 规则04:当一个类中存在一个以上的抽象方法时,该类必须声明为抽象类,否则会发生编译错误。
- 规则05:当子类继承了一个抽象类时,必须实现该抽象类中定义的全部抽象方法,否则必须被声明为抽象类。
- 规则06:当类实现了一个接口,但并没有实现该接口中的所有方法时,该类必须被声明为抽象类,否则会发生编译错误。
- 规则07:一个抽象类,由于其表明的时未完全实现的概念,因此不能被实例化。当试图调用一个抽象类的构造器来创建该类的一个实例,会产生编译错误。
- 考点05 static
- 规则01:static关键字不能用于修饰顶层类,除了可以修饰方法和变量外,还可以修饰一段代码块。该关键字所修饰对象属于类,而不属于类实例,即修饰对象附属于类本身,而不是附属于各个类实例。
- 规则02:一个声明为静态的类属性,有两种引用方式,一种时像其他非静态类属性一样通过类实例来引用,尽管符合Java语言规定不会引起编译错误,但会产生代码可读性差的问题;另一种是根据静态的意义,静态类属性不与任何类实例关联,因此可直接通过类名来引用一个静态属性。
- 规则03:一个在方法中定义的自动变量是不能被声明为静态的,因为静态修饰符static是一个与类而非类实例相关的,而方法是一个局部的,附属于类实例的函数,其生命周期不同于类实例,更不同于类。其内部变量会随着方法的退出而被撤销,因此在一个方法中声明的自动变量不能被static修饰。即方法被声明为静态,其内部自动变量也不能被声明为静态。
- 规则04:一个static修饰的静态方法,除了可以访问自己内部定义的变量外,就只能访问被static修饰的静态变量。如果需要访问非静态类的属性,必须先实例化一个类,再通过该类实例引用非静态类属性。但是,一个非静态方法可以访问一个静态变量。
- 规则05:静态方法和非静态方法的调用方式是不同的。非静态方法的调用是在运行期决定的,而静态方法的调用是在编译期决定的。一个非静态方法可以调用一个静态方法,但不允许一个静态方法直接调用非静态方法,除非通过类实例来调用。
- 规则06:一个静态方法不能被重载为一个非静态方法,只能被重载为一个静态方法,但可以被过载为一个非静态方法。重载的含义是始终只有一种定义,只是原先的含义完全被后来的而含义取代了,即形式不能变,而过载的含义是指同一样东西在不同的地方具有多种含义。
- 规则07:静态代码块不是一个方法,实际上只是一个static关键字,后跟一个方法主体。静态代码块主要用于初始化,该代码块中的代码仅执行一次,即首次装载类时被执行。
- 考点06 native
- 规则01:native关键字只能用于修饰方法而不能修饰类和变量。一个在方法名前加上修饰符native的方法为本地方法,本地方法的主要目的是利用本地资源扩展Java功能,而与Java本身的机制无关。
- 规则02:一个本地方法如同一个抽象方法,并没有实际的方法体,因为本地方法的实现不是Java语言,而是采用依赖本地平台的其他语言编写的位于Java虚拟机之外的函数库中,可以通过System.loadLibrary()方法装入。System.loadLibrary()方法通常放置在静态初始化代码中。如果本地方法没有装载成功,则UnsatisfiedLinkError异常被抛出。
- 规则03:对本地方法的调用如同调用Java中的其他方法一样,本地方法的实现对调用者是透明的。实际上,在Object类上定义的clone()和notify方法就是本地方法。
- 规则04:本地方法可以被private修饰符修饰。
- 考点07 transient
- 规则01:transient关键字只能用于修饰变量,而不能修饰类和方法。注意,本地变量是不能被transient关键字修饰的。
- 规则02:被transient关键字修饰的变量不能再被序列化,一个静态方法不管是否被transient关键字修饰,均不能被序列化。
- 规则03:一旦变量被transient关键字修饰,该变量不再是对象的持久状态的一部分,该变量内容再序列化后无法获得访问。
- 规则04:transient关键字的作用是保证变量的安全性。即使是私有变量,一经序列化处理,就可以通过读取一个文件,或者拦截网络传输得到它。
- 考点08 synchronized
- 规则01:synchronized关键字只能用于修饰方法或方法的一部分,不能用于修饰类和变量。
- 规则02:修饰符synchronized尽管可以用于修饰方法,但不能修饰构造器,由于构造器属于特殊的方法,不能被同步化。
- 规则03:synchronized关键字用于在两个线程同时试图访问某一数据时避免数据损毁。每个对象都包含了一把锁,它自动成为对象的一部分,不必为此写任何特殊的代码。调用任何被声明为同步的方法时,对象就会被锁定,不可再调用该对象上其他任何同步方法,除非第一个方法完成结束,并解除锁定。
JAVA认证考试(SCJP)笔记之第三章修饰符
最新推荐文章于 2026-01-06 12:00:34 发布
462

被折叠的 条评论
为什么被折叠?



