一个Java文件中可以包含多个类。

如果有public类,则文件名必须和public类一样。

例如:

 1 class Pie {
 2    void f(){
 3        System.out.println("Pie.f()");
 4    }
 5 }
 6 
 7 class Cake {
 8    public static void main(String[] args){
 9        Pie x = new Pie();
10        x.f();
11    }
12 }
13 
14 class Cake1 {
15        public static void main(String[] args){
16            Pie x = new Pie();
17            x.f();
18        }
19     }

该文件名可以是Cake2.java或者其它。但如果该文件中有public 类,则文件名必须和public 类名一样。

上述文件编译产生如下的文件:

Java学习注意事项

编译和运行命令如下:

Java学习注意事项

 

1 关于类的访问权限控制:public 或者什么都不写(包访问权限,其它包的类不能访问该类)。

2 方法和字段的访问权限顺序从大到小:Public,  protected,  默认(包访问权限),  private。

2.1 protected 修饰的成员,如果其它package中的类继承了该类,就可以访问该成员。比默认的权限高。

 

3 使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。

4 由于final变量和static变量可以说都只能存一个数据,他们惟一的区别是static变量是属于类的,是类变量,只会被加载一次。

5 final和abstract 修饰的类,第一个不能继承,第二个继承必须实现存在的abstract方法。

6 abstract方法所在的类必须用abstract修饰。abstract修饰的类不能实例化,可以不存在抽象方法。

 

 

关于final

使用final的原因有两个。效率/设计。早期的编译器会针对final方法,进行特殊的优化。但是现在的编译器不推荐用户使用final关键字,

编译器和JVM会去处理相关的效率问题。

特别的,final方法不能被覆盖。因为private方法是不能够继承的,所以private 方法隐式的是final的。

"覆盖"只有在某方法是基类的接口的一部分时才会出现。如果某方法为private,它就不是基类的接口的一部分。

由于private方法无法触及而且能有效的隐藏,所以除了把它看成是因为它所属的类的组织结构的原因而存在外,其他任何事物都不需要考虑到它。

 

继承的初始化顺序

 

 1 package reusing;
 2 class Insect{
 3     private int i = 9;
 4     protected int j;
 5     public Insect() {
 6         System.out.println("i = " + i + ", j = " + j);
 7         j = 39;
 8     }
 9     private static int x1 = printInit("static Insect x1.initalized");
10     static int printInit(String s){
11         System.out.println(s);
12         return 47;
13     }
14 }
15 public class Beetle extends Insect{
16     private int k = printInit("Beetle.k initalized");
17     public Beetle(){
18         System.out.println("k = " + k);
19         System.out.println("j = " + j);
20     }
21     private static int x2 = printInit("static Beetle x2.initalized");
22     public static void main(String[] args){
23         System.out.println("Bettle Constructor");
24         Beetle b = new Beetle();
25     }
26 
27     /*
28      * static Insect x1.initalized
29      * static Beetle x2.initalized
30      * Bettle Constructor
31      * i = 9, j = 0
32      * Beetle.k initalized
33      * k = 47
34      * j = 39
35      * 
36      */
37 }
继承初始化顺序

相关文章: