黑马程序员--06 JAVA的面向对象思想与二维数组

时间:2023-02-11 17:28:37

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

1、二维数组

格式:

Int[][] arr=new int[2][3];

[2]代表1维数组的个数;

[3]代表1维数组有三个元素;


分析:

通过对内存图分布可知,首先在栈内存中加载main函数,开辟空间,定义一个变量arr,在堆内存中通过New创建一个数组实体int[2],并分配其地址值为0x0045,数组元素值进行默认初始化为Null;然后把地址值赋值给栈内存中的arr. 在堆内存中开辟两块空间,分别用来存放二维数组中的数组元素,分配其地址值分别为0x00560x0089,然后对将地址值传给二维数组中的元素,所以说对内存中二维数组存储的是一维数组的地址值。最后变量通过二维数组的地址0x0045指向二维数组。

注意:二维数组中必须指定长度、以及实体没有对二维数组进行初始化时默认为null;

2、对二维数组的遍历(大圈套小圈思想)

For(int x=0;x<arr.length;x++)

{

For(int y=0;y<arr[x].length;y++)//这里arr[x].length中的arr[x]代表二维数组中的元素。

{

System.out.println(arr[x][y]);

}

}

3、面向对象的理解:

特点:1、面向对象就是更符合人们思考习惯的一种思想。

          2、从面向过程的执行者,转变成了面向对象的指挥者

3、面向对象将复杂的事情简单化了。

其实面向对象是一种思想,是面向过程而言,将复杂的事情变的更简单了。

通过把大象放到冰箱里这个列子来理解面向对象的概念

面向过程:把冰箱门打开、存储大象、关闭冰箱;强调的过程注重行为;

面向对象:冰箱.打开、冰箱.存储、冰箱.关闭;强调的是冰箱这个对象。

面试题:你怎么理解面向对象?

首先说面向对象的特点:它是一种思想,它让复杂的问题简单化,它把执行者变成了指挥者。

然后举例子来说明,最牛的就是结合实际场景来说:其实面试官你就是在用面向对象的思想在思考问题,为什么这么说?因为公司业务蒸蒸日上,需要招更多的人来完成项目,所以才在这里招聘人员,你需要找一些具备专业编程经验的人,来帮公司完成工作,那么我就是那个对象,因为我具备专业编程能力,你就是那个指挥者,指挥我来做事,至于我怎么去完成编程任务,你是不需要去知道,你只要结果了就可以了,这其实就是把你之前的工作简化了,你不必再事必躬亲了。这就是面向对象思想的体现。

同时可以结合去饭店吃饭,在家做事等等列子来说明面向对象的思想。

扩展:OOP:面向对象编程。

          OOA面向对象分析。

          OOD:面向设计。还有面向接口、面向框架、面向对象的语言:C++JAVAC#
4、在实现功能,先找java当中是不是提供好了相关的对象,没有对象自己造一个对象。

比如说公司招聘人员找不到人的时,这时公司就需要自己在公司内部培养人,也就是自己造对象。

5、类和对象关系:

a) 类到底是什么?
类就是对现实生活中事物的描述,描述中包含了该类事物的共性内容。

Class Car()

{

Int num;

String color;

Void run(){}

}

在类中定义的变量和函数都称为类中的成员。

成员:

成员变量---属性

成员函数---行为

b) 什么是对象?

对象就是该类事物实实在在存在的个体。

Eg:现实生活中的对象:张三、李四

想要描述:提取对象中的共性内容,对具体的抽象。

描述时:这些对象的共性有姓名年龄性别学习java的功能。

对象也可以理解为其实就是个容器,用来存储更多的数据,存储的都是每一个对象特有的数据,而类就是这些数据所属的属性。

java语言来描述一个小汽车

描述事物:无非就是描述事物的属性和行为

属性:轮胎数、颜色

行为:运行

Eg:

Class Car

{

String color="red";

Int num=4;

Run()

{

System.out.println(color+""+num);

}

}

Class CarDemo

{

Public static void main(String[] args)

{

Car c=new Car();

C.color="bule";

C.num=5;

C.run();m

Car c1=new Car();

C1.num=8;

C1.color="green";

C1.run();

}

}

重点:分析上述代码在内存中的分布:

复习的时候写内存分析:

6、成员变量和局部变量的区别:

1、源代码中定义位置不同:

成员变量:定义在类中,在整个类中有效。

局部变量:定义在函数中,在局部范围内有效。

简单一句话:作用范围不一样,成员变量作用于整个类中,局部变量作用于函数中,或者语句中。

2、在内存中的位置和事件不同:

生命周期不同:

成员变量:随着对象的创建的而出现在堆内存中,随着对象被回收而消失。

局部变量:随着变量所属局部区域的运行,而出现在栈内存中,随着所属区域运行结束而释放。

3、变量使用的初始化:

成员变量:因为堆内存中都有默认初始化值,对于引用型变量默认值就是null;

局部变量:因为在栈内存中都没有默认初始化值,必须手动初始化后才可以参与运算。

7、匿名对象:

即没有名字的对象,简化书写用的。

基本使用:

1、当对对象的方法只调用一次时,可以用匿名对象来完成

这样写比较简化,如果对一个对象进行这个成员的调用,必须给这个对象起个名字

2、可以将匿名对象作为实际参数进行传递。一旦对对对进行多个成员操作时。必须要对对象起个名字。

Eg:

Main()

{

Show(new  Car())

}

Public  static void show (Car c)

{

C.num=3

C.color="back";

C.run();

}

8、面向对象三个特征:

封装:

是指隐藏对象的属性和实现细节,仅对外提供公共访问方式,凡是面向对象必须有封装性。

特点:

将变化隔离

便于使用

提高复用性

提高安全性

原则:1、将不需要对外提供的内容都隐藏起来。

  2、把属性都隐藏,提供公共方法对其访问。

在代码中的体现:

1、将成员变量都私有化,并通过共有的方法对其进行访问,这两个方法是:setXxx\getXxx

2、只要不准备对外提供的全部都封装起来,

3、私有仅仅是封装的一种表现形式,函数是最小的封装体。

方法需要私有吗?

Public static void selectSort()

{

Swap();

}

Private void swap()//此处私有是因为位置置换不用提供给用户。

{

}

代码实现:

Class Person

{

Private int age;//为了不让其他程序直接访问age属性,避免错误的数据,可以使用一个关键字来完成private私有,它是一个权限修饰符。

Public void setAge()//对外提供函数是可以控制你输入的参数。

//一个成员变量通常对应的两个方法、

{

If(a>130||a<0)

{

Age=a;

Speak();

}

Else

System.out.println();

}

Public void getAge()

{

Return age;

}

Void speak()

{

Sop();

}

}

Class PersonDemo

{

Public static void main(String[] args)

{

Person p=new  Person();

P.age=-20;//错误数据是因为对象直接访问age属性造成的。

P.speak();

}

}

总结:之所以对外提供访问方式,就是因为可以在访问方式中加入逻辑判断等语句

对访问的数据进行操作,提高代码的健壮性。凡是set开头的返回值类型是voidget开头的跟它的返回值类型一致。