好久没有更新了教程了,今天我们开始讲解java面向对象编程基础。有C++等面向对象编程语言基础的同学对于“对象”并不陌生,一个人可以是一个对象,一本书、一支笔都可以作为一个对象,然而人有姓名、性别和年龄等属性,一本书又有页码、出版社和作者等属性。这里,我们就该体会到为什么要引入对象的概念了。对象就可以理解为对现实生活的抽象表示。如果我们定义一个类Person,那么这个类可以有name,sex,age等成员变量,也可以有learn(),work()等方法。由于本教程是针对有一定基础的同学,所以这里就不过多讲解面向对象的概念了。
Java里有个字符串类String,注意这里与C++里面的字符串类型是完全不同的两个概念。因为Java中String是一个类,而C++中的string是一个基本类型,就如int,double等。所以,在Java里,声明了一个String变量,在使用这个变量之前,
可以用new来对它指定一个引用(当然也可以直接这样用:String str="123")
。例如,我们这里需要定义一个字符串类型,并赋初值为“123”,那么我们就可以这样做String str=new String("123");
另外还有一个非常重要的问题是,当我们定义并且初始化一个对象后,我们就不能再对其进行修改。这个问题也许不太好理解,曾经就有同学问过我一下这串代码:
String data=new String();
data="This is my first java program";
data="This is my second java program";
System.out.println(data);
然后可以发现,运行结果是:This is my second program
那同学就纳闷了,不是说String类型的对象一旦初始化了以后就不可再改变了吗?为什么这里改变了呢?
或许很多同学都会有这样的疑问。我们来细细观察一下代码,在我们第一个对对象进行赋值时,所赋的值是对象"This is my first java program",第二次赋的值是对象"This is my second java program",所以,两次赋值分别给变量赋了不同的对象。也就是说,原来的变量是指向对象"This is my first java program"的,而现在的变量指向了对象"This is my second java program",所以原来的对象并没有发生改变。
既然String对象的值无法再进行改变,而通常我们在编写程序的过程当中又要经常运用到可以随时发生改变的字符串变量,那么在Java中提供了一个StringBuffer类,这个类的对象就可以对其值进行随意改动了。这里要注意的是,StringBuffer类的赋值或者值的变更,不能像String那样直接把一个字符串对象赋给它就行了,在这个类里面提供了append()方法,我们必须用这个方法来对其进行赋值。例如:
StringBuffer myPreference=new StringBuffer();
myPreference.append("Apple");
因此,我们在编程过程中如果一个字符串的值在频繁变动的情况下,就要使用StringBuffer类,而不能使用String类。
String类里还有一个经常用的方法equals(),在讲解这个方法之前,我们有必要先讨论一下方法equals()和“==”的区别。形象地可以这样理解,比如有一对双胞胎分别叫Tom和Jack,一天你的朋友跑来告诉你,他说早上在街上看见Tom了,而且他能够完全确定看到的人不是Jack,然而你在中午的时候也看见跟Tom长得很像的一个人,但你不能区分到底是Tom还是Jack。那么这里就要分情况讨论了,如果你看到的人的确是Tom,那么你看到的人与你朋友看到的人之间就可以用“==”来表示了,也就是你跟你朋友所看到的是同一个人;如果你看到的是Jack而不是Tom,那么你看到的人与你朋友看到的人只能用equals()来形容,也就是他们的长相相同而已,他们并非同一个人。这里我们就知道“==”和equals()的区别了,前者只能够用于同一个对象值的判别和比较,而后一个只能用于不同对象的判别和比较。你跟你的朋友,都是把Tom的长相用来当作对象的值的,所以我们就不难区分这两种判别方式了。
接下来我们通过一个完整的实例来验证以上的分析:
public class Java4_1
{
/**
* @param args
*/
public static void main(String[] args)
{
String str1=new String("123");
String str2=new String("123");
System.out.println(str1==str2);
System.out.println(str1.equals(str2));
}
}
运行结果为:
false
True
这一节的内容就到这里,我们下节继续讲解面向对象编程的其它内容。