您的位置:首页 > 编程语言 > Java开发

Java基础---类和对象

2015-11-07 15:38 295 查看
一.面向对象概述
面向对象是一种编程思想,相对面向过程而言更加灵活。

例子:
面向过程:把大象装进冰箱
1 打开冰箱 2 存储大象 3 关上冰箱。 这里的打开存储和关上都是需要人去关的,强调的是冰箱具有的功能。

面向对象:把大象装进冰箱
1 冰箱打开 2 冰箱存储 3 冰箱关闭。 这里的打开存储和关闭是冰箱自己去完成的,也就是冰箱自己具备了那些行为功能,强调的是具备了功能的对象。

简单来说,面向对象更加符合人的思考方式,可以让事情简单化,执行任务的是对象而不是人,程序员成了指挥者而非执行者。

二.类

类: 打个比方,动物类,在你脑子里有个模型,一想到动物就会知道比如有毛啊,四条腿之类的。就是所有动物共有的特征。

对象:具体的一只猫。或具体的一只狗,这就是对象。 对象是建立字类的基础上的。有了一个类的模版,我们才能确定某一个具体的对象。

1)成员变量
在Java中对象的属性也称为成员变量。为了了解成员变量,首先定义了一个图书类,成员变量对应于类对象的属性,在Book类中设置3个成员变量,分别为id,name和category,分别对应于图书编号、图书名称和图书类别3个图书属性。
示例:
class BookDmeo
{
private String name;                 //定义一个String型的成员变量

public String getName(){			//定义一个getName()方法
int id = 0;						//局部变量
setName("Java");				//调用类中的其他方法
return id+this.name;			//设置方法返回值
}
private void setName(String name){	//定义一个setName()方法
this.name = name;				//将参数值赋予类中的其他成员变量
}
public BookDemo getBook(){
return this;					//放回BookDemo类引用
}
}


2)成员方法
在Java语言中使用成员方法对应于类对象的行为。以Book类为例,它包含getName()和setName()两个方法。
成员方法的定义方式如下:
权限修饰符 返回值类型 方法名(参数类型 参数名){
...//方法体
return 返回值;
}
注意:Java中的成员方法无返回值可以使用void关键字表示。

3)权限修饰符
Java中的权限修饰符主要包括private、public、protected和默认。

访问修饰符
同一个类
同包
不同包,子类
不同包,非子类
private

protected



public




默认


4)局部变量
之前说过成员方法,如果在成员方法内定义一个变量,那么这个变量就称为局部变量。
局部变量和成员变量的区别:

成员变量:

a)成员变量定义在类中,在整个类中都可以被访问。

b) 成员变量随着对象的建立而建立,存在于对象所在的堆内存中。

c) 成员变量有默认初始化值。

局部变量:

a) 局部变量只定义在局部范围内,如:函数内,语句内等。

b) 局部变量存在于栈内存中。

c) 作用的范围结束,变量空间会自动释放。

d) 局部变量没有默认初始化值。

5)this关键字
this关键字和几种用法:
1. 当成员变量和局部变量重名时,在方法中使用this时,表示的是该方法所在类中的成员变量。(this是当前对象自己)
2.把自己当作参数传递时,也可以用this.(this作当前参数进行传递)

3.有时候,我们会用到一些内部类和匿名类,如事件处理。当在匿名类中用this时,这个this则指的是匿名类或内部类本身。这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名。

4. 4. 在构造函数中,通过this可以调用同一类中别的构造函数。

三.对象

对象的创建:
Test test = new Test();
Test test = new Test("a");
test对象被创建出来时,就是一个对象的引用,这个引用的内存中为对象分配了存储空间。每个对象都是相互独立的,在内存中占据独立的内存地址,并且每个对象都具有自己的生命周期,当一个对象的生命周期结束时,对象就变成了垃圾,由Java虚拟机自带的垃圾回收机制处理,不能再被使用。

对象的比较:两种比较方式
示例:
class compare
{
public static void main(String[] args)
{
String c1 = new String("abc");    //创建两个String型对象引用
String c2 = new String("abc");
String c3 = c1;					   //将c1对象引用赋予c3
//使用“==”运算符比较c2和c3
System.out.println("c2==c3的运算结果为:"+(c2==c3));
//使用equals()方法比较c2和c3
System.out.println("c2.equals(c3)的运算结果为:"+(c2.equals(c3)));
}
}


两种比较方式的区别:
== 和 Equals 的区别

  1. == 是一个运算符。

  2.Equals则是string对象的方法,可以.(点)出来。

  

  我们比较无非就是这两种 1、基本数据类型比较 2、引用对象比较

  1、基本数据类型比较

  ==和Equals都比较两个值是否相等。相等为true 否则为false;

  

  2、引用对象比较

  ==和Equals都是比较栈内存中的地址是否相等 。相等为true 否则为false;

  

  需注意几点:

  1、string是一个特殊的引用类型。对于两个字符串的比较,不管是 == 和 Equals 这两者比较的都是字符串是否相同;

  2、当你创建两个string对象时,内存中的地址是不相同的,你可以赋相同的值。

  所以字符串的内容相同。引用地址不一定相同,(相同内容的对象地址不一定相同),但反过来却是肯定的;

  3、基本数据类型比较(string 除外) == 和 Equals 两者都是比较值;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: