Corsair

My javaWorld
数据加载中……

2006年11月1日

JAVA3D包功能介绍

     摘要: 包 简介          ...  阅读全文

posted @ 2007-04-15 11:06 银河海盗 阅读(1692) | 评论 (3)编辑 收藏
向上转型中子类将能看到父类被覆盖字段的现象探讨

我们知道,在子类继承父类之后,如果子类与父类有同名的字段和方法,那么子类中的子段会代替或隐藏父类的子段,说明子类字段覆盖了超类字段,但可以通过super关键字去访问超类字段。但是,在我们将子类对象向超类转型的时候就会发生这个奇怪的现象,子类对象居然可以看到父类曾经被覆盖掉的字段!就正如下面例子中一样:

 1 class A{
 2     boolean bb =false;
 3 }
 4 
 5 public class B extends A{
 6     boolean bb = true;
 7     //int a=1;
 8     public static void main(String[] args) {
 9         B b =new B();
10         A a ;
11         a= b;
12         //---??
13         System.out.println(a.bb);
14         //---这句可以理解
15         System.out.println(b.bb);
16         //---??
17         System.out.println( ((A)b).bb);
18         //----
19     }
20     /*运行结果
21      * false
22      * true
23      * false
24      * */
25 }

为什么会发生这样的情况呢?
关于这种情况的解释在[美]Peter van der Linden著的《Just Java2》中有了答案:
P106他说:
   一定要注意:当把子类转换成超类时,子类可以见到或访问被隐藏的同名变量。Java允许名字重复的原因是,允许将来把新的字段加到超类中,而不影响已经使用了该名字的现有子类,子类将会继续使用自己的字段副本。除非让子类以超类对象的形式出现,方法可以覆盖,但是字段不能被覆盖。注意:最好不要隐藏超类中的字段名。
     
所以我们在进行向上转型的时候一定要注意:不要访问子类中那些“覆盖”掉父类的字段(它并没有真正覆盖掉,在向上转型的时候就可以访问的到),要么将子类字段改名(在你知道父类代码的情况下),要么通过方法来访问字类字段(方法即使同名也肯定能覆盖掉)。

posted @ 2007-03-31 11:31 银河海盗 阅读(696) | 评论 (2)编辑 收藏
继承带参数构造器的超类并且调用自身其他构造器的讨论

// 首先有一个带参数的超类: 
class  SuperClass
   String str
= " create superClass obj "
   SuperClass(
int  num)
       System.out.println(num
+ str); 
   }
 
}
 
/*
现在有一个子类继承了这个超类,那么这个子类应该显式的调用超类的构造函数,以便初始化自己的父类,如下。 
*/

class  SubClass  extends  SuperClass
   SubClass(
int  num)
      
super (num); 
   }
 
}
 
/*
现在子类还要定义一个新的构造函数,并且在前一个构造函数中调用这个新的构造函数,更改如下: 
*/

class  SubClass  extends  SuperClass
   SubClass(
int  num)
      
super (num); 
      
this ( " other SubClass(String) " ); 
   }
 
   SubClass(String s)

      System.out.println(s); 
   }
 
   
public   static   void  main(String[] args)
      
new  SubClass(); 
   }
 
}
 
/*
由于我们知道在一个类中的构造函数中要调用自己的其他构造函数,只能通过this();的方式调用一个,并且要放在所在构造函数的第一行,但是使用super();显式调用也父类带参构造函数也只能放在第一行,那么这样就会发生冲突。
*/
// 参考: 
public   class  SuperClass 
String str
= " create superClass obj " ;  
 SuperClass(
int  num) {  
       System.out.println(num
+ str);  
   }
  
}
 
public   class  SubClass  extends  SuperClass 
   SubClass(
int  num) {  
      
super (num);  
      sub(num,
" other Subclass(String) " ); 
   }
  
   SubClass(
int  num,String s) {  
      
super (num); 
  System.out.println(s);  
   }
 
   
// ------------- 
   SubClass sub( int  num,String s)
   
return   new  SubClass(num,s); 
   }
 
   
public   static   void  main(String[] args) {  
      
new  SubClass( 1 ); 
   }
  
}

posted @ 2007-03-31 10:56 银河海盗 阅读(441) | 评论 (0)编辑 收藏
关于名称屏蔽讨论

关于超类方法重载,子类无法覆盖其中的任意一个方法。

public class SuperClass 
public void method()
System.out.println(
"super method() worked."); 
}
 
public void method(int a)
System.out.println(
"super method(int) worked"); 
}
 
public void method(String s)
System.out.println(
"super method(string) worked"); 
}
 
}
 
//------------sub--------------- 
public class SubClass extends SuperClass 
  
public void method()
  System.out.println(
"subclass method() worked"); 
  }
 
  
public void method(int a)
  
super.method(a); 
  }
 
  
public void method(char c)
  System.out.println(
"subclass method(char) worked"); 
  }
 
}
 
//------------run--------------- 
public class Test 
public static void run(SuperClass a)
a.method(); 
a.method(
1); 
a.method(
"string"); 
}
 
public static void main(String[] args) 
run(
new SubClass()); 
new SubClass().method('r'); 
}
 
}
 
//=============END=============== 
subclass method() worked 
super method(int) worked 
super method(string) worked 
subclass method(
char) worked 
//=============END=============== 

posted @ 2007-03-31 10:53 银河海盗 阅读(308) | 评论 (1)编辑 收藏
解决linux环境下jsp+mysql数据库中文乱码的问题

经过一个星期的艰苦奋斗终于解决了这个问题,特将经验摘录下来备忘。本文将解决以下的几种乱码问题。

中文存入 mysql 数据表出现的乱码,从 JSP 页面读取 mysql 中文数据出现乱码,以及在 sell 环境下查看数据库表中文数据出现乱码。

linux平台:ubuntu6.10

mysql版本:5.0

浏览器:firefox2.0

为了解决中文乱码的问题首先就是要同一字符集,我采用utf-8

第一步:安装mysql后,修改配置文件/etc/mysql/my.cnf 找到相应项并添加如下字段,如下所示:(注意是添加,配置文件中其他不相关的内容下面并没有列出来)

[client]

default-character-set=utf8

[mysqld_safe]

default-character-set=utf8

[mysqld]

default-character-set=utf8

[mysql]

default-character-set=utf8

重新启动mysql服务,进入sell终端,进入mysql的命令提示符下输入如下指令:

mysql>show variables like '%char%';

如果出现的列表各项内容和以下相同表明配置成功了,

+---------------------+---------------------

| Variable_name | Value

+-----------------------+---------------------

| character_set_client | utf8

| character_set_connection | utf8

| character_set_database | utf8

| character_set_filesystem | binary

| character_set_results | utf8

| character_set_server | utf8

| character_set_system | utf8

| character_sets_dir | /usr/share/mysql/charsets/

+---------------------+----------------------

第二步:在要发送中文或者要读取中文的JSP页面(最好所有页面)都添加如下声明:

<%@page pageEncoding="UTF-8"%>

<%@ page contentType="text/html;charset=utf-8"%>

<% request.setCharacterEncoding("utf-8"); %>

<head>标签对中添加如下:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

注意在servlet中对请求进行响应的方法中同样要有:

response.setContentType("text/html;charset=utf-8");


第三步:(由于不明原因firefox发送的请求仍然是latin1的时候执行这一步)

在将请求的参数插入数据库之前还要再执行一次转码(latin1编码转换为utf-8),例如:

String utf8_str = new String( latin_str .getBytes("latin1"),"utf-8");

这一步可以写在一个过滤器中,不怕麻烦也可以在每一次在将请求数据插入之前都进行一次转码。


另外:在连接数据库的时候可以不用加上字符集参数了,直接用用户名和密码连接就可以了,如连接:

con=DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名","用户名","密码");

