第2课第1节_Java面向对象编程_类的引入_P【学习笔记】
摘要:韦东山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
觉得不错,就给我点小支持吧,蟹蟹