万物接对象。
程序是对象的集合。
每个对象都有自己的有其他对象所构成的存储。
每个对象都拥有类型。
某一特定类型的所有对象都可以接收同样的消息。
1、对象接口
每个对象只满足某些请求,这些请求由对象接口定义
例如灯泡,类型/类名称为Light,可以向Light发出的请求:打开、关闭、调亮、调暗。
Light it = new Light(); lt.on();
对象“引用”(it),然后调用new方法来创建该类型的薪对象。为了向对象发送消息,需要声明对象名称,并以点符号链接一个消息请求。 2、隐藏具体实现 Java用三个关键字在类的内部定义边界:public、private、protected。决定了紧跟其后被定义的东西被谁使用。
public:表示其后元素对任何人使用
private:除类型创建者和内部方法外,任何人都不允许访问。
protected:作用与private相当,差别在于继承的类访问protected成员,但是不能访问private成员。
注意:java默认访问权限private,当前面没有任何指定访问词时,它将发挥作用。
3、多态可换对象
一个面向对象程序肯定会在某处包含向上转型,因为这正是将自己从必须指定确切类型中解放出来的关键。
在doSomething方法代码中:shape.erase();shape.draw(); 这里表达的意思仅仅是“你是一个Shape,我知道你可以erase和draw你自己。”
当java编译器在编译doSomething()时,不能知道确切类型。所以通常会期望它的编译结果调用基类Shape的erase()和draw(),而不是具体的Circle。
4、容器
例如List(存储序列)、Map(关联数组,建立对象之间的关联)、Set(每种对象类型只有一种),以及队列、树、堆栈构件。
容器的选择
不同的容器提供了不同类型的接口、行为。堆栈相比队列具备不同的接口和行为,也不同于集合和列表的接口和行为。
不同容器的效率不一样的。 例如ArrayList和LinkedList。ArrayList随机访问元素是一个花费固定时间的操作,而LinkedList随机选取元素在列表中移动,代价比较高,也就是越靠表尾的元素,花费时间越长。但是想在序列中插入元素,LinkedList要比ArrayList代价要低。
5、并发编程
并发看起来简单,但是有一个隐患:资源共享。如果多个并发任务访问同一资源,就会出现问题。比如,两个进程不能同时向一台打印机发送消息。我们只有使用期间共享资源被锁定,完成任务后再释放资源,使其他任务可以使用资源,才能解决。
Java8已经内置并发库completefuture,或者使用京东并发库框架(asyncTool),都可以很好的解决资源共享锁的问题。
OOP和Java不一定适合所有人。重要是正确评估自己的需求,如果java可能不能满足你的具体实现,应该参考其他的选择。比如Python,就算最终选择java,至少也要清楚哪些选项可以提供。
联系客服