zoukankan      html  css  js  c++  java
  • 第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
    ",name1);
     9     printf("%s
    ",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
    ",p1.name);
    13     printf("%s
    ",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
    ",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 

  • 相关阅读:
    List<string>里的集合和字符串互转
    黑马程序员学习9
    黑马程序员学习7
    黑马程序员学习11
    黑马程序员学习10
    黑马程序员学习8
    黑马程序员学习12
    为什么Huffman编码不会发生冲突
    mule esb 配置maven 何苦
    php实现kafka功能开发 何苦
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/10853257.html
Copyright © 2011-2022 走看看