面向对象、局部变量与成员变量、匿名对象

面向对象、局部变量与成员变量、匿名对象

一、面向对象的概述

“面向对象”(英语:Object Oriented,简称OO)是一种以事物为中心的编程思想。
面向对象程序设计(英语:Object-oriented programming,缩写:OOP),是一种程序开发的方法。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。

面向对象时相对于面向过程而已的(c则是一个典型的面向过程的语言),站在面向对象的角度去看问题,你则是对象的动作的指挥者。如果站在面向过程的角度去看问题,你则是动作的执行者。

二、面向对象与面向过程对比

面向对象、局部变量与成员变量、匿名对象_第1张图片

三、对象的创建

1.自定义类创建对象的三步骤:

  1. 自定义类。

    class 类名{
    事物的公共属性使用成员变量描述。
    事物的公共行为使用函数描述。
    }

  2. 通过自定义类创建对象。

    类名 变量名 = new 类名();

  3. 访问(设置)对象的属性或者调用对象的功能。

①访问对象属性的格式:
对象.属性名.
②设置对象的属性:
对象.属性名 = 数据。
③调用对象的功能
对象.函数名();

例:

public class Car {
	
	String color;// 成员变量
	int num; // 成员变量

	// 成员函数
	void run() {
		System.out.println(color + "的车,轮胎数:" + num + "个,跑起来了");
	}
}

2.创建Car对象

  • 使用new关键词。
  • 需要给新的汽车起一个名字,car
  • 变量都是有类型的,car属于什么类型,属于Car类型,叫做类类型

Car car=new Car();

图纸画好了,类定义成功了。如何根据图纸生产汽车,在Java中如何根据类来生产一个对象。

  • Java中生产汽车比较简单,通过一个关键字”new”, 通过 new Car();
  • 就在内存中产生了一个实体,汽车对象就生产出来了。
  • 汽车对象生产出来后,还没有名字,为了方便使用,需要起一个名字。就用小写的C 来表示新车的名字。
  • Java中的变量都需要有类型。那么c是什么类型呢?c是Car类型,所以c也叫做类类型变量。

3.面向对象的内存分析

面向对象、局部变量与成员变量、匿名对象_第2张图片

面向对象、局部变量与成员变量、匿名对象_第3张图片

面向对象、局部变量与成员变量、匿名对象_第4张图片

三、局部变量与成员变量的区别

成员变量与局部变量的区别:

①定义的位置上区别:

  1. 成员变量是定义在方法之外,类之内的。
  2. 局部变量是定义在方法之内。

②作用上的区别:

  1. 成员变量的作用是用于描述一类事物的公共 属性的。
  2. 局部变量的作用就是提供一个变量给方法内部使用而已。

③生命周期区别:

  1. 随着对象 的创建而存在,随着对象的消失而消失。
  2. 局部变量在调用了对应的方法时执行到了创建该变量的语句时存在,局部变量一旦出了自己的作用域,那么马上从内存中消失。

④初始值的区别:

  1. 成员变量是有默认的初始值。
  2. 局部变量是没有默认的初始值的,必须要先初始化才能使用

demo:

//人类
class Person {
	String name; //成员变量
	public void eat(){
		int age ;
		age = 12;
		for(int i =  0 ; i< 5 ; i++){
			System.out.println("hello world"+ age);
		}
	}
 
}
 
class Demo3 
{
	public static void main(String[] args) 
	{
		Person p1 =  new Person();
		p1.eat();
 
	}
}

四、匿名对象

匿名对象:没有引用类型变量指向的对象称作为匿名对象。

1.匿名对象要注意的事项

①我们一般不会给匿名对象赋予属性值,因为永远无法获取到。
②两个匿名对象永远都不可能是同一个对象。

2.匿名对象好处

简化书写。

3.匿名对象的应用场景

①如果一个对象需要调用一个方法一次的时候,而调用完这个方法之后,该对象就不再使用了,这时候可以使用匿名对象。

②可以作为实参调用一个函数。


//学生类
class Student{
	int num; //学号
	String name; //名字
	
	public void study(){
		System.out.println("好好学习,为将来称为高帅富做准备!");
	}
}

class Demo4{
 
	public static void main(String[] args) 
	{
		//创建一个学生对象
		//Student s = new Student();
		//new Student().name = "hcx"; //匿名对象 
		//System.out.println(Student().name); //null
		System.out.println(new Student() == new Student()) ;  // "==" 用于引用类型变量时,比较的是内存地址。判断两个 对象是否为同一个对象
		
		需求: 调用Student的study方法。
		Student s = new Student();
		s.study();
		new Student().study();
	}

你可能感兴趣的:(JavaSE)