think in java(JAVA核心技术 ,JAVA入门经典,THINK IN JAVA 这几本书哪个比较好呢)
本文目录
- JAVA核心技术 ,JAVA入门经典,THINK IN JAVA 这几本书哪个比较好呢
- 关于《Think in Java》
- think in java这本书好么
- 关于Think in java里面的一段代码
- 运行Think In Java中的 RMI 示例可能产生的几种异常及解决
- 学习JAVA编程,(21天学通Java , java从入门到精通,think in java)这三本书有必要三本都看吗
JAVA核心技术 ,JAVA入门经典,THINK IN JAVA 这几本书哪个比较好呢
think in java 虽然是公认的好书、但是不推荐新手看。java 核心技术没看过、不过看这名字应该是着重讲解的吧、应该适合大神。java入门经典、推荐你看、因为我知道你是新手。祝你学习愉快
THINK IN JAVA 和核心技术,但是劝你还是先学好基础之后再慢慢看这两本书吧。还有书再多也没有,主要是自己对某个问题能够独立思考。有自己的理解。
关于《Think in Java》
1。Java Standard Edition,标准java,针对普通PC应用的Java版本。不属于java纯基础的,初学者看这个会很吃力,如果你看的下去,那说明你挺有天赋的。2.《Java核心编程》这个是纯基础的,虽然听起来挺牛,“核心编程”的“核心”换成“基础”也没有改变意思。需不需要购买,看你的需求了,《think in java》并不能替代基础类的书。
think in java这本书好么
让我的经验告诉你: 我不建议初学者就去看《《thinging in java》》,会让你摸不着头脑, 我去年在培训班学的时候,老师推荐 1.初学者看《《java全方位学习》》,朱仲杰编的,内容比较全面,该讲都讲到了 2.有了基础然后可以看《《thinging in java》》和《《核心技术卷2高级特性》》 现在的java书讲swing 和applet开发图形还是比较多,可是现在这些知识已经逐渐被淘汰了,所以建议楼主不要在这方面花费太多的时间.既然你有很强的c或者c++,还有数据结构基础,我相信你java很快就能入门了! 祝你成功!
关于Think in java里面的一段代码
首先简短回答,对,如果(由于很不可能出现的意外)而使得这一句话抛出异常,确实会进入死循环. 后边来慢慢解释.不过首先这里请注意一点, 尝试读取文件结尾处之后的内容 (也就是说buffer里边没有内容了),这个时候并不会产生IOException, 而只是返回null而已.所以说,在正常情况下, 是不会出现任何问题的. 这也就是为什么这个程序可以正常运行的原因.至于楼上某人说的什么try/catch之后的return不会被执行,属于误人子弟,请无视.另外,建议以后有类似的问题时先去查看API或者JDK source code, 应该绝大部分的问题都可以自己解决.以下引用JDK5.0中,java.io.BufferedReader中的一小部分源码.(如果需要完整的JDK5.0源码,可以去 http://java.sun.com/j2se/jrl_download.html 下载)(6.0的请去http://www.oracle.com/technetwork/java/javase/downloads/index.html自己找)由于Reader关闭产生IOException的部分: private void ensureOpen() throws IOException { if (in == null) throw new IOException("Stream closed"); }我们通常使用的readLine,会调用readLine(boolean ignoreLF): public String readLine() throws IOException { return readLine(false); }被调用的readLine(boolean ignoreLF)中的内容,检查Reader是否关闭以及对于返回null的判定: String readLine(boolean ignoreLF) throws IOException { StringBuffer s = null; int startChar; boolean omitLF = ignoreLF || skipLF; synchronized (lock) { ensureOpen(); bufferLoop: for (;;) { if (nextChar 》= nChars) fill(); if (nextChar 》= nChars) { /* EOF */ if (s != null && s.length() 》 0) return s.toString(); else return null; }之后为正常读取的代码,略去.可以我们可以很直观的看出,达到文件底部,只会单纯的返回null, 不会产生任何IOException.接下来我们来测试一下产生IOException的情况首先,如果你把你给出的代码中的 String getLine() { String s; try { s = in.readLine(); }改成 String getLine() { String s; try { throw new IOException(); }这样, 让每一次读取都强制产生IOException, 那没错,这时一定会进入死循环. 因为判定的时候s是"failed"而不是null. 而之后的读取又每次都产生了IOException.再接下来,我们来看一下,readLine中所有可以产生IOException的情况, 通过阅读源码可以得知,其实readLine只会产生一种,就是调用ensureOpen()时由于Reader关闭而抛出的.(BufferedReader可能会产生另外一种,调用reset()时候的,和本问题无关,就不说了)那么如何可以让这个IOException出现呢? 很简单,手动关闭BufferedReader.修改你给出的代码, while ((s = in.getLine()) != null) { if (i == 1) { in.cleanup(); } System.out.println("" + i++ + ": " + s); }使程序在读取完第一行内容之后,强行关闭BufferedReader.再回去阅读一下readLine(boolean ignoreLF)的源码,你会很明显的看到,判定是否关闭是出现在判定Buffer是否读完之前的,而throw和return一样,出现throw之后的代码不会继续执行.也就是说,当这种(在正常运行极度程序中不可能出现的)情况出现之后,readLine只会单纯的丢出IOException, 根本不会继续去看永远不会再返回null了. 而这时你说的死循环就会出现了.所以说,你考虑的情况是存在的,如果在执行try {s = in.readLine();}的过程中产生了IOException, 鉴于以上的分析,原因只有一个就是Reader关闭,在这种情况下,之后的s = in.readLine()也会不断的抛出IOException, 使s的值一直为"failed", 而使得(s == null)永远不会成立,进入死循环.
运行Think In Java中的 RMI 示例可能产生的几种异常及解决
下面将列出可能产生的异常,并说明解决办法,如读者在执行当中还遇到其他未列出的异常,可留言告知,吾将尽力而为。首先把代码PerfectTime和DisplayPerfectTime 中的//colossus:2005/PerfectTime改为//localhost:2005/PerfectTime ,因为colossus为机器名,所以改为localhost指向本机,不然找不到主机colossus的。已经用命令 RMIC 生成PerfectTime_Stub.class,并且执行了命令 rmiregistry 20051. 执行java PerfectTime出现异常 java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:2005 connect,resolve)无法解析和连接到127.0.0.1的2005端口上,原因是在PerfectTime中设置了安全管理器<System.setSecurityManager(new RMISecurityManager());>,可是又没有设置访问的策略,解决办法有四(解决这种异常的办法同样适用于 DisplayPerfectTime):(1) 可以把代码System.setSecurityManager(new RMISecurityManager());去掉,不设置安全管理器(2) 修改JRE的安全策略文件,这就要求你能确定执行时是用的哪个JRE,比如在Eclipse中用JDK是c:\Java\jdk1.5.0_06,相应的安全策略文件就是c:\java\jdk1.5.0_06\jre\lib\security\java.policy,如果是Applet中的java 程序就应该是在 jre 目录中,如文件C:\Java\jre1.5.0_06\lib\security\java.policy。修改安全策略文件,在grant {},大括号中加上permission java.net.SocketPermission "localhost:2005","connect,resolve";(3) 建立自己的策略文件,如c:\MyPolicy.policy ,内容为:grant {permission java.net.SocketPermission "localhost:2005","connect,resolve";}执行PerfectTime时用命令 java -Djava.security.policy=c:\MyPolicy.policy PerfectTime 指定了安全策略文件System.setSecurityManager (new RMISecurityManager() {public void checkConnect (String host, int port) {}public void checkConnect (String host, int port, Object context) {}});当然最简单的解决方法莫过于第一种。2. 同样是执行 PerfectTime 出现的异常 java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:java.lang.ClassNotFoundException: PerfectTime_Stub很多人对这个问题有些莫名其妙,因为明明看到 PerfectTime_Stub 和 PerfectTime 这两个类是在同一个目录中,并且classpath 也有设置当前目录,按理既然能加载 PerfectTime 类执行,就能加载到 PerfectTime_Stub吧,为什么还提示ClassNotFound呢?其实类 PerfectTime_Stub并非由PerfectTime执行行直接加载,而是PerfectTime在向RMI注册时,要求 rmiregistry去加载 PerfectTime_Stub类的,理解了这一层次上的意义就会知道其实 PerfectTime_Stub是为 rmiregistry所用的。所以解决办法是:(1) 在执行 rmiregistry 之前,设置classpath让能查找到PerfectTime_Stub类,如在同一Dos窗口中,假设 PerfectTime_Stub类是在E:\workspace\TestRMI\bin目录中,执行过程那就是C:\Documents and Settings\unmiset classpath=%classpath%;E:\workspace\TestRMI\binC:\Documents and Settings\unmirmiregistry 2005(2) 或者在命令行中先进入到 PerfectTime_Stub类所在的目录,然后再执行 rmiregistry (这种方法实质是与上面一样的,只是恰当的应用的classpath中的当前目录 "." ),执行过程如下C:\Documents and Settings\unmie:E:\cd E:\workspace\TestRMI\binE:\workspace\TestRMI\binrmiregistry 2005参看:rmiregistry was finding the stubs in its CLASSPATH3. 执行客户端程序 DisplayPerfectTime 出现异常 java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1276 connect,resolve),同时在服务器端也产生异常 Exception in thread "RMI TCP Connection(6)-127.0.0.1" java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1296 accept,resolve)直接能想到的解决办法是把127.0.0.1:1276,127.0.0.1:1276的解析连接权限也加上,方法可取第 1 种异常所列的方法,但这个端口是随机的。在此解析一下这些端口的用途,2005是直接指定的供客户端查找注册的服务对象引用的端口,这是固定的,而上面产生的在客户端和服务器上的1276和1296的端口,是随机的,是在方法调用时真正的客户端与提供服务的服务器(而非注册服务器)之间的数据通信的端口。为了满足上面的端口应用,可以在安全策略文件中只加上 permission java.net.SocketPermission "localhost:*","accept,connect,resolve"; 允许在所有端口上的接受,连接,解析。再如果要访问的IP很多,又要写成 permission java.net.SocketPermission "*:*","accept,connect,resolve"; 方便。4.执行客户端程序 DisplayPerfectTime出现异常 java.rmi.UnmarshalException: Error unmarshaling return header; nested exception is:java.io.EOFException,这种异常应该比较少见,出现情况是客户端有权限访问服务提供端的某个端口,而服务提供端却无权限在某个端口上或给那个客户端提供服务造成的,解决办法把客户端和服务器的安全策略文件都改为能访问任何端口就行。
学习JAVA编程,(21天学通Java , java从入门到精通,think in java)这三本书有必要三本都看吗
你说的三本书都是经典中的经典 必须都看 但先看21天 看think in java 的书之前还是应该看看think in c++因为那个作者是玩c++的 玩通混合编码 还在纠结面向对象程序设计吗。c++博大进深,那本书里深刻讲解了面向对象的设计。从c到c++。你才能理解为什么要面向对象。面向对象究竟是什么。程序不是语言,是思想。更为深入的一个说法是数据结构+算法=程序 可见语言真的在程序中不是很重要 要深入 要比别人更好 才能获得成功 如果我会你会大家会 那如何才能区别你我的价值所以 看什么语言不重要 你要真想好好学 真想要赚大钱 获取别人的认同 还是好好学习数据结构吧计算机组成原理你也应该清除。 我现在正在恶补数据结构 以前真的后悔上课没好好听。
更多文章:
酷狗音乐怎么创建电台?我在酷狗上传了歌曲,结果审核失败了,酷狗说我没授权,有谁知道怎样授权
2024年7月11日 12:28
ctrlaltdel(电脑开机出现ctrl+alt+del怎么解决)
2024年2月17日 17:30
搜狗地图成都(成都明明在我国地图中部地区,为什么却被认为在“西南”地区)
2024年4月25日 11:15
七星彩预测软件(七星彩11068专家预测信誉怎么样网址有谁知道)
2023年11月28日 03:00
小马激活工具下载(小马Oem7 windows7激活工具哪里能下啊)
2024年7月18日 23:53
NES格式吞食天地1里在王允屋里的七星刀在那找?吞食天地1中铁做的5把剑分别在哪
2024年7月22日 16:57
中国国航机票查询(如何在 网上查询在国航已购买的机票,是否购买成功呢)
2024年3月17日 19:20
神马快爆一每日实时优惠爆料网页怎么打不开了?神马好东西 神马快爆 什么关系
2024年4月14日 19:35
特勤机甲队2(我以前玩过一个很好玩的游戏~但是找不到光碟了!希望大家帮帮忙!)
2023年11月17日 18:07
djangobook(会了django还有必要学flask吗)
2024年8月7日 13:15
天天打波利怎么修改 天天打波利修改的方法?天天打波利为什么要培养四大天王
2024年7月26日 09:35