第2课第1节_Java面向对象编程_类的引入_P

 

1. 面向对象编程的引入,我们先写一个简单的程序输出张三,李四的名字。代码如下,假如,现在我们要在名字前面添加籍贯广东,那样岂不是每个printf语句都得修改添加上"广东",对于数量少还是比较方便,数量多还是很麻烦的。

#include <stdio.h>

int main(void)
{
    char *name1 = "zhangsan";
    char *name2 = "lisi";

    printf("%s\r\n",name1);
    printf("%s\r\n",name2);

    return 0;
}

2.针对上述程序,我们先引入一个persion结构体。

#include <stdio.h>

struct persion{
    char *name;
};

int main(void)
{
    struct persion p1 = {"zhangsan"};
    struct persion p2 = {"lisi"};

    printf("%s\r\n",p1.name);
    printf("%s\r\n",p2.name);

    return 0;
}

3 在上述的代码基础上,我们在persion结构体加入一个打印名字的函数指针。如下是最终版,这样的话,我们想调整输出的名字,要加上或去掉广东都很方便,只要在

printname函数里操作就可以了。
#include <stdio.h>

struct persion{
    char *name;
    void (*printname)(struct persion *per);
};

void printname(struct persion *per)
{
    printf("guangdong %s\n",per->name);
}


int main(void)
{
    struct persion p1 = {"zhangsan",printname};
    struct persion p2 = {"lisi",printname};

    p1.printname(&p1);
    p2.printname(&p2);

    return 0;
}

编译运行,结果如下图:

4.在java中我们写出同样的程序,输出张三、李四两个人的姓名


//1. class定义
class Persion {
    String name;
    String getName(){
        return "guangdong " + name;
    }
}

public class Oop{
    public static void main(String args[]){
        Persion p1 = new Persion();//2. 创建对象
        p1.name = "zhangsan";

        Persion p2 = new Persion();
        p2.name = "lisi";

        System.out.println(p1.getName());
        System.out.println(p2.getName());
    }
}

5 在4代码的基础上我们,添加构造函数,在定义对象的时候就把名字传递过去,构造函数的名字跟类名一样,在构造这个对象的时候就会自动执行这个构造方法。

class Persion {
    String name;
    String getName(){
        return "guangdong " + name;
    }

    public Persion(String n){
        name = n;
    }
}

public class Oop2{
    public static void main(String args[]){
        Persion p1 = new Persion("zhangsan");

        Persion p2 = new Persion("lisi");

        System.out.println(p1.getName());
        System.out.println(p2.getName());
    }
}

编译运行结果如下:

在5代码的基础上,进行构造函数的重载,同时引入this,如果在一个类里面,类的属性与函数的参数名同名,我们加上this修饰表示是当前对象的属性。

class Persion {
    String name;
    int age;
    String getName(){
        return "guangdong " + name;
    }

    public Persion(){
        name = "null";
        age = 0;
    }

    public Persion(String name){
        this.name = name; // this.name表示是当前对象属性的name不是函数参数的name
    }

    public Persion(String name,int age){
        this.name = name;
        this.age = age;
    }
}

public class Oop3{
    public static void main(String args[]){
        Persion p1 = new Persion("zhangsan");
        Persion p2 = new Persion("lisi");
        Persion p3 = new Persion();
        Persion p4 = new Persion("wangwu",6);

        System.out.println(p1.getName());
        System.out.println(p2.getName());
        System.out.println(p3.getName());
        System.out.println(p4.getName());
    }
}

编译运行结果如下:

7 在6代码的基础上,我们添加类方法printPerson,那样我们不需要定义具体的类对象我们就可以直接用这个方法,同时我们添加一个类属性count,用来统计人数的多少。

static关键字

类属性

类方法

代码块

普通代码块

方法的{}就是普通代码块

构造代码块

class Person {
    {
        // 构造块
 
        // 每实例化一个对象前,都执行;先于构造方法执行
    }
 
}

静态代码块

class Person { 
    static {
 
        // 静态块
 
        // 实例化第一个对象前,执行;只执行一次
 
    }
}

 

class Persion {
     /* 类属性:加了static关键字的在java里面叫“类属性” */
    /* count 在构造函数里面可以用来表示总人数的多少,
       加了static表示这个类本身的属性,不属于某个实例 */
    static int count;
    String name;
    int age;
    String getName(){
        return "guangdong " + name;
    }
    /* 构造方法:构造这个对象的时候,系统会来自动执行这个函数 */
    public Persion(){
        count ++;
        name = "null";
        age = 0;
    }
    /* this表示当前对象或当前类,没有用this指示即就近原则 */
    /* 名字一样的情况不使用 this 就无法区分哪个是这个类的,哪个是形参的 */
    public Persion(String name){
        count ++;
        this.name = name;
    }
    /* 重载构造方法 */
    /* Construct method */
    /* 构造方法:构造这个对象的时候,系统会来自动执行这个同名方法 */
    public Persion(String name,int age){
        count ++;
        this.name = name;
        this.age = age;
    }
     /* 加了static即“类方法”,它不需要new,不需要具体的对象实例化 */
    static void printPersion(){
        System.out.println("This is a class of Persion");
    }
}

