讲解java面向对象与static修饰符使用规则

解释面向对象与面向过程     

  java是面向对象的编程技术,正是因为这种特点因此java才能大火至今。就像组成汽车的一个个零件,我们要造一辆汽车不用去自己造发动机,造螺丝,造轮胎。只要我们符合标准,这些零件都可以买到,我们只要零件齐全,一个刚入门的修理工也能组装一辆汽车,而不是像艺术家手工打造。那么,java中的类就是组成我们工程的零件。如果某个地方出错了,我们只需要修改相应的类即可。

        举一个例子:比如我们要从一个地方到一个地方。我们要规划一下路线,选择交通工具中途可能要换乘,坐哪一辆公交车,坐到哪一站下车,下车之后再更换交通工具。我们在出发之前要做好详细的规划,有一步错了我们都无法到达目的地。也就是,我们要对这个过程十分熟悉,每一个规划都要亲力亲为。但我们如果找一个司机,那我们只要坐在车上玩手机,等着到达目的地即可。不需要我们对这个路线熟悉,我们哪怕第一次来到这个地方也能轻松到达目的地。

面向过程就是一个自顶向下、逐渐细化的过程。

而面向对象就是我们需要将问题来模拟真实世界的情况,如何模拟真实世界?我们知道世界是由物质和物质的运动组成的,那么真实世界我们要做一件事就离不开一个个实体。这个实体具有我们需要的某种功能,具有这种功能的实体,我们对他们的属性和功能进行共性抽取,这样便形成了一个类。那么我们如何去定义一个类呢?首先我们要却定一个类应具有的属性,和它具有的某种功能。

比如学生是一个类,老师是一个类,学校也是一个类。我们发现,这个类可以包含很多实体,具有相同特征的归为一类。

         也就是说,我们要做一件事,不是我们想着如何一步步讲这件事细节完善,而是找到一个或者几个具有这几种功能的实体,我们只要知道这件事 “谁”会做就OK啦。比如我们要打电话,就要只要找到手机,我们要吃一碗饭就要找一家饭馆,或者一个会做饭的人。

那我们呢在这里就看看,在java中如何定义一个类并使用这个类。

public class Restaurant {
    //属性:
    String name;
    String address;
    String type;
    
    public void cook(String food,int num){
        System.out.println("您的"+num+"份"+food+"已经做好了,请慢用!");
    }
}

public static void main(String[] args) {
        Restaurant re = new Restaurant();//创建对象
        //给属性赋值
        re.name = "幸福菜馆";
        re.address = "玉龙街338号";
        re.type = "中式简餐";
        //点菜
        re.cook("鱼香肉丝",2);

    }
}

这就是一个最简单不过的类使用案例,类才是我们学习java的开始。类是以后工作的基石。

 

下面我们来介绍一下static修饰符:

        

public class CsdnExample {
    //成员变量
    String restaurantName;
    //成员方法
    public void yuXiangRouSi(){
        System.out.println("step1:准备配菜……");
        System.out.println("step2:下锅烹饪……");
        System.out.println("step3:出锅,端走!");
        method();
        
        
    }
    public void method(){
        System.out.println();
    }

    public static void main(String[] args) {
        //我要让厨师给我做一份鱼香肉丝
        //如果直接调用 yuXiangRouSi()方法,就会报错
        yuXiangRouSi();//报错语句!方法没有调用者,因此编译不通过
        
        //那么我们来创建一个类对象来调用它
        CsdnExample cs = new CsdnExample();//创建的对象  此时并没有构造方法,那么我为什么可以创建对象呢?
        cs.yuXiangRouSi();//正确语句,调用者cs
        
        //我们直接给成员变量赋值
        restaurantName = "幸福餐馆";//显而易见,又报错了  注意,变量赋值和调用方法只会在静态方法中出错
        //用对象调用
        cs.restaurantName = "幸福餐馆";
    }

}
 

        注意,直接给变量赋值和调用方法只会在静态方法中出错,所谓静态方法就是static修饰的方法。

 可以正常使用,看看我将方法用static修饰之后的样子。

编译器毫不犹豫的就给我报错了,但此时,我如果用另外一个静态方法去取调用者个函数,会出现什么效果呢? 

        本来报错的语句,现在恢复正正常了,而且两个语句都没有报错。这就是因为static方法也就是静态方法可以通过类名直接访问,也可以通过对象名访问。而非静态方法只能通过对象来调用。因此,静态方法可以直接调用静态方法,而不能直接调用非静态方法,需要通过对象。但是非静态方法可以调用静态方法。

        那么,为什么呢?为什么静态方法不能直接调用非静态方法呢?

        原因,在计算机执行的过程中,首先加载的是static修饰的静态方法,也就是说先被执行的是static方法,方法内部如果有非静态的方法,并且没有对象内容的时候,计算机并不知道你所指的非静态内容来自哪里!并且定义static方法的时候,要确定此方法只和类有关,可以让类直接调用,也就是工具类的工具方法。但如果方法和对象关系密切时,就不能定义成静态方法,因为他要被对象使用。

注意:你甭使用static来修饰构造方法,因为static修饰的内用与对象无关,而构造方法恰恰是生成对象的重要方法。

希望此篇博文对你有帮助,可以一起探讨问题。多多指教!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值