JAVA自学教程之(面向对象)



JAVA自学教程之(面向对象)。

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

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

早期解决问题,都是面向过程(简单来说就是一步一步怎么做,面对的是过程,即强调动作),如C语言,利用函数,进行函数的调用。
思想:
面向对象:强调的是对象,对象即指实体。c++,java,c#
例子:把大象装进冰箱
面向过程实现:1.打开冰箱  2.存储大象  3.关上冰箱
面向对象实现:(找到实体,实体封装着这些功能,也就是找到冰箱,冰箱具备打开、存储、关闭功能) 1.冰箱打开  2.冰箱存储   3.冰箱关闭
面向对象的特点:
1.符合人们的思考习惯。  2.将复杂的问题简单化

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

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

所以解决一个问题,先找有没有解决这个问题对象,如果没有,自己编写一个对象。
面向对象思考问题举例:
面试官招聘人员,就是面向对象的很好例子,企业接受一个项目,设计、编写、测试,面试官一个人可以完成,但是浪费大量的时间和精力, 所以他就需要招聘一些人员来帮助完成,而对象就指的是被招聘的人员,他们具备了设计、编写、测试等功能,但具体怎么实现的,面试官不 需要知道。面试官要做的,只需要找到这个对象,并指挥他来解决这个问题即可。
JAVA里面,什么都可以成为对象。 有对象找对象用对象,没对象造对象用对象,并不断的维护对象之间的关系。
面向对象的特征:
1.封装  2.继承  3.多态
规则:哪个对象,对某一动作最清楚,就把动作定义在该对象中。搬家公司搬东西,他们只需要告诉,搬运工人搬到哪即可,至于怎么搬,搬运工人最清楚,自然把搬运这个动作定义在搬运工人这个对象中。

(指挥对象做事情)

 

代码理解:

 

  1. /*定义类就是在定义类中的成员,即组成部分
  2. * 成员函数:对应的就是事物功能
  3. * 成员变量:对应的就是属性
  4. *
  5. */
  6. //具体体现
  7. /*描述搬运过程
  8. * 搬运工人 这一名次由属性和功能组成
  9. * 属性:1.人数 2.性别
  10. * 功能:搬运
  11. */
  12. class Man
  13. {
  14.     int num ; //成员
  15.     String sex;//成员
  16.     void function()//成员
  17.     {
  18.         System.out.println(num+” …. “+sex);
  19.     }
  20.     /*public static void main(String[] args)
  21.     {
  22.         //Man这个类只是描述某一事物,当要用到它时,才运行,并不需要其独立运行,当然也可以
  23.         //所以,要用到这个事物时,只需要在一个类中,进行其对象的创建并调用即可
  24.     }*/
  25. }
  26. /*描述汽车
  27. * 属性:数量、颜色
  28. * 功能,启动
  29. */
  30. class Car
  31. {
  32.     int num = 3;
  33.     String color = “blue”;
  34.     void run()
  35.     {
  36.         System.out.println(num+” … “+color);
  37.     }
  38. }
  39. public class Main
  40. {
  41.     public static void main(String[] args)
  42.     {
  43.         /*完成对象的创建,并定义该对象的名称*/
  44.         //创建一个Man的实体,通过new关键字实现
  45.         Man BLF1 = new Man();//定义一个Man类型的变量BLF2,Man是类,BLF2是变量名
  46.         //用类来定义的变量,就是一个 类 类型的变量,指向了该类的对象
  47.         BLF1.function();//使用对象中的内容,形式:对象.成员,来完成调用
  48.         Car BLF2 = new Car();
  49.         BLF2.run();//对象.组成部分
  50.     }
  51. }
/*定义类就是在定义类中的成员,即组成部分
 * 成员函数:对应的就是事物功能
 * 成员变量:对应的就是属性
 * 
 */

//具体体现

