Java从入门到精通读书笔记(连载)—c++程序员学java

LogicTeamLeader 2012-09-15 11:00:55
用了很久C++,突然要用Java,买了本《Java从入门到精通》,争取三天看完精通Java,读书笔记就放在这里吧。
第一章:
2分钟看完,老生常谈,即使没怎么用过java也知道这些。

第二章:
1.instanceof应该是c++中没有的,c++使用RTTI解决这个问题的,很难用。
2.super这种引用父类的方法也是比较简单的,C++中是用父类名::父类方法()解决的,有点难看。
贴点代码试试看?

public class FatherClass {
public void print(String str)
{
System.out.println("father print:"+str);
}
}

public class SonClass extends FatherClass {
public void print(String str)
{
System.out.println("son print:"+str);
System.out.println("call father print.");
super.print(str);
}
}

public class TestSuperClass {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
SonClass son = new SonClass();
son.print("Test");
}
}


3.自动类型转换和C++一样,精度变高的随便转,精度变低的会丢失。
4.强制类型转换只有(type)这一种,不像c++有static_cast、dynamic_cast、reinterpret_cast、和const_cast。
5.运算符什么的和c++几乎一模一样。
半小时看完。
...全文
794 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwang89123 2013-11-01
  • 打赏
  • 举报
回复
LogicTeamLeader 2012-09-26
  • 打赏
  • 举报
回复
第十二章:事件处理
随便看看了解即可,新手可以试着写写代码,老手直接IDE中添加事件即可。

第十三章:Swing用户界面设计
同第十一章,随便看看即可。界面一般有专人搞,普通程序员能看懂就行了。

总结:《java从入门到精通》这本书整体质量尚可,c++熟手大概一到两天可以看完,掌握程度在80%左右。看完后能够有一些基本概念,可以写一些基本程序。看完后离入门还早,更谈不上精通了。
说说我看完后的两个迷惑之处吧,第一是从来没有提到java中的对象、常量、代码所在的堆、栈等内存分布情况,对于c++程序员来说是很难适应的,可能是篇幅的原因吧;第二没有介绍垃圾回收机制,这可能是c++程序员更感兴趣的吧。

总之,结贴,散分。
蓝蜘蛛 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 的回复:]

引用 31 楼 的回复:

很好,java多线实在是不熟悉啊。
引用 30 楼 的回复:
Java code

POSIX threads jdk
------------------ ----------------------------------------
mutex java.util.concurrent.lock……
[/Quote]

这些都是干货啊...
好东西,谢谢分享了
LogicTeamLeader 2012-09-25
  • 打赏
  • 举报
回复
非常感谢啊,其中有些在c++里面用过,还有一些没有用过。

[Quote=引用 36 楼 的回复:]
上面这些是我近些年来整理的,供为参考
[/Quote]
  • 打赏
  • 举报
回复
上面这些是我近些年来整理的,供为参考
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 的回复:]

很好,java多线实在是不熟悉啊。
引用 30 楼 的回复:
Java code

POSIX threads jdk
------------------ ----------------------------------------
mutex java.util.concurrent.locks.Lock
rwlock ……
[/Quote]

JDK 5 之后的并发包(java.util.concurrent)中的东西非常复杂,像 java.util.concurrent.locks.AbstractQueuedSynchronizer 就是其中最为重要,最为复杂的一个类。如果你有 C/C++ 多线程/并发 开发的经验,以及对于现代 CPU 架构较为了解的话,那 Java 中的多线程以及并发包中的实现也是很好理解的。

在 Java 中除了最为基础的东西之外,你只要看三样东西就可以了:

Java 中有三大支柱,在 java.util.concurrent、java.security、javax.cropty、javax.security 四个包中就占了两个(多线程、安全)

还有一个网络在 java.net、javax.net 中,呵呵

掌握了上面 6 个包及其子包中内容的话,那 Java 水平可以说达到了另一种境界。

PS:三大支柱是我之前给 Java 中多线程、网络和安全取的代号,嘿嘿

这三样中的东西非常多,基本上就是 Java 的核心所在。

