think in java是什么,关于《Think in Java》
大家好,今天小编来为大家解答think in java是什么这个问题,关于《Think in Java》很多人还不知道,现在让我们一起来看看吧!
关于think in java 中的多态性的问题
Shape c= new Circle()和Circle c= new Circle()有何区别??
怎么说 Shape c= new Circle()来说吧
Shape c创建一个Shape的对象 c但是他的实例也是是Shape类的.因为Circle是继承自Shape的.但是c只能调用到所有Shape中的方法.而Circle中间的方法是没有办法调用到的..要是如果Circle重写了Shape中间的方法的话调用执行的还是子类的方法.
Shape c= new Circle();
在理解一下...Shape不光可以是一个类.也可以是一个虚类.或者说说一个接口.而Circle是必须继承或者实现了Shape的一个类.
补充一下..个人认为多态不一定是必须只有继承才可以实现的
public void draw(){
System.out.println("circle drawing");
}
public void draw( int a){
System.out.println("circle drawing"+a);
}
我想这也是多态的一种表现吧..通过方法的重写..
至于为什么...我想想要..我也经常这么用但还没有总结过..
一般我是用接口去进行这种操作.因为接口没有办法实例化..
所以要实例化一个他的实现..
xxpniu说的到有那么点点感觉..例子很不错..
我复述一下..学校是一个类.一个老师就是一个接口.N个老师就是N个接口.这个学校实现n个老师和其他的接口.但是你得到学校就能得到老师这是肯定的.老师 c= new学校();就好比用学校直接得到了老师..
省心啊..不用在学校里面去辛辛苦苦的去找一个老师出来了..直接就能得到了老师...差不多这意思吧..
运行Think In Java中的 RMI 示例可能产生的几种异常及解决
下面将列出可能产生的异常,并说明解决办法,如读者在执行当中还遇到其他未列出的异常,可留言告知,吾将尽力而为。
首先把代码PerfectTime和DisplayPerfectTime中的//colossus:2005/PerfectTime改为//localhost:2005/PerfectTime,因为colossus为机器名,所以改为localhost指向本机,不然找不到主机colossus的。
已经用命令 RMIC生成PerfectTime_Stub.class,并且执行了命令 rmiregistry 2005
1.执行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\bin
C:\Documents and Settings\unmirmiregistry 2005
(2)或者在命令行中先进入到 PerfectTime_Stub类所在的目录,然后再执行 rmiregistry(这种方法实质是与上面一样的,只是恰当的应用的classpath中的当前目录"."),执行过程如下
C:\Documents and Settings\unmie:
E:\cd E:\workspace\TestRMI\bin
E:\workspace\TestRMI\binrmiregistry 2005参看:rmiregistry was finding the stubs in its CLASSPATH
3.执行客户端程序 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,这种异常应该比较少见,出现情况是客户端有权限访问服务提供端的某个端口,而服务提供端却无权限在某个端口上或给那个客户端提供服务造成的,解决办法把客户端和服务器的安全策略文件都改为能访问任何端口就行。
关于《Think in Java》
1。Java Standard Edition,标准java,针对普通PC应用的Java版本。
不属于java纯基础的,初学者看这个会很吃力,如果你看的下去,那说明你挺有天赋的。
2.《Java核心编程》这个是纯基础的,虽然听起来挺牛,“核心编程”的“核心”换成“基础”也没有改变意思。需不需要购买,看你的需求了,《think in java》并不能替代基础类的书。
文章分享结束,think in java是什么和关于《Think in Java》的答案你都知道了吗?欢迎再次光临本站哦!