/*描述搬运过程
 * 搬运工人 这一名次由属性和功能组成
 * 属性: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();//对象.组成部分
	}
}

 

趁热打铁:

 

 

  1. class Man
  2. {
  3.     int num ; //成员
  4.     String sex;//成员
  5.     void function()//成员
  6.     {
  7.         System.out.println(num+” …. “+sex);
  8.     }
  9. }
  10. //堆中储存的是对象
  11. public class Main
  12. {
  13.     public static void main(String[] args)
  14.     {
  15.         Man BLF = new Man();
  16.         Man BLF2 = BLF;
  17.         //Man BLF2 = new Man();
  18.         // BLF2 = BLF;
  19.         BLF.num = 4;
  20.         BLF2.sex = “man”;
  21.         System.out.println(Integer.toBinaryString(BLF.num));
  22.         BLF.function();
  23.         /*
  24.          * 100
  25.          *  4 …. man
  26.          */
  27.         //PS:一旦产生对象,那么这个对象一定具备着这个类中所描述的内容
  28.     }
  29. }
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. *1. 局部变量定义在函数、语句、代码块中,并且只在所属区域中有效
  4. * 成员变量定义在类中,且整个类中都可以访问
  5. * 2.成员变量存在于堆内存的对象中
  6. * 局部变量存在栈内存的方法中
  7. * 3.成员变量随着对象的创建而存在,随着对象的消失而消失
  8. * 局部变量随着所属区域的执行而存在,随着所属区域的结束而释放
  9. * 4.成员变量都有默认初始化值,局部变量没有初始化值
  10. */


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

类 类型参数:

  1. class Man
  2. {
  3.     int num = 4; //成员
  4.     String sex;//成员
  5.     void function()//成员
  6.     {
  7.         System.out.println(num+” …. “+sex);
  8.     }
  9. }
  10. public class Main
  11. {
  12.     public static void main(String[] args)
  13.     {
  14.         /*Man a = new Man();
  15.         a.num = 4;
  16.         a.sex = “man”;
  17.         Man b = new Man();
  18.         b.num = 4;
  19.         b.sex = “man”;*///代码冗杂,进行调用
  20.         Man a = new Man();
  21.         Man b = new Man();
  22.         show(a);
  23.         show(b);
  24.         a.function();
  25.         b.function();
  26.         /*
  27.          * 4 …. man
  28.          * 4 …. man
  29.          */
  30.     }
  31.     public static void show(Man b) //类类型的变量一定指向对象,否则就是null
  32.     {
  33.         b.num = 4;
  34.         b.sex = “man”;
  35.     }
  36. }
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";
	}

}

了解:匿名对象
栈内存存储的是局部变量,所以匿名变量储存在堆中

 

 

  1. class Car
  2. {
  3.     int num ;//成员
  4.     String color;//成员
  5.     void function()//成员
  6.     {
  7.         System.out.println(num+” …. “+color);
  8.     }
  9. }
  10. public class Main
  11. {
  12.     public static void main(String[] args)
  13.     {
  14.         /*
  15.          * 匿名对象
  16.          * new Man();
  17.          * 也就是定义对象时的简写格式
  18.          * */
  19.         new Car();
  20.         //使用方法一:当对象对方法仅进行一次调用,即可简化为匿名对象
  21.         /*
  22.          * new Car().num = 4;
  23.          * new Car().color = “man”;
  24.          * new Car().function;
  25.          * 打印结果:0….null
  26.          * 理由如下图:
  27.          * new Car().num = 4;执行完后,自动变成堆中的垃圾
  28.          * */
  29.         //使用方法二:匿名对象可以做实际参数进行传递
  30.         show(new Car());
  31.     }
  32.     public static void show(Car a)
  33.     {
  34.         a.num = 4;
  35.         a.color = “MAN”;
  36.         a.function();
  37.     }
  38. }
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();
	}

}

 

数据类型参数传递问题:

 

  1. //基本数据类型参数传递
  2. public class Main
  3. {
  4.     public static void main(String[] args)
  5.     {
  6.         int x = 3;
  7.         show(x);
  8.         System.out.println(x);
  9.     }
  10.     public  static void show(int x)
  11.     {
  12.         x = 9;
  13.         //return ;
  14.     }
  15. }
  16. //打印 3
  17. 改变的只是show中x的值,执行完后弹栈,释放,但是本来的x的值并为改变。
//基本数据类型参数传递
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的值并为改变。

  1. /引用数据类型参数传递
  2. public class Main
  3. {
  4.     int  x = 3;
  5.     public static void main(String[] args)
  6.     {
  7.         Main d = new Main();
  8.         d.x = 9;
  9.         show(d);
  10.         System.out.println(d.x);
  11.     }
  12.     public  static void  show(Main b)
  13.     {
  14.         b.x = 1;
  15.     }
  16. }
  17. //打印 1 ,栈 和 堆
  18. //执行如图
/引用数据类型参数传递
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的值