----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
1、二维数组
格式:
Int[][] arr=new int[2][3];
[2]代表1维数组的个数;
[3]代表1维数组有三个元素;
分析:
通过对内存图分布可知,首先在栈内存中加载main函数,开辟空间,定义一个变量arr,在堆内存中通过New创建一个数组实体int[2],并分配其地址值为0x0045,数组元素值进行默认初始化为Null;然后把地址值赋值给栈内存中的arr. 在堆内存中开辟两块空间,分别用来存放二维数组中的数组元素,分配其地址值分别为0x0056、0x0089,然后对将地址值传给二维数组中的元素,所以说对内存中二维数组存储的是一维数组的地址值。最后变量通过二维数组的地址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++、JAVA、C#
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开头的返回值类型是void,get开头的跟它的返回值类型一致。