一.面向对象概述

面向对象是一种编程思想,相对面向过程而言更加灵活。

例子:

面向过程:把大象装进冰箱

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 两者都是比较值;