posted @ 2007-01-14 20:04 银河海盗 阅读(2042) | 评论 (0)编辑 收藏
设计模式学习笔记(2006.10,11,12)

     摘要: 时间过的快么?人的感觉而已,时间还是那样地流过,但人们却有不同的感受,收获的越多,感觉时间过的越慢,认知的越少,时间也就过的越快。有三个月没写点什么东西了,为了让时间记住这三个月都发生了什么,趁现在还没有忘记还是记录下来罢,今天心情不好所以废话也就多点。        按时间顺序一个一个来吧。 ...  阅读全文

posted @ 2007-01-14 03:19 银河海盗 阅读(304) | 评论 (0)编辑 收藏
linux安装配置笔记

关于ubuntu与xp双系统的安装过程

  1. (正常安装完windows之后)分区:使用harddiskmanager或其它分区软件划分一个ext3主分区和swap分区,另外在扩展分区中划分出多个要供linux使用的的逻辑分区。
  2. 将windows系统分区的激活状态设置为关闭(不能设置为隐藏)。将linux主分区设置为激活。
  3. 光盘启动ubuntu的liveCD,进入系统后安装,手动编辑分区表:将/root挂载在linux主分区上,将/usr , /var , /home 挂载在逻辑分区上。grub安装在linux的主分区上(即/root分区),注意grub的分区计数是从0开始,系统目录挂载分区技数从1开始,假如linux系统分区是第一个硬盘的第三个分区,则系统目录挂载分区表示为:/dev/hda3其中a表示第一块硬盘3表示第三个分区,相应的grub表示为(hd0,2)数字0表示第一个硬盘,2表示第三个分区。
  4. 安装完毕后取出光盘重起进入ubuntu系统。

配置ubuntu系统

  1. 上网:sudo pppoeconf
  2. 更改源:sudo gedit /etc/apt/sources.list 按速度快慢(使用ping测试)将源地址添加在开头,最后加入官方源。
  3. 更新软件包信息:sudo apt-get update
  4. 添加中文支持。在语言支持中选chease并打勾,自动下载语言包和输入法。
  5. 在英文界面下添加输入法: sudo apt-get install im-switch libapt-pkg-perl sudo im-switch -s scim -z default 注销一次
  6.  下载可同软件的更新。

与window局域网互联

  1. 安装网络服务nfs 和 smb 修改静态IP。
  2. 添加一个window可访问的用户帐号: sudo adduser -a xxx  输入密码  添加smb用户 smbpasswd -a xxx 输入密码。
  3. 创建一个网络文件夹的本地挂载点  协议:window共享  服务器:对发ip  域:工作组名 用户名:登录对方window的帐号 连接名:随便。

双网卡与window实现共享上网,ububtu做主机

  1. 下载firestarter安装,配置:连接internet:pppo -》打开网络共享:与window互联的网卡—》添加策略:inbound traffic policy :Allow connection:对方IP。—》service: DNS ,SSH ,FTP ,HTTP ... 根据需要开放端口。
  2. 下载并安装bind9,配置bind9:sudo gedit /etc/bind/name.conf.options 在forwards 下添加域名解析服务器的IP地址。

其他注意

  1. firefox与flash插件9.0存在兼容问题,使用较低的flash插件版本。
  2. 备份/var/cache/apt/下的所有软件包文件以避免以后重新下载。以后需要安装时只需copy相应的软件包到该目录下即可。
  3. 可以在使用在windows下安装的ghost8.3在dos下来备份和恢复linux ext3分区。
  4. 安装bin文件:先给予可执行权限chmod +x xxx.bin在sell下输入bin文件所在的路径执行即可,如 ~/backup/xxx.bin
另外注意备份windows的分区表,以防万一

posted @ 2006-12-25 18:26 银河海盗 阅读(391) | 评论 (0)编辑 收藏
XML精要二

     摘要: DTD和Schema简介
DTD和Shema用来定义将用来表示数据的元素
DTD语法
Schema简介
使用 XML 模式,您会有更多的能力来定义什么样的 XML 文档是有效的
  阅读全文

posted @ 2006-11-01 10:21 银河海盗 阅读(225) | 评论 (0)编辑 收藏