关键词:
第一章:对象导论
1. 抽象过程(类与对象的关系)
类是一类对象的共同行为(成员函数)与状态(成员变量),对象是具体类的实例化。(Eg.人类是一个类,共同的行为:吃,状态:名字。)
【类创建者需要考虑这件事情,回头看看这个概念四个字醍醐灌顶,每次创建这个类的时候,想一想这个类是需要什么成员函数与成员变量来满足单一职责的原则】
2. 每个对象都提供服务:程序设计本身的目标就是去创建能够提供服务来解决问题的一系列对象。
3. 被隐藏的具体实现:类创建者与客户端程序员使用者。
往往来说,每个程序员都是两者身份的结合,类的创建者只要需要暴露需要暴露的行为,客户端程序员使用者负责创建对象并使用。【封装】
4. 复用具体类实现:在建立新的类时,应该优先考虑组合。Has a
【开放封闭原则】
5. 继承:
以现有类为基础,复制它,在子类中添加新的方法或者覆盖旧的方法。is a(子类完全可以替换父类)与is like a(子类拥有父类不具备的功能)【多态】
6. 伴随多态的可互换对象
向上转型是安全的【里氏替换原则】,向下转型不是安全的。【依赖倒转原则】
7. 单根继承结构Object
任何一个类都是继承至Object。
8. 容器(问题来了,容器是否会持有对其他对象的引用?答案:都是引用,会修改原始数据。抽查得出结果。)
Set:
HashSet:
public boolean add(E e) { return map.put(e, PRESENT)==null; } public V put(K key, V value) { if (table == EMPTY_TABLE) { inflateTable(threshold); } if (key == null) return putForNullKey(value); int hash = sun.misc.Hashing.singleWordWangJenkinsHash(key); int i = indexFor(hash, table.length); for (HashMapEntry<K,V> e = table[i]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } modCount++; addEntry(hash, key, value, i); return null; }
LinkedHashSet:extends HashSet。
TreeSet:
List:
ArrayList:
public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] = e; return true; }
LinkedList:
public boolean add(E e) { linkLast(e); return true; } void linkLast(E e) { final Node<E> l = last; final Node<E> newNode = new Node<>(l, e, null); last = newNode; if (l == null) first = newNode; else l.next = newNode; size++; modCount++; }
Map:
HashMap:
public V put(K key, V value) { if (table == EMPTY_TABLE) { inflateTable(threshold); } if (key == null) return putForNullKey(value); int hash = sun.misc.Hashing.singleWordWangJenkinsHash(key); int i = indexFor(hash, table.length); for (HashMapEntry<K,V> e = table[i]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } modCount++; addEntry(hash, key, value, i); return null; } void addEntry(int hash, K key, V value, int bucketIndex) { if ((size >= threshold) && (null != table[bucketIndex])) { resize(2 * table.length); hash = (null != key) ? sun.misc.Hashing.singleWordWangJenkinsHash(key) : 0; bucketIndex = indexFor(hash, table.length); } createEntry(hash, key, value, bucketIndex); } void createEntry(int hash, K key, V value, int bucketIndex) { HashMapEntry<K,V> e = table[bucketIndex]; table[bucketIndex] = new HashMapEntry<>(hash, key, value, e); size++; } HashMapEntry(int h, K k, V v, HashMapEntry<K,V> n) { value = v; next = n; key = k; hash = h; }
另外:其实List就是将Map的key变成下标:0/1/2/3.../n,而Set就是将Map的value变成null。
9. 对象的创建与生命周期
虽然说java有垃圾回收机制,但是前提是必须了解java内存模型(pc、虚拟机栈、本地方法栈、堆、方法区各自的作用)
10. 异常处理:处理错误
11. 并发编程
1、区分并发与并行的区别,假设只有一个处理器,两者个人认为是表现一致的。
2、并发与并行的区别:在于同一时刻。(Eg. 并发:你在吃饭的过程中,电话来了,你只能放下手中的饭筷去听电话。并行:你在吃饭的过程中,电话来了,你可以边吃饭边听电话。)
3、在java编程中,程序是不关心并行或者是并发,只有逻辑线程的概念。
关于java面向对象编程和面向接口编程区别
向大家问下关于java面向对象编程和面向接口编程思想区别,面向对象就是模拟真实世界,把真实事物抽象成类,操作实例..而面向接口编程了,好处...?主要的思想...?怎样去用面向接口的思维去开发一个程序...?Struggle说得对。... 查看详情
java编程思想(对象导论)
...。 一开始在各种大牛的网上博客上看到推荐《Java编程思想》买来之后,发现确实还是很不错的一本书,推荐有一定编程基础的人学习。 了解Java。首先从jdk开始介绍。也是最基础的东西。 JRE(JavaRuntimeEnvironment... 查看详情
读后感《java编程思想》~异常
【读后感】《Java编程思想》~异常终于拿出压箱底的那本《Java编程思想》。这本书我年轻的时候就买了,但是翻过几页后就放弃了。没想到这两天翻了一下,真的有收获。看了一下第12章异常,有两个地方令我感悟很深。使用嵌... 查看详情
java面向对象编程思想
1、面向对象编程是什么 面向对象编程(ObjectOrientedProgramming,故常称OOP)并非Java独有,而是一种编程的思想,Java、C++、Python均有对其实现。其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映... 查看详情
java编程思想中关于闭包的一个例子
Java编程思想中的一个例子 packageInnerClass;interfaceIncrementable{voidincrement();}/**被调1*///VerysimpletojustimplementtheinterfaceclassCallee1implementsIncrementable{privateinti=0;@Overridepublicvoidincrem 查看详情
java编程思想
Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而且在大型项目开发中也是常用的知识,既有简单的概念理解题(比如i... 查看详情
java编程思想之并发
1.并发的多面性更快的执行改进代码设计2.基本的线程机制线程的创建```/*Whatwillberun.*/privateRunnabletarget;@Overridepublicvoidrun(){if(target!=null){target.run();}}```(1)实现Runnable接口:newThread(Runnable).start();将任务与线程分离,符号面向对象思... 查看详情
java编程思想两个主函数
//:initialization/DynamicArray.javapackageinitialization;/*AddedbyEclipse.py*///Arrayinitialization.publicclassDynamicArray{publicstaticvoidmain(String[]args){Other.main(newString[]{"fiddle","de","dum 查看详情
java-面向对象思想进行jdbc编程
mysql-connector-java-5.1.7-bin.jarjdbc.propertiesdriver=com.mysql.jdbc.DriverjdbcUrl=jdbc:mysql://localhost:3306/lessonuser=rootpassword=JDBCTools.javapackage面向对象思想进行JDBC编程;importjava.io.IOExceptio 查看详情
java编程思想重点笔记(java开发必看)
Java编程思想重点笔记(Java开发必看) Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而且在大型项目开发中也是... 查看详情
java面向对象编程思想
丶冯小小 Java面向对象编程思想 面向对象三个特征:封装、继承、多态封装: 语法:属性私有化(private)、提供相对应的get/set的方法进行访问(public)、 在set/get的方法... 查看详情
java编程思想笔记-对象比较
publicclassEqualsTest{ publicinti;}publicclassTest{ publicstaticvoidmain(String[]args) {EqualsTesta=newEqualsTest(); a.i=50; EqualsTestb=newEqualsTest(); b.i=50; System.out.println(a==b 查看详情
java编程思想笔记--第一个java程序
//Property.java importjava.util.*; publicclassProperty{ publicstaticvoidmain(String[]args){ System.out.println(newDate()); Propertiesp=System.getProperties(); p.list(System.out); 查看详情
《java编程思想》有必要买吗
《java编程思想》有必要买吗 1.看到过好多个这样的提问,其实我一般真的不那么容易分享自己的这点心得的,这是第一次回答这样的“推荐书籍”方面的问题。 我买编程方面的书籍,有一个非常清晰、坚决的原则——电... 查看详情
java编程思想-异常
1.使用异常链,需要采用如下方式包装捕获到的异常;publicvoidtwo(){System.out.println("two()");try{one();}catch(Throwablee){//e=e.fillInStackTrace();thrownewRuntimeException(e);}}调用two(),会产生如下异常栈帧信息,包含之前异常。2.直接catch、抛出异常... 查看详情
java编程思想
文章目录java编程思想第一章对象导论面向对象语言OOP的五个特征每个对象都有一个接口每个对象都是提供服务的继承策略设计模式工厂方法设计模式泛型的引入并发,并行,多线程,关于共享资源的线程安全问题客户/服务器技... 查看详情
java编程思想(前十章)
Java编程思想有C++编程基础的条件下,前10章可以快速过一下,都是基本语法,不需要花太多时间.着重中后段的一些章节,类型信息、泛型、容器、IO、并发等.中文翻译版阅读地址对于一个架构师而言,掌握各种语言的优势并可以... 查看详情
java编程思想thinkinginjava
Java编程思想【Thinkinginjava】目录:第1章对象导论1.1抽象过程1.2每个对象都有一个接口1.3每个对象都提供服务1.4被隐藏的具体实现1.5复用具体实现1.6继承1.6.1“是一个”(is-a)与“像是一个”(is-like-a)关系1.7伴随多... 查看详情