简单理解
- 面向对象是更符合思考习惯的一种思想;
- 从过程的执行者转为对象的指挥者;
- 可以将复杂的问题简单化。
- 举例
(1)买电脑
面向过程:自己买分为网上查询、去电脑城询价、砍价、监督组装、送货等步骤,必须亲自去做;
面向过程:把钱给专业人士,完成以上步骤。
比如,完成一个项目,一个牛人也可以完成,但团队的效率更高,项目经理可以调用团队中的成员不同的能力分工完成。
(2)面试例子
面试官您就是用面向对象的思想在思考问题,公司有了项目需要人开发,给您一个人开发也能完成就是需要时间长,需要具备专业知识的人来完成,我就是。您只要指挥我,调用我的功能,我就能给您一个好的结果。
类与对象的关系
类:用于描述事物
对象:该类事物具体的个体。
汽车:
1.属性:
轮胎数
颜色
2.行为:
运行
先写类,即先描述类,再new具体对象
用java语言对其进行描述
关系
1.首先定义类,才有对象;
2.对象可以看成是静态属性(成员变量)和动态变量(方法)的封装体;
3.类是用来创建同一类型对象的“模板”,在一个类中定义了该类对象所具有的成员变量以及方法;
4.J2SDK提供了很多类供编程人员使用,程序员也可以自己定义类。
成员变量=属性,方法=函数, 所有变量都必须定义属性
创建对象
//先定义类
class Car
{
//描述轮胎数
int num;
//描述颜色
String color;
//描述运行功能(方法)
void run()
{
System.out.println(num);
}
}
class CarDemo
{
public static void main(String[] args)
{
//定义该类的目的是为了定义主函数。让该类运行,在其中调用Car中的内容。
//要想使用Car类中的内容,必须先有Car的对象。
//通过new关键字完成,对象的创建
Car c = new Car();//创建了一个Car类型的变量c指向了Car类型的对象,数据类型 变量名 = 初始化值,类似于int x = 4
}
}
对象的内存体现
1.对象存在的目的就是用来存储数据的,区别于数组可以存不同类型的数据;
2.new 先开辟地址,再存入数据。new几次就有几个对象!!!
在上图中,若执行c1=null,则只是c1位空,c2仍然指向原地址。
成员变量和局部变量的区别
1.源代码中定义的位置不同
成员变量定义在类中;
局部变量定义在方法中(只要是类的下一级大括号都是局部变量)也可以定义在语句中;
2.内存中的存储位置不同
成员变量存储在堆内存中的对象中;
局部变量存储在栈内存的方法中;
3.生命周期不同
成员变量随着对象的出现而出现;
局部变量随着所属区间运行出现,运行结束而释放。
补充
成员变量又分为以static修饰的类变量和不以static修饰的实例变量
例如:
public class Wan
{
static int age; //类属性的成员变量
public void show()
{
System.out.println(age);
}
}
public class WanWan
{
public static void main(String[] args)
{
Wan w1 = new Wan();
Wan w2 = new Wan();
w1.age = 1;
w2.age = 2;
w1.show();
w2.show();
}
}
//输出结果为2 2
封装
隐藏实现细节,对外提供公共的访问方式(接口)。
私有
对私有的数据。可以通过方法的方式对其进行访问。
封装的体现之一:将数据私有化,对外提供对应的setXXX,getXXX来进行访问.
在数据类型前加 private int a;则a只能在类中被调用。
/*
描述人。
属性:年龄
行为:说话
*/
class Person
{
int age;
void speak()
{
System.out.println("age=" + age);
}
}
class PersonDemo
{
public static void main(String[] args)
{
//创建Person的对象并调用。
Person p = new Person();
p.age = -20;//与现实不符
p.speak();
}
}
基本类型变量与引用型变量传递
1.基本数据类型
public class VarTrf
{
public static void main(String[] args)
{
int x = 4;
show(x);
System.out.println("x = " + x); //结果为4;
}
public static void show(int x) //即使加了int返回值,仍然输出x=4,因为main并没有使用该返回值
{
x = 5;
}
}
2.引用数据类型
public class VarTrf
{
int x=4;
public static void main(String[] args)
{
VarTrf var = new VarTrf();
var.x = 5;
show(var);
System.out.println("var.x = " + var.x); //输出6
}
public static void show(VarTrf d) //d与var指向同一地址
{
d.x = 6;//此处赋值在地址中就做了改变
}
}