«September 2025»
123456
78910111213
14151617181920
21222324252627
282930


公告
欢迎大家访问,希望大家多多交流!
    Email:hello105@ustc.edu
    QQ: 7779112
    

我的分类(专题)

首页(63)
Xml收藏(3)
Java收藏(17)
心情(11)
其他(32)


最新日志
DataStage 开发中遇到的几个问题
Tar的详细用法(转自Linux伊甸园)
UNIX常用命令-目录及文件操作命令(z
The 38 Subsystems of
DataStage安装
回来了!
rpm使用
学校好冷清阿
科大怪谈(1)
科大怪谈(2)

最新回复
回复:DataStage 开发中遇到的几
回复:DataStage 开发中遇到的几
回复:发放WALLOP邀请
回复:发放WALLOP邀请
回复:发放WALLOP邀请
回复:发放WALLOP邀请
回复:发放WALLOP邀请
回复:发放WALLOP邀请
回复:发放WALLOP邀请
回复:发放WALLOP邀请

留言板
签写新留言

为什么?
回学校了
关于wallop

统计
blog名称:hello105
日志总数:63
评论数量:174
留言数量:3
访问次数:398424
建立时间:2004年11月8日

链接

Lost Ferry

 




W3CHINA Blog首页    管理页面    写新日志    退出

[Java收藏]Java的 5 个小陷阱(ZZ)
音乐昆虫 发表于 2004/11/30 16:34:13

 1. 对象创建和实例化 java中的变量分为基本类型变量和对象,基本类型包括:boolean、byte、short、int、long、char、float和double,声明后可以直接使用。声明对象后不能直接使用,必须new创建或者通过方法调用返回。 例如: Vector v; int count = v.size(); 的用法是不正确的,因为对象v还没有创建,没有被赋值(初始化)。正确的用法是: Vector v; v = new Vector(); int count = v.size(); 通过方法调用得到对象的例子: Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(System.currentTimeMillis()); 有人要问,对于java的内置类String,也可以声明后不直接使用啊,例如: String s; s = "how about ee2ee?"; 其实,在使用字符串"how about ee2ee?"时,系统已经为这个字符串创建String对象了,系统将其翻译成如下语句: String s; s = new String("how about ee2ee?"); 对于数组对象,也是同样的道理,例如: int[] i = new i[3]; i[0] = 1; i[1] = 2; i[2] = 3; 和 int[] i = {1, 2, 3}; 是等价的。显然,后一种写法更简洁明了。 2. 子类对象和父类对象的相互转换 在面向对象中,子类对象可以直接赋给父类对象,而父类对象却不能直接赋给子类对象。有父类ParentClass和子类ChildClass: ParentClass p; ChildClass c = new ChildClass(); p = c;    //正确,子类对象可以赋给父类对象 c = p;  //编译错误,父类对象不能直接赋给子类对象 ParentClass p = new ParentClass(); c = p;  //编译错误,父类对象不能直接赋给子类对象 c = (ChildClass)p;    //运行错误,类型转换异常,因为p是父类的实例化对象,而不是子类ParentClass的实例化对象 p = new ChildClass();   //正确,子类对象可以赋给父类对象 c = (ChildClass)p;    //正确,因为p指向的就是ChildClass的实例化对象 3. 子类对象数组和父类对象数组的相互赋值 子类对象数组可以直接赋值给父类对象数组,反之则不然。例如,有父类ParentClass对象数组ps和子类ChildClass数组cs: ParentClass[] ps; ChildClass[] cs = new ChildClass[10]; ps = cs;    //正确 ps = new ParentClass[10]; ChildClass[] cs; cs = ps;    //编译错误 ps = new ChildClass[10]; cs = (ChildClass[])ps;    //编译通过,但运行时出现类型转换异常 对于最后一种情况,应使用System.arraycopy把一个数组中的元素赋值到另外一个数组。以上的最后一行代码应改写如下: System.arraycopy(ps, 0, cs, 0, ps.length); 4. java中的byte类型问题 byte类型占用1个字节的存储单元,其取值范围为-128 ~ +127。在二进制流处理中,如何把一个byte变量的值转换为0 ~ 255的无符号整数呢,可以通过如下样例代码实现: byte b = -10; int i; if (b < 0) {     i = b + 256;    //转换为对应的无符号整数 } else {     i = b; } 5. java中的数据精度问题 有如下代码: int i = 1000000; long l = i * 1000000; System.out.println(l); 请问,程序运行的输出结果是什么? 如果回答1000000000000,那就错了!输出的结果是一个负数:-727379968! 为什么会出现这样的异常现象呢?这需要使用java的类型转换机制来解释。java中,低精度类型可以赋值给高精度类型,例如:int变量可以直接赋值给long变量,反过来需要进行强制类型转换(可能会导致数据精度丢失)。上例中,变量i为int类型,关系式: long l = i * 1000000; 对于后面的常量1000000,java会将其解释为int类型,int类型 + int类型,运算结果仍为int类型,导致了数据精度的丢失。在赋值给long变量l之前,精度已经丢失了。

阅读全文(1813) | 回复(0) | 编辑 | 精华


发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)
站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.031 second(s), page refreshed 144797118 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号