首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 数据库 第二书店 程序员

Java精华积累:每个初学者都应该搞懂的问题!


对于这个系列里的问题,每个学Java的人都应该搞懂。当然,如果只是学Java玩玩就无所谓了。如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列。内容均来自于CSDN的经典老贴。

问题四:final关键字到底修饰了什么?

final使得被修饰的变量"不变",但是由于对象型变量的本质是“引用”,使得“不变”也有了两种含义:引用本身的不变,和引用指向的对象不变。

引用本身的不变:
final StringBuffer a=new StringBuffer("immutable");
final StringBuffer b=new StringBuffer("not immutable");
a=b;//编译期错误

引用指向的对象不变:
final StringBuffer a=new StringBuffer("immutable");
a.append(" broken!"); //编译通过

可见,final只对引用的“值”(也即它所指向的那个对象的内存地址)有效,它迫使引用只能指向初始指向的那个对象,改变它的指向会导致编译期错误。至于它所指向的对象的变化,final是不负责的。这很类似==操作符:==操作符只负责引用的“值”相等,至于这个地址所指向的对象内容是否相等,==操作符是不管的。

理解final问题有很重要的含义。许多程序漏洞都基于此----final只能保证引用永远指向固定对象,不能保证那个对象的状态不变。在多线程的操作中,一个对象会被多个线程共享或修改,一个线程对对象无意识的修改可能会导致另一个使用此对象的线程崩溃。一个错误的解决方法就是在此对象新建的时候把它声明为final,意图使得它“永远不变”。其实那是徒劳的。

问题五:到底要怎么样初始化!

本问题讨论变量的初始化,所以先来看一下Java中有哪些种类的变量。
1. 类的属性,或者叫值域
2. 方法里的局部变量
3. 方法的参数

对于第一种变量,Java虚拟机会自动进行初始化。如果给出了初始值,则初始化为该初始值。如果没有给出,则把它初始化为该类型变量的默认初始值。

int类型变量默认初始值为0
float类型变量默认初始值为0.0f
double类型变量默认初始值为0.0
boolean类型变量默认初始值为false
char类型变量默认初始值为0(ASCII码)
long类型变量默认初始值为0
所有对象引用类型变量默认初始值为null,即不指向任何对象。注意数组本身也是对象,所以没有初始化的数组引用在自动初始化后其值也是null。

对于两种不同的类属性,static属性与instance属性,初始化的时机是不同的。instance属性在创建实例的时候初始化,static属性在类加载,也就是第一次用到这个类的时候初始化,对于后来的实例的创建,不再次进行初始化。这个问题会在以后的系列中进行详细讨论。

对于第二种变量,必须明确地进行初始化。如果再没有初始化之前就试图使用它,编译器会抗议。如果初始化的语句在try块中或if块中,也必须要让它在第一次使用前一定能够得到赋值。也就是说,把初始化语句放在只有if块的条件判断语句中编译器也会抗议,因为执行的时候可能不符合if后面的判断条件,如此一来初始化语句就不会被执行了,这就违反了局部变量使用前必须初始化的规定。但如果在else块中也有初始化语句,就可以通过编译,因为无论如何,总有至少一条初始化语句会被执行,不会发生使用前未被初始化的事情。对于try-catch也是一样,如果只有在try块里才有初始化语句,编译部通过。如果在catch或finally里也有,则可以通过编译。总之,要保证局部变量在使用之前一定被初始化了。所以,一个好的做法是在声明他们的时候就初始化他们,如果不知道要出事化成什么值好,就用上面的默认值吧!

其实第三种变量和第二种本质上是一样的,都是方法中的局部变量。只不过作为参数,肯定是被初始化过的,传入的值就是初始值,所以不需要初始化。

问题六:instanceof是什么东东?

instanceof是Java的一个二元操作符,和==,>,<是同一类东东。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。举个例子:

String s = "I AM an Object!";
boolean isObject = s instanceof Object;

