摘要:
抽象类abstract class 包含抽象方法的类,叫抽象类。而抽象的概念就是抽象出共同属性:成员变量和方法。所以抽象类可以有private等多种权限的成员变量和非abstract的成员方法。当然抽象方法是一定要有的。 抽象类是用于单一继承的,不能实例化。而继承类一定要实现抽象方法,因为抽象方法在抽象类里是没有实现行为的,访问权限只能是public。而非抽象方法则可以赋予方法的默认行为,访问权限可以多种,但需要考虑非抽象方法是否需要被继承类访问。接口 interface 接口,用于多重继承,也不能实例化。只能包含static final的成员变量,不过在interface中一般不定义成... 阅读全文
摘要:
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。 被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区或者方法区内找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。 用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量。 sta... 阅读全文
摘要:
根据上下文环境,java的关键字final也存在着细微的区别,但通常指的是“这是无法改变的。”不想改变的理由有两种:一种是效率,另一种是设计。由于两个原因相差很远,所以关键子final可能被误用。 接下来介绍一下使用到final的三中情况:数据,方法,类final数据 许多编程语言都有某种方法,来向编译器告知一块数据是恒定不变的。有时数据的恒定不变是很有用的,例如:一个编译时恒定不变的常量一个在运行时初始化,而你不希望它被改变。 对于编译期常量的这种情况,编译器可以将该常量值代入任何可能用到它的计算式中,也就是说,可以在编译期就执行计算式,这减轻了一些运行时的负担。在java中,这类... 阅读全文
摘要:
编译器常量的特点就是:它的值在编译期就可以确定。比如: finalinti=5; 再傻的编译器也能在编译时看出它的值是5,不需要到运行时。对于运行时常量,它的值虽然在运行时初始化后不再发生变化,但问题就在于它的初始值要到运行时才能确定。 比如: Random rand = new Random(47); final int i4 = rand.nextInt(20); 虽然i4的值在定义并初始化后不会再发生变化(除非你使用一些不符合标准的小技巧),但再聪明的编译器也无法在编译时确定它的值呀。 为了更清楚的理解编译器常量的概念,我们引入【常量折叠】的概念:在编译器里进行语法分析的... 阅读全文
摘要:
对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序以此是(静态变量、静态初始化块)>(变量、初始化块)>构造器。我们也可以通过下面的测试代码来验证这一点:package InitialOrder;/** * JAVA 初始化顺序 * @author Administrator * 初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)> 构造器。 */public class InitialOrderTest { // 静态变量 public static String staticField = "静态变量"; // 变量 阅读全文