解释面向对象与面向过程
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修饰的内用与对象无关,而构造方法恰恰是生成对象的重要方法。
希望此篇博文对你有帮助,可以一起探讨问题。多多指教!