多线程(multi-threading and concurrent)

1:关键词:volatile, sychronized

2:传统的线程 API:java.lang.Thread, java.lang.Runnable, java.lang.ThreadGroup, Object#wait, Object#notify, Object#notifyAll

3:JDK 5 并发包(java.util.concurrent)API:线程池、任务执行器、计数信号量、倒计数门闩、并发集合(并发 Map、阻塞队列等)、基于 CPU CAS 指令的原子 API(java.util.concurrent.atomic)、锁 API(java.util.concurrent.lock)和条件对象等。

4:作为个人知识提升,还需要理解诸如自旋锁、分离锁、分拆锁、读写锁等的同步锁策略,以及可重入锁、锁的公平性的意义。以及各种并发锁的算法,比如:Peterson锁Bakery锁 等等,以及现代 CPU 体系结构

涉及多线程及并发的 API 在 java.lang 中及 java.util.concurrent.* 中。


网络(network communication)

1:阻塞 TCP 通信、阻塞 UDP 通信、组播
2:非阻塞 TCP 通信、非阻塞 UDP 通信
3:客户端通信 API(java.net.URL, java.net.URLConnection 等类库)

涉及网络通信的 API 都在 java.net 和 java.nio.channels 包中。这里的网络已经将 RMI 相关包 java.rmi, javax.rmi 都排除了。


安全(security, cryptography and AAA)

1:Java 加密类库 JCA
2:Java 加密类库扩展 JCE
3:涉及密码学知识点的消息摘要、消息认证码、对称加密、非对称加密、数字签名
4:涉及网络通信证书管理工具(keytool)及 API(PKI、X.509证书)
5:基于 SSL/TLS 的安全网络通信 API(JSSE),包括:密钥库管理、信任库管理、阻塞 SSL 通信和非阻塞 SSL 通信等等
6:Java 认证及授权服务(JAAS)API

涉及安全的东西都在:

java.security(JCA、JCE、数字证书,以及 JCE 的 SPI)
javax.net(SSL/TLS)
javax.security(JAAS)
javax.crypto(密码学)
keytool 的 JDK 工具
corn8888 2012-09-25
  • 打赏
  • 举报
回复
好东西,谢谢分享了
pkjjun2012 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 的回复:]
[Quote=引用 23 楼 的回复:]
有空去看看。

现在的作者,有能力的不愿写,嫌钱少;
愿意写的能力不够,或者表达力不够。

所以,中国的技术书籍一塌糊涂,郁闷。

说的好啊
[/Quote]
支持个。。国内。就这样。。牛人要么不写书。要么写得很少。。但都是经典。
其他就不敢苟同了。。
pkjjun2012 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
引用 1 楼 的回复:

第三章:
1.break可以跳出语句块,c++中没有语句块。语句块的定义就是在一段语句前加上花括号和冒号;
其他基本上和c++一样,5分钟看完。

这个……
“C++中没有语句块”?在下怎么感觉第一次听到这句话……
[/Quote]

java有标签。可以跳出多层循环的。。他说的语句块,就是标签
corn8888 2012-09-23
  • 打赏
  • 举报
回复
java多线实在是不熟悉啊。
  • 打赏
  • 举报
回复
2.java多线程有两种方法实现,第一是派生Thread类,第二种是实现Runnable接口。

你说的两种方法,仅仅是线程运行时需要执行的任务,而不是多线程的两种方法实现。Java 里的线程就 Thread 一种实现,并没有两种!
LogicTeamLeader 2012-09-22
  • 打赏
  • 举报
回复
很好,java多线实在是不熟悉啊。
[Quote=引用 30 楼 的回复:]
Java code

POSIX threads jdk
------------------ ----------------------------------------
mutex java.util.concurrent.locks.Lock
rwlock java.util.concurrent.lo……
[/Quote]
  • 打赏
  • 举报
回复
POSIX threads        jdk
------------------ ----------------------------------------
mutex java.util.concurrent.locks.Lock
rwlock java.util.concurrent.locks.ReadWriteLock
cond java.util.concurrent.locks.Condition


