分享
 
 
 

Java初学者容易混淆的几个问题

王朝java/jsp·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

1.String类和StringBuffer类

它们都是处理字符串的类,但是它们有一个最大的区别,那就是,String对象是存储你不能改动的文本字符

串,相反,如果你希望改动,则应使用StringBuffer类作为替换.

eg1:

......

//omit some code

String s1="You are hired!";

System.out.println(s1.replace('h','f'));//用f把字串中的h替换了

System.out.println(s1);

......

//omit some code

运行结果:

You are fired!

You are hired!

结果分析:

从结果,明显可知,s1的值并没有被改变,而第一行结果只是屏幕内容的替换.

eg2:

......

//omit some code

StringBuffer s2=new StringBuffer("Hello from Java!");

s2.replace(6,10,"to");

System.out.println(s2);

......

//omit some code

运行结果:

Hello to Java!

结果分析:

显然,s2的值已改变.

2.位逻辑与条件逻辑

首先声明, 为了与位逻辑更好区分开来,我把通常所说的逻辑取了个别名叫做条件逻辑.

它们都有各自的操作符,位逻辑操作符有:&(与运算),^(异或运算),|(或运算);条件逻辑操作符有:&&(并

且),||(或者).

位逻辑运算通常是针对两个数而言,实行位操作;而条件逻辑运算是针对两个条件表达式而言,实行条件操

作.其实,位逻辑操作符一样可以实现条件操作,但是此时有一个重要的区别:用位操作符时,不管操作符两边的

条件表达式成不成立,它都要通通进行运算判断,而条件逻辑操作符不一样了,如果通过左侧的操作数就可以进

行它们需要的判断,那么它就不会再计算右侧的操作数了,这种情况叫短路.废话少说!且看下例.

eg1:

......

//omit some code

double value=0;

if(value!=0 && 1/value

System.out.println("The value is not too small.");

}

else{

System.out.println("The value is too small.");

}

......

//omit some code

运行结果:

The value is too small.

结果分析:

照理说应会出现除数为0的错误,但是我刚才说了,由于条件逻辑操作符是短路操作符,显然,value!=0不

成立,立即就可作出判断应执行else后的语句,所以它就不再会运算判断1/value

例:

eg2:

......

//omit some code

double int1=0,int2=1,int3=1;

if(int1!=0 & (int2=2)==1){}

System.out.println("int2="+int2);

if(int1!=0 && (int3=2)==1){}

System.out.println("int3="+int3);

......

//omit some code

运行结果:

int2=2.0

int3=1.0

结果分析:

我想不用我分析了,你应该懂了吧.

3.实例变量与类变量

可以通过两种方法在类中存储数据───作为实例变量和类变量.实例变量是特定于对象的,如果你有两个对

象(即一个类的两个实例),每一个对象中的实例变量独立于另一个对象中的实例变量的;另一方面,两个对象的

类变量均指向相同的数据,并因此面保存相同的值,换句话说,类变量被类中的所有对象共享.差点忘了,它们在

形式上的区别,类变量在声明时比实例变量多一个static.

eg:

class data

{

public int intdata=0;//显然,intdata在这儿是实例变量

}

public class exam

{

public static void main(String[] args)

{

data a,b;

a=new data();

b=new data();

a.intdata=1;

System.out.println("b.indata="+b.intdata);

}

}

运行结果:

b.intdata=0

结果分析:

可以看出,a.intdata的值虽然变了,但并没有影响b.intdata.但是如果在data类中声明intdata时,在其前

面加上static就变成类变量了(即:public static int intdata=0;),则此时运行结果会变为:

b.intdata=1

这次a.intdata值的改变可把b.intdata影响了,事实上,对象a和b的类变量均指向相同的数据,所有值一

样,这就是类变量的作用.

4.实例方法,类方法,构造器方法

我们通常所说的方法系指实例方法,就像c语言中的函数一样,其具体方法我就不用说了,在这里我主要是

用它来区分类方法和构造器方法.类方法与实例方法最大的区别是:在形式上类方法多一个static,在用法上,

不必创建对象就可直接调用类方法(而实例方法却一定要先创建对象,再通过对象调用).

eg:

class add

{

static int addem(int op1,int op2)

{

return op1+op2;

}

}

public class xxf

{

public static void main(String[] args)

{

System.out.println("addem(2,2)="+add.addem(2,2));

} //直接用类名作为对象调用类方法

}

注: 也可按通常的方法,即先创建对象,再调用方法,不过,这时static就无任何意义了.

再说说构造器方法,它是用来初始化对象中的数据的一种方法,创建很容易,只需在类中加上一个与这个类

同名的方法,不需要在前面加任何访问说明符或者返回类型,另外,构造器也一样可以向方法一样传递参数.

eg:

class data

{

private String data1;//事先声明

data(String s)

{

data1=s; /*通过接收数据来初始化变量.(注:不能在构造器内

声明变量,事先在外就要声明.)*/

}

public String getdata()

{

return data1;

}

}

public class xxf

{

public static void main(String[] args)

{

System.out.println((new data("I love you")).getdata());/*通过传递参数调用构造器新建一

个对象,再通过对象调用方法得到数据*/

}

}

5.接口与类

类是对一类特定对象的规格说明,我们可以类定义创建对象,通过创建对象来组合所有属于该类的组件,而

接口不能这样做.而接口实质上就是一个常量和抽象方法的集合,要使用一个接口,就需要在类中实现这个接

口,然后作为类定义的一部分,编写接口中声明的每一个方法,接口中的方法永远是public,abstract,接口中的

常量永远是public static和final,因此不需要为它们说明属性.

因为在Java中不支持多重继承,但是,可以用接口来实现类似的功能,这是接口的重要作用之一.

eg:

interface anyone //定义一个接口

{

final double PI=3.1416;

void setNumber(int number);

int getNumber();

}

interface anyother //定义另一个接口

{

void setString(String str);

String getString();

}

class xxf implement anyone,anyother //定义一个类,并使用两个接口

{

int number;

String str;

public xxf(){}

void setNumber(int number)

{

this.number=number;

}

void setString(String str)

{

this.str=str;

}

void int getNumber(){}//可以为一个空实现.

void String getString(){}

}

//在类中必须实现接口中声明的所有方法.(当然也可不必,但是要用到适配器类或用抽象类)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有