代码改变世界

【连载】corejava 第六天(今天你java了嘛?)

2014-04-06 15:07  Nicole丶  阅读(134)  评论(0编辑  收藏  举报
01 package day06;
02  
03 public class Corejava06 {
04                 public static void main(String[] args) {
05                         //2句话和大家分享
06                         // 1 方法动态绑定到对象上
07                         // 2 属性静态绑定到类型上
08                          
09                         //可能有点绕  接下来看下面几个例子,希望对你有帮助
10                          
11                         //People ygh=new Ygh();//这里报了个错,为什么呢?因为你Ygh是Corejava06
12                         //里面的类,所以你要创建Ygh 必须先要有Corejava06中的实例
13                          
14                         Corejava06 c=new Corejava06();
15                         //People ygh=new c.Ygh();//这样写报错了
16                         People ygh=c.new Ygh(); //正确写法
17                          
18                         ygh.sleep();//输出什么呢?  输出: 呼呼;
19                          
20                         //虽然你ygh的类型是People,但你指向的是Ygh的实例对象
21                         //所以 你调用的是Ygh里面的sleep方法,这就是所谓的“方法动态绑定到对象上”
22                  
23                         System.out.println(ygh.a);
24                          
25                         // 输出 1 ,因为 a是属性,这正好验证了“属性静态绑定到类型上”;
26                  
27                         Teacher t=new Teacher();
28                         //当你创建一个类的子类时,他会先创建他的父类
29                         //我们一共会输出六个字母。看看他们的输出顺序 来跟踪,jvm是如何执行程序的
30                         //adbcef
31                         //翻译过来就是 先父类静态代码块  再子类静态代码块 再父类代码块 父类构造器  再子类代码库 子类构造器
32                         //这个不用死记 多用就熟了
33                          
34                 }
35                  
36                 class People{
37                         int a=1;
38                         public People(){
39                                 //这就是构造器,当你 new People()的时候就调用这里的方法
40                                 //当你没写的时候系统会自动帮你加上,但是如果你存在有参构造函数,
41                                 //那么系统就不再自动帮你加无参构造函数
42                                  
43                         }
44                         public People(String name){
45                                 //有参构造器
46                                 // 为什么要有参构造器呢 有什么用呢?
47                                 //如果说你要创造一个人,那么你首先要给这个人起个名字吧
48                                  
49                                 //没错  new People() 就是创造一个人,你想再创造这个人的时候顺便给他起个名字,那么就用它的有参构造器 new People(name)
50                         }
51                         public void sleep(){
52                                 System.out.println("~~~");
53                         }
54                         //static {//这里报了一个错,报错原因是 内部类不能创建静态代码块,以前我都没意识到这点  大家一起学习 一起进步 呵呵
55                         //那么我就在Corejava外面再创建个类
56                         //   System.out.println("");
57                         //}
58                 }
59                 class Ygh extends People{
60                         int a=2;
61                         public void sleep(){
62                                 System.out.println("呼呼");
63                         }
64                 }       
65 }
66 class Student{//已经有public class了 你就不能再public class ,同时你public class的名字要和文件名对上,
67         //比如我文件名叫Corejava.java 那么我public class只能叫Corejava,但是也可以没有public class
68         static{//这个static{}包起来的叫静态代码块,当你第一次出现这个类名的时候,确切地说,
69                 //应该是classLoader把这个类加载到内存里时,会调用一次static{}方法,其他时间都不调用
70                 System.out.println("a");
71         }
72         {//这个是代码块,当你创建这个对象的时候都会调用{}里面的方法,跟构造器差不多,但是比构造器先执行
73                 System.out.println("b");
74         }
75         public Student(){
76                 System.out.println("c");
77         }
78 }
79 class Teacher extends Student {//为什么要老师继承学生呢,因为是先有学生才有老师的是吧,一点都不错
80         static{
81                 System.out.println("d");
82         }
83         {
84                 System.out.println("e");
85         }
86         public Teacher(){
87                 System.out.println("f");
88         }
89 }