JAVA主要修饰符总结

上传人:飞*** 文档编号:50965238 上传时间:2018-08-11 格式:PDF 页数:19 大小:173.29KB
返回 下载 相关 举报
JAVA主要修饰符总结_第1页
第1页 / 共19页
JAVA主要修饰符总结_第2页
第2页 / 共19页
JAVA主要修饰符总结_第3页
第3页 / 共19页
JAVA主要修饰符总结_第4页
第4页 / 共19页
JAVA主要修饰符总结_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《JAVA主要修饰符总结》由会员分享,可在线阅读,更多相关《JAVA主要修饰符总结(19页珍藏版)》请在金锄头文库上搜索。

1、武汉理工大学计算机学院软件 1002 班蒋韬JAVA 主要修饰符总结修饰符是用于限定类型以及类型成员的申明的一种符号。我们此次主 要讨论 JAVA 的访问修饰符。常见的访问修饰符有: public:访问不受限制。 protected:访问仅限于包含类或从包含类派生的类型。只有包含该成员 的类以及继承的类可以存取. protected internal :访问仅限于当前程序集或从包含类派生的类型。 private:访问仅限于包含类型。只有包含该成员的类可以存取. 下面为了更直观的看出他们之间的区别,列出下表:修饰符作用可以加些哪些前面public 类前:表示类名和文件名 相同,一个.java 中

2、只能有 一个 public 类 属性和方法前:所有的外 部类都可以直接访问这 些属性和方法 所有的子类都会继承这 些属性和方法属性前,方法前,类前private 类前:内部类 属性和方法前:所有的外 部类都不能直接访问这 些属性和方法 子类也不可以进行继承属性前,方法前,类前 (只 在内部类中)protected 属性和方法前: 同一包内的类可以访问 这些属性和方法 或者是有继承关系的子 类可以访问这些属性和 方法 子类可以继承属性前,方法前,绝对不 能加在类前面(default) 属性和方法: 只在同一个包内可以见 不在同一个包内的子类 是不可见的属性前,方法前,类前static 方法和属性

3、前: 跟着类不跟着对象,只有 一份 访问方式:方法和属性前面 *代码段前面可以通过类名 .属性名 /类 名.方法名访问 -推荐 通过对象去访问也不错 静态方法中只能访问静 态变量 非静态方法中,两者都可 以 静态方法不存在重写,即 使父类和子类中的两个 静态方法形式完全一样, 也是两个不能互相覆盖 的版本 代码段: 初始化的时候,静态代码 段会被执行 如果不初始化,也执行了 第一次使用到这个类的 时候被执行 ,只执行一次 一定在构造方法之前执 行 在 static 代码段中,可以 访问 static 的属性 ,前提是 属性在这段代码段之前 声明 final Final 在变量前代表这个 变量是

4、不能修改的常量 在类前面,代表这个类不 能被继承 在方法前 ,代表这个方法 不 能 被 重 写 ( 覆 盖 , Override) 参数传递,以 String 为代 表的 final 类, 其传递同基 本类型成员变量前 局部变量前 修饰类 修饰方法abstract Abstract 加在方法前,代 表这个方法是抽象方法, 抽象方法没有方法体,方 法声明完后加 ”; ”结束 抽象方法必须要放在抽 象类中 Abstract 加在类前面,代 表这个类是抽象类,抽象 类就是永远不能进行new 的类方法前,一个是类前,不 能加到属性前面抽象类中不一定要有抽 象方法 *private /编译出错, sta

5、tic和 abstract修饰符不能 连用 static void method2() . / 合法,抽象类中可以有静态方法 (3)抽象类中可以有非抽象的构造方法,创建子类的实例时可能会调用这 些构造方法。 抽象类不能被实例化, 然而可以创建一个引用变量,其类型是一个 抽象类,并让它引用非抽象的子类的一个实例。 (4)抽象类及抽象方法不能被final 修饰符修饰。即, abstract与 final 不能 连用。这是因为 abstract与 final 的作用是恰恰相反的,如:抽象类只允许创建其 子类,而 final 修饰的类不允许拥有子类;抽象方法必须被子类的具体方法来实 现,而 final

6、 修饰的方法不允许被子类方法覆盖。注:为什么抽象类不允许被实例化? 在语义上,抽象类表示从一些具体类中抽象出来的类型。从具体类到抽象类,这是一种更高层次的抽象。如:苹果类、香蕉类和桔子类是具体类,而 水果类则是抽象类, 在自然界并不存在水果类本身的实例,而只存在它的具体子 类的实例。 Fruit fruit = new Apple(); / 创建一个苹果对象,把它看做是水果对象 在语法上,抽象类中可以包含抽象方法,如果抽象类可以实例化,那么在 访问抽象方法时将无法执行, 因为抽象方法中根本就没有方法体。 由此可见,Java 编译器不允许创建抽象类的实例是必要的。 abstract class

7、Base public void method1() . / 具体方法 public abstract void method2(); /抽象方法 Base base = new Base(); / 假定 Java编译器没有报错 base.method1(); base.method1(); / 运行时 Java虚拟机无法执行这个方法 static 有时你希望定义一个类成员, 使它的使用完全独立于该类的任何对象。通常 情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能 够被它自己使用,而不必引用特定的实例。 在成员的声明前面加上关键字static(静 态的)就能创建这样的成

8、员。如果一个成员被声明为static,它就能够在它的类的 任何对象创建之前被访问, 而不必引用任何对象。 你可以将方法和变量都声明为 static。static 成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用 main() ,所以它被声明为static。 声明为 static的变量实质上就是全局变量。 当声明一个对象时,并不产生 static 变量的拷贝,而是该类所有的实例变量共用同一个static 变量。 声明为 static 的方法有以下几条限制: 它们仅能调用其他的static 方法。 它们只能访问 static 数据。 它们不能以任何方式引用this 或 super

9、 (关键字 super 与继承有关, 在下 一章中描述)。 如果你需要通过计算来初始化你的static 变量,你可以声明一个static 块, Static 块仅在该类被加载时执行一次。下面的例子显示的类有一个static 方法, 一些 static 变量,以及一个 static 初始化块: / Demonstrate static variables ,methods,and blocks. class UseStatic static int a = 3; static int b; static void meth(int x) System.out.println(“x = “ + x

10、); System.out.println(“a = “ + a); System.out.println(“b = “ + b); static System.out.println(“Static block initialized.“); b = a * 4; public static void main(String args) meth(42); 一旦 UseStatic 类被装载,所有的static 语句被运行。首先, a 被设置为 3, 接着 static 块执行 (打印一条消息 ),最后, b 被初始化为a*4 或 12。然后调用 main(), main() 调用 meth

11、() , 把值 42 传递给 x。 3 个 println ( ) 语句引用两个 static 变量 a和 b,以及局部变量 x 。 注意:在一个 static 方法中引用任何实例变量都是非法的。 下面是该程序的输出: Static block initialized. x = 42 a = 3 b = 12 在定义它们的类的外面, static 方法和变量能独立于任何对象而被使用。这 样,你只要在类的名字后面加点号运算符即可。例如,如果你希望从类外面调用 一个 static 方法,你可以使用下面通用的格式: classname.method( ) 这里, classname 是类的名字,在该

12、类中定义static 方法。可以看到,这种 格式与通过对象引用变量调用非static 方法的格式类似。一个static 变量可以以 同样的格式来访问 类名加点号运算符。这就是Java 如何实现全局功能和全 局变量的一个控制版本。 下面是一个例子。在main() 中,static方法 callme() 和 static 变量 b 在它们 的类之外被访问。 class StaticDemo static int a = 42; static int b = 99; static void callme() System.out.println(“a = “ + a); class StaticBy

13、Name public static void main(String args) StaticDemo.callme(); System.out.println(“b = “ + StaticDemo.b); 下面是该程序的输出:a = 42 b = 99 static成员是不能被其所在class创建的实例访问的。 通常,在创建类的实例时, 每个实例都会创建自己实例变量。但是在变量的声明 中可以使用 Static 修饰符,它表明该成员变量属于类本身,独立于类产生的任何 对象。这种成员变量称为静态变量 (静态属性) 。方法的声明中也可以使用static 修饰符,表明该方法从属于类本身。 静态属

14、性和静态方法不需要创建实例就可以使用。典型的例子是 java.lang包中的 System类中的方法和变量。我们常用System.out.println(“message”);输出信息,并没有创建 System的实例,是因为 println 方法声明为 System类的 静态方法,它不需创建实例就可以使用。下面的例子会帮助你更深刻的理解Static修饰符。 注意各个代码块的加载次序。class Sample static int s1=3; static int s2; static void display() System.out.println(“s1=“+s1); System.out

15、.println(“s2=“+s2); static System.out.println(“static block“); s2=s1+1; public static void main(String args) Sample.display(); 一旦这个类被调用, 所有的静态变量都被初始化, s1被赋为 3,然后运行 static 块,这将打印出一段消息,并且把s2赋为 s1+1,即 4。然后解释器调用 main 成 员函数,它调用了成员函数display, 该函数输出 s1和 s2的信息。 运行结果如下:C:java Sample static block s1=3 s2=4 通过上

16、面的例子还可以看出, 一个静态成员函数可以通过它所属的类名来调用。注意: 在静态成员函数中只能直接调用其它的静态成员函数或引用静态属性,否则会造 成编译错误。静态成员函数中也不能使用this 或者 super ,因为它们是和类的对 象相关联的。abstract 修饰符表示所修饰的类没有完全实现,还不能实例化。如果在类的方法 声明中使用 abstract修饰符,表明该方法是一个抽象方法,它需要在子类实现。在下面的情况下,类必须是抽象类:1.类中包含一个明确声明的抽象方法; 2.类的任何一个父类包含一个没有实现的抽象方法; 3.类的直接父接口声明或者继承了一个抽象方法,并且该类没有声明或者实现 该抽象方法。如下例所示:abstract class A1 public int v1; abstract void test(); abstract cla

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号