/* public:公共类,在同一个文件里面只能有一个public class,其它class不能加 */
public class Oop4{
    public static void main(String args[]){
        Persion p1 = new Persion("zhangsan");
        Persion p2 = new Persion("lisi");
        Persion p3 = new Persion();
        Persion p4 = new Persion("wangwu",6);

        System.out.println(p1.getName());
        System.out.println(p2.getName());
        System.out.println(p3.getName());
        System.out.println(p4.getName());

        Persion.printPersion();
        System.out.println(Persion.count);
    }
}

编译运行结果如下:

8.在7代码的基础上,我们引入构造代码块, 每实例化一个对象前,都执行;先于构造方法执行。7的例子中我们要在每个构造函数进行count ++,有了构造代码块我们只需要在构造代码块写一次就够了。同时引入静态构造代码块,实例化第一个对象前,执行;只执行一次。

class Persion {
    static int count;
    String name;
    int age;
    String getName(){
        return "guangdong " + name;
    }
    // 静态块
// 实例化第一个对象前,执行;只执行一次
    static {
        System.out.println("static block");
    }
    
//构造块
    {
        count ++;
        System.out.println("construct block");
    }

    public Persion(){
        System.out.println("construct method:Persion 1");
        name = "null";
        age = 0;
    }

    public Persion(String name){
        System.out.println("construct method:Persion 2");
        this.name = name;
    }

    public Persion(String name,int age){
        System.out.println("construct method:Persion 3");
        this.name = name;
        this.age = age;
    }

    static void printPersion(){
        System.out.println("This is a class of Persion");
    }
}

public class Oop5{
    public static void main(String args[]){
        Persion p1 = new Persion("zhangsan");
        Persion p2 = new Persion("lisi");
        Persion p3 = new Persion();
        Persion p4 = new Persion("wangwu",6);

        System.out.println(p1.getName());
        System.out.println(p2.getName());
        System.out.println(p3.getName());
        System.out.println(p4.getName());

        Persion.printPersion();
        System.out.println(Persion.count);
    }
}

编译运行,结果如下:

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本火锅店点餐系统采用Java语言和Vue技术,框架采用SSM,搭配Mysql数据库,运行在Idea里,采用小程序模式。本火锅店点餐系统提供管理员、用户两种角色的服务。总的功能包括菜品的查询、菜品的购买、餐桌预定和订单管理。本系统可以帮助管理员更新菜品信息和管理订单信息,帮助用户实现在线的点餐方式,并可以实现餐桌预定。本系统采用成熟技术开发可以完成点餐管理的相关工作。 本系统的功能围绕用户、管理员两种权限设计。根据不同权限的不同需求设计出更符合用户要求的功能。本系统中管理员主要负责审核管理用户,发布分享新的菜品,审核用户的订餐信息和餐桌预定信息等,用户可以对需要的菜品进行购买、预定餐桌等。用户可以管理个人资料、查询菜品、在线点餐和预定餐桌、管理订单等,用户的个人资料是由管理员添加用户资料时产生,用户的订单内容由用户在购买菜品时产生,用户预定信息由用户在预定餐桌操作时产生。 本系统的功能设计为管理员、用户两部分。管理员为菜品管理、菜品分管理、用户管理、订单管理等,用户的功能为查询菜品,在线点餐、预定餐桌、管理个人信息等。 管理员负责用户信息的删除和管理,用户的姓名和手机号都可以由管理员在此功能里看到。管理员可以对菜品的信息进行管理、审核。本功能可以实现菜品的定时更新和审核管理。本功能包括查询餐桌,也可以发布新的餐桌信息。管理员可以查询已预定的餐桌,并进行审核。管理员可以管理公告和系统的轮播图,可以安排活动。管理员可以对个人的资料进行修改和管理,管理员还可以在本功能里修改密码。管理员可以查询用户的订单,并完成菜品的安排。 当用户登录进系统后可以修改自己的资料,可以使自己信息的保持正确性。还可以修改密码。用户可以浏览所有的菜品,可以查看详细的菜品内容,也可以进行菜品的点餐。在本功能里用户可以进行点餐。用户可以浏览没有预定出去的餐桌,选择合适的餐桌可以进行预定。用户可以管理购物车里的菜品。用户可以管理自己的订单,在订单管理界面里也可以进行查询操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值