JAVA学习第六课(面向对象)

面向对象首先要先了解什么是面向对象?

面向对象:就是不断的和对象打交道。

早期解决问题,都是面向过程(简单来说就是一步一步怎么做,面对的是过程,即强调动作),如C语言,利用函数,进行函数的调用。

思想:

面向对象:强调的是对象,对象即指实体。c++,java,c#

例子:把大象装进冰箱

面向过程实现:1.打开冰箱  2.存储大象  3.关上冰箱

面向对象实现:(找到实体,实体封装着这些功能,也就是找到冰箱,冰箱具备打开、存储、关闭功能)
1.冰箱打开  2.冰箱存储   3.冰箱关闭

面向对象的特点:

1.符合人们的思考习惯。  2.将复杂的问题简单化

3.角色转变,针对的是对象,即面向过程中的执行者,变为面向对象的指挥者。

(土一点的说,就是对象有你需求的功能,具体它怎么做,不关我们的事)


所以解决一个问题,先找有没有解决这个问题对象,如果没有,自己编写一个对象。

面向对象思考问题举例:

   面试官招聘人员,就是面向对象的很好例子,企业接受一个项目,设计、编写、测试,面试官一个人可以完成,但是浪费大量的时间和精力,
所以他就需要招聘一些人员来帮助完成,而对象就指的是被招聘的人员,他们具备了设计、编写、测试等功能,但具体怎么实现的,面试官不
需要知道。面试官要做的,只需要找到这个对象,并指挥他来解决这个问题即可。

JAVA里面,什么都可以成为对象。
有对象找对象用对象,没对象造对象用对象,并不断的维护对象之间的关系。


面向对象的特征:

1.封装  2.继承  3.多态


规则:哪个对象,对某一动作最清楚,就把动作定义在该对象中。搬家公司搬东西,他们只需要告诉,搬运工人搬到哪即可,至于怎么搬,搬运工人最清楚,自然把搬运这个动作定义在搬运工人这个对象中。

(指挥对象做事情)


代码理解:

/*定义类就是在定义类中的成员,即组成部分
 * 成员函数:对应的就是事物功能
 * 成员变量:对应的就是属性
 * 
 */

//具体体现

/*描述搬运过程
 * 搬运工人 这一名次由属性和功能组成
 * 属性:1.人数 2.性别
 * 功能:搬运
 */
class Man
{
	int num ; //成员
	String sex;//成员
	void function()//成员
	{
		System.out.println(num+" .... "+sex);
	}
	/*public static void main(String[] args)
	{
		//Man这个类只是描述某一事物,当要用到它时,才运行,并不需要其独立运行,当然也可以
		//所以,要用到这个事物时,只需要在一个类中,进行其对象的创建并调用即可
	}*/
}
/*描述汽车
 * 属性:数量、颜色
 * 功能,启动
 */
class Car
{
	int num = 3;
	String color = "blue";
	void run()
	{
		System.out.println(num+" ... "+color);
	}
	
}
public class Main 
{
	public static void main(String[] args)
	{
		/*完成对象的创建,并定义该对象的名称*/
		//创建一个Man的实体,通过new关键字实现
		Man BLF1 = new Man();//定义一个Man类型的变量BLF2,Man是类,BLF2是变量名
		//用类来定义的变量,就是一个 类 类型的变量,指向了该类的对象
		
		BLF1.function();//使用对象中的内容,形式:对象.成员,来完成调用	
		
		Car BLF2 = new Car();
		BLF2.run();//对象.组成部分
	}
}


趁热打铁:


class Man
{
	int num ; //成员
	String sex;//成员
	void function()//成员
	{
		System.out.println(num+" .... "+sex);
	}

}

//堆中储存的是对象
public class Main 
{
	public static void main(String[] args)
	{
		Man BLF = new Man();
		Man BLF2 = BLF;
		//Man BLF2 = new Man();
		// BLF2 = BLF;
		BLF.num = 4;
		BLF2.sex = "man";
		System.out.println(Integer.toBinaryString(BLF.num));
		BLF.function();
		/*
		 * 100
		 *	4 .... man
		 */
		//PS:一旦产生对象,那么这个对象一定具备着这个类中所描述的内容
	}
	
}

/**
 * 成员变量和局部变量的区别
 *1. 局部变量定义在函数、语句、代码块中,并且只在所属区域中有效
 * 成员变量定义在类中,且整个类中都可以访问
 * 2.成员变量存在于堆内存的对象中
 * 局部变量存在栈内存的方法中
 * 3.成员变量随着对象的创建而存在,随着对象的消失而消失
 * 局部变量随着所属区域的执行而存在,随着所属区域的结束而释放
 * 4.成员变量都有默认初始化值,局部变量没有初始化值
 */


类 类型参数:

class Man
{
	int num = 4; //成员
	String sex;//成员
	void function()//成员
	{
		
		System.out.println(num+" .... "+sex);
	}

}
public class Main 
{
	public static void main(String[] args)
	{
		/*Man a = new Man();
		a.num = 4;
		a.sex = "man";
		Man b = new Man();
		b.num = 4;
		b.sex = "man";*///代码冗杂,进行调用
		Man a = new Man();
		Man b = new Man();
		show(a);
		show(b);
		a.function();
		b.function();
		/*
		 * 4 .... man
		 * 4 .... man
		 */
	}
	public static void show(Man b) //类类型的变量一定指向对象,否则就是null
	{
		b.num = 4;
		b.sex = "man";
	}
	
}



了解:匿名对象


栈内存存储的是局部变量,所以匿名变量储存在堆中


class Car
{
	int num ;//成员
	String color;//成员
	void function()//成员
	{
		
		System.out.println(num+" .... "+color);
	}

}
public class Main 
{
	public static void main(String[] args)
	{
		/*
		 * 匿名对象
		 * new Man();
		 * 也就是定义对象时的简写格式
		 * */
		new Car();
		
		//使用方法一:当对象对方法仅进行一次调用,即可简化为匿名对象
		/*
		 * new Car().num = 4;
		 * new Car().color = "man";
		 * new Car().function;
		 * 打印结果:0....null
		 * 理由如下图:
		 * new Car().num = 4;执行完后,自动变成堆中的垃圾
		 * */
		//使用方法二:匿名对象可以做实际参数进行传递
		show(new Car());
	}
	public static void show(Car a)
	{
		a.num = 4;
		a.color = "MAN";
		a.function();
	}

}


数据类型参数传递问题:


//基本数据类型参数传递
public class Main
{
	public static void main(String[] args)
	{
		int x = 3;
		show(x);
		System.out.println(x);
	}
	public  static void show(int x) 
	{
		x = 9;
		//return ;
	}
}
//打印 3
改变的只是show中x的值,执行完后弹栈,释放,但是本来的x的值并为改变。

/引用数据类型参数传递
public class Main 
{
	int  x = 3;
	public static void main(String[] args)
	{
		Main d = new Main();
		d.x = 9;
		show(d);
		System.out.println(d.x);
	}
	public  static void  show(Main b) 
	{
		b.x = 1;
	}
}
//打印 1 ,栈 和 堆
//执行如图


图示:很清晰,引用数据类型变量,在栈和堆中执行,栈中show也引用了类d的地址,所以可以改变其中x的值


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值