Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > IT 认证 > 其它认证 > Java初学者容易混淆的几个问题
【标  题】:Java初学者容易混淆的几个问题
【关键字】:初学者,Java,Java
【来  源】:网络

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

Your Ad Here


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<1000){

   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<1000了.如果不懂请再看一例:

   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(){}

   }

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

菜鸟入门篇:如何迅速获取Java认证?:【上一篇】
勿以恶小而为之:Java编程的恶魔:【下一篇】
【相关文章】
  • 菜鸟入门篇:如何迅速获取Java认证?
  • java入门学习指导之最佳方向(上)
  • “编程美女”记:立志向编程牛人学Java
  • java入门学习指导之最佳方向(下)
  • 1年Java历程的回顾、反思与展望(上)
  • 1年Java历程的回顾、反思与展望 (下)
  • 困惑在Java路上-IT男人很累吗?
  • 我与Java的故事-从这里开始
  • JAVA的“精华”就在“面向对象思想”
  • 用javabean来实现MySQL的分页显示
  • 【随机文章】
  • 公司代理服务器配置技术
  • THotKey
  • A bug about Structure Alignment
  • JScript 方法 - cos 方法
  • 堆排序汇编版
  • 信息时代如何成为一名优秀的程序员
  • 防范墨菲病毒有高招
  • C++ Builder 创建和编辑包
  • 总体了解C#(4 委托)
  • 内存数据库--eXtremeDB
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.