我们声明了一个String对象引用,指向一个String对象,然后用instancof来测试它所指向的对象是否是Object类的一个实例,显然,这是真的,所以返回true,也就是isObject的值为True。
instanceof有一些用处。比如我们写了一个处理账单的系统,其中有这样三个类:

public class Bill {//省略细节}
public class PhoneBill extends Bill {//省略细节}
public class GasBill extends Bill {//省略细节}

在处理程序里有一个方法,接受一个Bill类型的对象,计算金额。假设两种账单计算方法不同,而传入的Bill对象可能是两种中的任何一种,所以要用instanceof来判断:

public double calculate(Bill bill) {
if (bill instanceof PhoneBill) {
//计算电话账单
}
if (bill instanceof GasBill) {
//计算燃气账单
}
...
}
这样就可以用一个方法处理两种子类。

然而,这种做法通常被认为是没有好好利用面向对象中的多态性。其实上面的功能要求用方法重载完全可以实现,这是面向对象变成应有的做法,避免回到结构化编程模式。只要提供两个名字和返回值都相同,接受参数类型不同的方法就可以了:

public double calculate(PhoneBill bill) {
//计算电话账单
}

public double calculate(GasBill bill) {
//计算燃气账单
}

所以,使用instanceof在绝大多数情况下并不是推荐的做法,应当好好利用多态。

http://www.javaresearch.org/faq/thread.jsp?column=723&thread=22395



他们设置了哪些标签:


/ 1 20070324003 2007-03-27 21 Good! hao J2se java JAVA.初学 Java必学 JAVA初学问题 Java初学应该弄懂的问题 JAVA基础 Java技术 Java精华积累 Java精华积累:每个初学者都应该搞懂的问题 Java精华积累:每个初学者都应该搞懂的问题! Java相关 Java学习 java注意问题 jichuwenti knowledge new string String等基础问题 Study Very yz3 初学 初学者 关键字final 基础 基础类 面试 入门 问题 学习 学习tag 已阅

谁收藏了这个网址:


yanglilibaobao收录

时间:2007-1-9 10:56:19 | 相关网摘

ww_goddess收录

时间:2007-1-9 11:23:41 | 相关网摘

lsyhmq收录

时间:2007-1-9 11:24:15 | 相关网摘

aric20099收录

时间:2007-1-9 11:28:35 | 相关网摘

kkids收录

时间:2007-1-9 13:55:44 | 相关网摘

Augustans收录

时间:2007-1-9 14:26:51 | 相关网摘

fatcatman收录

时间:2007-1-9 20:04:50 | 相关网摘

xuxiaozhao_3411收录

时间:2007-1-9 21:02:54 | 相关网摘

crowtlf收录

时间:2007-1-9 21:06:33 | 相关网摘

magicboy_1013收录

使用标签:Java相关,时间:2007-1-9 23:48:12 | 相关网摘

wwwlike收录

时间:2007-1-9 23:57:18 | 相关网摘

yopeng收录

时间:2007-1-10 10:15:10 | 相关网摘

suky888收录

时间:2007-1-10 10:22:45 | 相关网摘

yangzhouyu收录

时间:2007-1-10 12:29:01 | 相关网摘

bjxfan收录

时间:2007-1-10 13:04:31 | 相关网摘

badao收录

使用标签:java,时间:2007-1-10 13:26:09 | 相关网摘

xyz800316收录

使用标签:Java, Study,时间:2007-1-10 13:55:49 | 相关网摘

实践摘要

fu_pro收录

时间:2007-1-10 14:24:26 | 相关网摘

wlp555ren收录

时间:2007-1-10 16:26:17 | 相关网摘

zzhdavid收录

时间:2007-1-10 19:08:21 | 相关网摘

cyberprince收录

时间:2007-1-10 20:14:09 | 相关网摘

judyzzcn收录

时间:2007-1-10 20:17:05 | 相关网摘

leavef收录

时间:2007-1-11 14:37:24 | 相关网摘

p0tti收录

时间:2007-1-11 17:28:22 | 相关网摘

guoxyj收录

时间:2007-1-11 20:46:50 | 相关网摘

lower0661收录

使用标签:Java精华积累,时间:2007-1-11 21:46:41 | 相关网摘

zh2608收录

使用标签:new,时间:2007-1-11 22:30:55 | 相关网摘

goal78收录

时间:2007-1-12 12:46:14 | 相关网摘

xiaowu0212收录

使用标签:java, 学习,时间:2007-1-12 13:27:49 | 相关网摘

daisylove收录

时间:2007-1-12 17:35:17 | 相关网摘

Bright__chen收录

时间:2007-1-13 21:05:38 | 相关网摘

jfsaka收录

使用标签:Java精华积累,时间:2007-1-13 23:27:41 | 相关网摘

cyllen_972收录

使用标签:Java精华积累,时间:2007-1-14 2:42:29 | 相关网摘

wgqlj收录

时间:2007-1-14 17:45:31 | 相关网摘

yzeaho收录

使用标签:21,时间:2007-1-15 11:20:18 | 相关网摘

212

qintao1203收录

时间:2007-1-15 11:55:21 | 相关网摘

mnvkiller收录

时间:2007-1-16 2:47:42 | 相关网摘

zhuimeng_yu收录

使用标签:java,时间:2007-1-16 7:59:31 | 相关网摘

Java精华积累:每个初学者都应该搞懂的问题!

liuwalker收录

时间:2007-1-16 10:36:42 | 相关网摘

adaiwei收录

时间:2007-1-16 10:50:45 | 相关网摘

junjie_355226630收录

使用标签:java,时间:2007-1-16 17:54:18 | 相关网摘

Java精华积累:每个初学者都应该搞懂的问题!

akbar808收录

时间:2007-1-16 17:57:21 | 相关网摘

china8848收录

时间:2007-1-16 22:54:12 | 相关网摘

yfy_1906收录

使用标签:Java精华积累,时间:2007-1-17 9:30:37 | 相关网摘

danjingwu收录

使用标签:java,时间:2007-1-17 10:29:30 | 相关网摘

chenzhong370收录

时间:2007-1-17 14:18:40 | 相关网摘

zcm790619收录

时间:2007-1-17 18:08:10 | 相关网摘

danboy收录

时间:2007-1-17 18:20:31 | 相关网摘

yushuicsdn收录

时间:2007-1-17 21:28:24 | 相关网摘

libhugh收录

时间:2007-1-17 23:36:16 | 相关网摘

noexcusechen收录

使用标签:Java精华积累,时间:2007-1-18 9:02:12 | 相关网摘

wulitou2006收录

时间:2007-1-18 12:21:03 | 相关网摘

JAVA

wangmeng收录

使用标签:Java精华积累,时间:2007-1-18 12:45:52 | 相关网摘

Java精华积累

frakeman收录

时间:2007-1-18 13:05:34 | 相关网摘

dreamingbus收录

时间:2007-1-18 18:38:04 | 相关网摘

snow8261收录

使用标签:Java,时间:2007-1-18 22:56:40 | 相关网摘

haifengqiu收录

使用标签:初学者, 问题,时间:2007-1-19 13:00:05 | 相关网摘

onlyulll收录

使用标签:Java精华积累,时间:2007-1-19 23:38:29 | 相关网摘

Java精华积累

Tianjimingluo收录

时间:2007-1-20 6:52:43 | 相关网摘

mhpark84收录

时间:2007-1-20 12:01:52 | 相关网摘

djsky1234收录

时间:2007-1-20 12:33:59 | 相关网摘

homebear收录

时间:2007-1-20 21:18:48 | 相关网摘

nippycn收录

时间:2007-1-20 22:01:00 | 相关网摘

fantasyyong收录

时间:2007-1-21 13:11:01 | 相关网摘

Lucas_643收录

时间:2007-1-21 23:19:57 | 相关网摘

solarpp收录

使用标签:JAVA,时间:2007-1-21 23:32:51 | 相关网摘

zxb3235收录

使用标签:Java精华积累:每个初学者都应该搞懂的问题!,时间:2007-1-22 6:16:23 | 相关网摘

zwsky收录

时间:2007-1-22 10:14:56 | 相关网摘

skyfinder收录

时间:2007-1-22 14:12:09 | 相关网摘

xbao0076收录

使用标签:Java精华积累,时间:2007-1-22 15:55:16 | 相关网摘

Java精华积累

yxiaowang收录

时间:2007-1-22 16:57:01 | 相关网摘

fwso2008收录

时间:2007-1-22 18:23:10 | 相关网摘

echo3008收录

时间:2007-1-22 22:14:13 | 相关网摘

fyafeng收录

时间:2007-1-22 23:27:14 | 相关网摘

jacob123收录

使用标签:Java精华积累,时间:2007-1-23 4:07:22 | 相关网摘

Java精华积累

terryhuang收录

时间:2007-1-23 8:58:34 | 相关网摘

对于这个系列里的问题,每个学Java的人都应该搞懂。当然,如果只是学Java玩玩就无所谓了。如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列。内容均来自于CSDN的经典老贴。

问题一:我声明了什么!

ljux收录

时间:2007-1-23 12:41:57 | 相关网摘

Java基础

cooljelly收录

时间:2007-1-23 15:35:23 | 相关网摘

java20052006收录

使用标签:HAO, HAO,时间:2007-1-23 16:24:49 | 相关网摘

HAHAHAHAHA

xiaoyuan001收录

时间:2007-1-23 17:30:58 | 相关网摘

wxy5758收录

使用标签:Java精华积累,时间:2007-1-23 22:10:56 | 相关网摘

Java精华积累

pengding95收录

时间:2007-1-23 22:13:32 | 相关网摘

luckne收录

时间:2007-1-23 22:28:11 | 相关网摘

BoyHaXin收录

时间:2007-1-24 14:05:56 | 相关网摘

Java精华积累:每个初学者都应该搞懂的问题!

有时间再看吧

JlinShu收录

时间:2007-1-24 14:21:02 | 相关网摘

Java精华积累:每个初学者都应该搞懂的问题!
我也要看

isly_baby收录

使用标签:string,时间:2007-1-24 17:31:15 | 相关网摘

好东西当然收藏

fuyan1577_cn收录

时间:2007-1-24 18:08:19 | 相关网摘

youlec收录

使用标签:Java精华积累,时间:2007-1-24 19:15:27 | 相关网摘

一些基本的关于java的常识性问题

rebolman收录

时间:2007-1-24 19:34:22 | 相关网摘

lee_king收录

时间:2007-1-24 20:37:54 | 相关网摘

基础的东西是要搞清楚地

cxfgod收录

时间:2007-1-24 22:15:27 | 相关网摘

ermao927收录

时间:2007-1-24 23:12:19 | 相关网摘

chenche1588收录

使用标签:Java精华积累,时间:2007-1-25 0:16:59 | 相关网摘

一些基本的关于java的常识性问题

xifanniao收录

使用标签:java,时间:2007-1-25 13:43:43 | 相关网摘

qingtanlang收录

使用标签:Java, 入门,时间:2007-1-25 15:05:07 | 相关网摘

Nohurt收录

时间:2007-1-25 17:49:09 | 相关网摘

ghyyboy收录

时间:2007-1-25 23:02:59 | 相关网摘

kukou收录

时间:2007-1-25 23:21:21 | 相关网摘

nwell收录

时间:2007-1-26 10:31:56 | 相关网摘

mu_tou收录

时间:2007-1-27 1:12:03 | 相关网摘


网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
Copyright © 2000-2008, CSDN.NET, All Rights Reserved