面向对象编程,是把事物抽象为一个一个的对象,按对象交互去设计程序。而不是按逻辑步骤,一步一步的写代码。比如开日光灯,过程式编程就是按电路逻辑去码代码,面向对象把日光灯抽象为一个对象,日光灯.开()。这个“开”,就是对象“日光灯”提供的服务,称之为接口。开日光灯房间亮起来,为我服务。
类(class),是指对象的抽象。灯?什么灯?日光灯。灯就是类,日光灯,就是具体的对象实例。
对象里面存储着有它的内部数据。要想访问这些数据,Java提供了4种级别的权限:
public:公开的
private:私有的
protected:允许继承者使用
默认访问权限:也叫包访问权限,也就是同一个文件夹内共享
protected提到了继承,这个继承,就是继承财产的意思。B继承A,那就拥有了A的财产。当然,A中private的东西是继承不了的。
在Java中,所有的类都继承于一个始祖,那就是Object。万物皆对象,Everything is Object。
面向对象除了继承,还有一个重要的概念,就是多态。
多态是指同一父类可以拥有多种形态的子类。
比如
void doSomething(Shape shape) {
shape.erase();
// ...
shape.draw();
}
Circle circle = new Circle();
Triangle triangle = new Triangle();
Line line = new Line();
doSomething(circle);
doSomething(triangle);
doSomething(line);
看到了吧,doSomething的形参是Shape,却可以分别传入circle, triangle, line。多态是通过动态绑定来实现的。
Java编译器在编译doSomething()的代码时,期望它的编译结果是调用基类Shape的erase()和draw(),因为多态动态绑定,在传入circle的时候,发生了向上转型,也就是把circle看成是Shape的一种形态,那么能对Shape的操作,也能够对circle操作,于是就会调用circle.erase()。
这样,代码就简洁许多,不必要为了适配circle, triangle, line,添加针对性的处理代码,只需要Shape就ok了。
对象可以存放在容器中。包括List,Map,Set,队列,树,堆栈等。说到List,就不得不提ArrayList和LinkedList了,前者随机访问效率高,后者增删效率高。面试经常会考到哦。
容器也不是没有规定的,比如矿泉水瓶装开水,那不得烫成一团么。在Java中,这个规定叫做,参数化类型。长这样:
ArrayList<Shape> shapes = new ArrayList<Shape>();
<>尖括号里面的,就规定了这个ArrayList容器,存取的是Shape类型的对象。
Java的对象,从new开始,不需要像C++一样,需要自己做“垃圾分类”,Java有非常强大的垃圾回收机制,自动发现对象何时不再被使用,分分钟消灭它。
看Java代码,总能看到try catch,满屏都是认识不认识的Exception。这是因为Java一开始就内置了异常处理,而且强制必须使用它。Java很严谨,测试很喜欢。
并发编程,多多少少都听说过,也就是多段代码同时跑,java是通过线程来实现的。
Java用的最多的领域还是web。web就是一个客户端/服务器系统。也就是常说的前端和后台。Java主要用于后台。
最后,Java不是适用于所有人的。需要根据情况来选择。公司级别一般用Java,个人编程推荐python。
具体可以参考博客编程语言选择:主java副python。哈哈哈。