JDK 5 使用了 CPU 原生的 CAS 指令,在此基础上弄出了很多多线程并发工具,比如:计数信号量、倒计数门闩、循环障栅、线程交换器等等。

基于 ARM, PowerPC, SPARC, x86 等芯片的 BSD, Linux, Solaris, Windows 平台,Java HotSpot VM 的 CAS 实现是通过 AT&T/x86 内联汇编指令 cmpxchg, cmpxchg8b 等完成的。

对于 C/C++ 而言要实现 lock free 的 CAS,可以使用系统函数库,或者根据不同平台使用内联汇编自己写

Windows 中的 InterlockedCompareExchange 函数
Linux 没有现成的函数,在 GCC 4.1+ 有内置的 __sync_bool_compare_and_swap 函数
Intel 的 TBB 库中有现成的 atomic<T> 模板
LogicTeamLeader 2012-09-21
  • 打赏
  • 举报
回复
第十一章:图形编程
1.IDE的年代,GUI还是画出来吧。Java中也就Layout类需要看看,其他大部分Layout类也是凑数的,根本不会有人用。
LogicTeamLeader 2012-09-21
  • 打赏
  • 举报
回复
第十章:线程
1.java语言自带线程机制,c++目前还是不带线程机制的。虽然boost::thread库也被众多c++程序员广泛使用。但是windows下用得最多的还是windows SDK自带的线程函数;而linux下用得最多的还是pthread。另外还有一些号称同时支持多个平台的多线程库。
2.java多线程有两种方法实现,第一是派生Thread类,第二种是实现Runnable接口。
3.java线程分为4种状态:new、runnable、non runnable和done,这和其他线程库大同小异;
4.run、start、stop、sleep、suspend、resume、yield、wait、notify和notifyall等方法的含义也和其他线程库一致。但suspend、resume和stop等方法是不建议使用的,因为可能会导致死锁。
5.java可使用join方法来等待线程结束,而在某些线程库中join方法经常是不可用的。
6.java的互斥使用synchonized关键字实现,它很类似于boost.thread中的lock(mutex),只不过它是对线程对象隐含的锁加锁。其实这很不利于新手理解。另外还介绍了synchonized的一些乱七八糟的用法,相信对于新手这只有反作用。

这一章对于线程,介绍得比较浅显,实现简单的多线程应该没问题,但是稍微复杂一点的也许就需要其他的开发包了。Java线程连个Mutex类都没有,这是最让我吃惊的,仅仅使用synchonized来实现同步、互斥、信号量该多麻烦啊,也许是我还没弄懂java多线程吧。

LogicTeamLeader 2012-09-21
  • 打赏
  • 举报
回复
第九章:异常处理
1.java的异常处理中有finally语句块,而c++中没有,所以程序员要自己想办法来处理异常发生后诸如“资源释放”之类的问题;
corn8888 2012-09-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

有基础很快!纯语法就简单得跟1一样。
引用 7 楼 的回复:
偶也在学Java
[/Quote]

感觉需要花时间
yongle0821 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 的回复:]
有空去看看。

现在的作者,有能力的不愿写,嫌钱少;
愿意写的能力不够,或者表达力不够。

所以,中国的技术书籍一塌糊涂,郁闷。

说的好啊
LogicTeamLeader 2012-09-20
  • 打赏
  • 举报
回复
有空去看看。

现在的作者,有能力的不愿写,嫌钱少;
愿意写的能力不够,或者表达力不够。

所以,中国的技术书籍一塌糊涂,郁闷。

[Quote=引用 21 楼 的回复:]
可以去去看看那个马士兵的教程,尤其是输入输出流,讲的出神入化,我特别喜欢
[/Quote]
LogicTeamLeader 2012-09-20
  • 打赏
  • 举报
回复
还没写完,周末有空再写。
都是什么线程、awt、swing,感觉作者写得很垃圾啊!

[Quote=引用 20 楼 的回复:]
楼主,还有第二册没有写吗
[/Quote]
加载更多回复(20)

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