摘要:韦东山android视频学习笔记
1. 面向对象编程的引入,我们先写一个简单的程序输出张三,李四的名字。代码如下,假如,现在我们要在名字前面添加籍贯广东,那样岂不是每个printf语句都得修改添加上"广东",对于数量少还是比较方便,数量多还是很麻烦的。
1 #include <stdio.h>
2
3 int main(void)
4 {
5 char *name1 = "zhangsan";
6 char *name2 = "lisi";
7
8 printf("%s\r\n",name1);
9 printf("%s\r\n",name2);
10
11 return 0;
12
2.针对上述程序,我们先引入一个persion结构体。
1 #include <stdio.h>
2
3 struct persion{
4 char *name;
5 };
6
7 int main(void)
8 {
9 struct persion p1 = {"zhangsan"};
10 struct persion p2 = {"lisi"};
11
12 printf("%s\r\n",p1.name);
13 printf("%s\r\n",p2.name);
14
15 return 0;
16
3 在上述的代码基础上,我们在persion结构体加入一个打印名字的函数指针。如下是最终版,这样的话,我们想调整输出的名字,要加上或去掉广东都很方便,只要在
printname函数里操作就可以了。
1 #include <stdio.h>
2
3 struct persion{
4 char *name;
5 void (*printname)(struct persion *per);
6 };
7
8 void printname(struct persion *per)
9 {
10 printf("guangdong %s\n",per->name);
11 }
12
13
14 int main(void)
15 {
16 struct persion p1 = {"zhangsan",printname};
17 struct persion p2 = {"lisi",printname};
18
19 p1.printname(&p1);
20 p2.printname(&p2);
21
22 return 0;
23
编译运行,结果如下图:
4.在java中我们写出同样的程序,输出张三、李四两个人的姓名
1 class Persion {
2 String name;
3 String getName(){
4 return "guangdong " + name;
5 }
6 }
7
8 public class Oop{
9 public static void main(String args[]){
10 Persion p1 = new Persion();
11 p1.name = "zhangsan";
12
13 Persion p2 = new Persion();
14 p2.name = "lisi";
15
16 System.out.println(p1.getName());
17 System.out.println(p2.getName());
18 }
19
5 在4代码的基础上我们,添加构造函数,在定义对象的时候就把名字传递过去,构造函数的名字跟类名一样,在构造这个对象的时候就会自动执行这个构造方法。
1 class Persion {
2 String name;
3 String getName(){
4 return "guangdong " + name;
5 }
6
7 public Persion(String n){
8 name = n;
9 }
10 }
11
12 public class Oop2{
13 public static void main(String args[]){
14 Persion p1 = new Persion("zhangsan");
15
16 Persion p2 = new Persion("lisi");
17
18 System.out.println(p1.getName());
19 System.out.println(p2.getName());
20 }
21
编译运行结果如下:
6 在5代码的基础上,进行构造函数的重载,同时引入this,如果在一个类里面,类的属性与函数的参数名同名,我们加上this修饰表示是当前对象的属性。
1 class Persion {
2 String name;
3 int age;
4 String getName(){
5 return "guangdong " + name;
6 }
7
8 public Persion(){
9 name = "null";
10 age = 0;
11 }
12
13 public Persion(String name){
14 this.name = name; // this.name表示是当前对象属性的name不是函数参数的name
15 }
16
17 public Persion(String name,int age){
18 this.name = name;
19 this.age = age;
20 }
21 }
22
23 public class Oop3{
24 public static void main(String args[]){
25 Persion p1 = new Persion("zhangsan");
26 Persion p2 = new Persion("lisi");
27 Persion p3 = new Persion();
28 Persion p4 = new Persion("wangwu",6);
29
30 System.out.println(p1.getName());
31 System.out.println(p2.getName());
32 System.out.println(p3.getName());
33 System.out.println(p4.getName());
34 }
35
编译运行结果如下:
7 在6代码的基础上,我们添加类方法printPerson,那样我们不需要定义具体的类对象我们就可以直接用这个方法,同时我们添加一个类属性count,用来统计人数的多少。
1 class Persion {
2 static int count;
3 String name;
4 int age;
5 String getName(){
6 return "guangdong " + name;
7 }
8
9 public Persion(){
10 count ++;
11 name = "null";
12 age = 0;
13 }
14
15 public Persion(String name){
16 count ++;
17 this.name = name;
18 }
19
20 public Persion(String name,int age){
21 count ++;
22 this.name = name;
23 this.age = age;
24 }
25
26 static void printPersion(){
27 System.out.println("This is a class of Persion");
28 }
29 }
30
31 public class Oop4{
32 public static void main(String args[]){
33 Persion p1 = new Persion("zhangsan");
34 Persion p2 = new Persion("lisi");
35 Persion p3 = new Persion();
36 Persion p4 = new Persion("wangwu",6);
37
38 System.out.println(p1.getName());
39 System.out.println(p2.getName());
40 System.out.println(p3.getName());
41 System.out.println(p4.getName());
42
43 Persion.printPersion();
44 System.out.println(Persion.count);
45 }
46
编译运行结果如下:
8.在7代码的基础上,我们引入构造代码块, 每实例化一个对象前,都执行;先于构造方法执行。7的例子中我们要在每个构造函数进行count ++,有了构造代码块我们只需要在构造代码块写一次就够了。同时引入静态构造代码块,实例化第一个对象前,执行;只执行一次。
1 class Persion {
2 static int count;
3 String name;
4 int age;
5 String getName(){
6 return "guangdong " + name;
7 }
8
9 static {
10 System.out.println("static block");
11 }
12
13 {
14 count ++;
15 System.out.println("construct block");
16 }
17
18 public Persion(){
19 System.out.println("construct method:Persion 1");
20 name = "null";
21 age = 0;
22 }
23
24 public Persion(String name){
25 System.out.println("construct method:Persion 2");
26 this.name = name;
27 }
28
29 public Persion(String name,int age){
30 System.out.println("construct method:Persion 3");
31 this.name = name;
32 this.age = age;
33 }
34
35 static void printPersion(){
36 System.out.println("This is a class of Persion");
37 }
38 }
39
40 public class Oop5{
41 public static void main(String args[]){
42 Persion p1 = new Persion("zhangsan");
43 Persion p2 = new Persion("lisi");
44 Persion p3 = new Persion();
45 Persion p4 = new Persion("wangwu",6);
46
47 System.out.println(p1.getName());
48 System.out.println(p2.getName());
49 System.out.println(p3.getName());
50 System.out.println(p4.getName());
51
52 Persion.printPersion();
53 System.out.println(Persion.count);
54 }
55
编译运行,结果如下:
相关代码存放在github,可以下载https://github.com/zzb2760715357/100ask