【连载】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 |
} |