面向对象、局部变量与成员变量、匿名对象
一、面向对象的概述
“面向对象”(英语:Object Oriented,简称OO)是一种以事物为中心的编程思想。
面向对象程序设计(英语:Object-oriented programming,缩写:OOP),是一种程序开发的方法。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
面向对象时相对于面向过程而已的(c则是一个典型的面向过程的语言),站在面向对象的角度去看问题,你则是对象的动作的指挥者。如果站在面向过程的角度去看问题,你则是动作的执行者。
二、面向对象与面向过程对比
三、对象的创建
1.自定义类创建对象的三步骤:
-
自定义类。
class 类名{
事物的公共属性使用成员变量描述。
事物的公共行为使用函数描述。
} -
通过自定义类创建对象。
类名 变量名 = new 类名();
-
访问(设置)对象的属性或者调用对象的功能。
①访问对象属性的格式:
对象.属性名.
②设置对象的属性:
对象.属性名 = 数据。
③调用对象的功能
对象.函数名();
例:
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.面向对象的内存分析
三、局部变量与成员变量的区别
成员变量与局部变量的区别:
①定义的位置上区别:
- 成员变量是定义在方法之外,类之内的。
- 局部变量是定义在方法之内。
②作用上的区别:
- 成员变量的作用是用于描述一类事物的公共 属性的。
- 局部变量的作用就是提供一个变量给方法内部使用而已。
③生命周期区别:
- 随着对象 的创建而存在,随着对象的消失而消失。
- 局部变量在调用了对应的方法时执行到了创建该变量的语句时存在,局部变量一旦出了自己的作用域,那么马上从内存中消失。
④初始值的区别:
- 成员变量是有默认的初始值。
- 局部变量是没有默认的初始值的,必须要先初始化才能使用
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();
}