可以通过打印二维数组中的元素,明确二维数组的元素初始化特点。
二维数组在内存中的图解
// int[] arr = new int[3];
// System.out.println(arr);//[I@1fb8ee3 @左边是实体的类型。 @右边是实体的哈希值。
// int[][] arr = new int[3][2];//创建一个二维数组,该数组中有3个一维数组,每一个一维数组中有2个元素。
// System.out.println(arr);//直接打印二维数组。 [[I@c17164
// System.out.println(arr[0]);//直接打印二维数组中的角标0的一维数组。 [I@1fb8ee3
// System.out.println(arr[0][0]);//直接打印二维数组中的角标0的一维数组中角标为0的元素。 0
// int[][] arr = new int[3][];
// System.out.println(arr);//直接打印二维数组。 [[I@c17164
// System.out.println(arr[0]);//直接打印二维数组中的角标0的一维数组。null
// System.out.println(arr[0][0]);//直接打印二维数组中的角标0的一维数组中角标为0的元素。 NullPointerException
二维数组-应用场景
数据一多就用数组进行存储起来,但是如果说要对数据进行分类的话也,可以使用二维数组,但是后期有更好的存储方式,使用map
示例:
举例:
大象装进冰箱。
面向过程。
打开冰箱。
存储大象。
关上冰箱。
对于面向过程思想,强调的是过程(动作).
C语言.
面向对象。
对于面向对象思想,强调的是对象(实体)。
冰箱打开。
冰箱存储。
冰箱关闭。
C++ Java C#
特点:
1,面向对象就是一种常见的思想。符合人们的思考习惯。
2,面向对象的出现,将复杂的问题简单化。
3,面向对象的出现,让曾经在过程中的执行者,变成了对象中的指挥者。
面向对象(举例)
比如说:你要买电脑,然后也你先是在网上查资料,了解各项配置参数,然后去电脑城,去问这些价格,参数进行比较,再然后就是找到一家性能比较高的,拿电脑的各项组件才料,然后要看到这个组装人员,看到起他进行组装电脑,这样一下来你就花了几天了,这外是面向过程
然后现在面向对象就是,你找一个懂电脑的人和你一起去买电脑,这些他都会啥,你根本不用懂电脑,这些价格啊,都是由他去谈,然后你只官拿钱就可以了,这样一天就搞定了,这样就提高了办事效率,现在我不是直接面向电脑了,而是面向你了,因为你都懂这些,现在就是我指挥你去做这些事件了,你具体是怎么实现我不用知道,刚好符合它的特点,封装了一下,面向的角色发生了变化
举例:
1,将大象放进冰箱里。
2,窗口操作。移动,关闭。
3,买电脑。
4,面试。
说白了面向对象就是找一个会的人,去代替你要做的事情
在进行面试的时候也,这个面向对象经常会被问到,那你怎么回答也,你就这样回答
首先你回答:,你一定要进行举例进行说明
特点:
1,面向对象就是一种常见的思想。符合人们的思考习惯。
2,面向对象的出现,将复杂的问题简单化。
3,面向对象的出现,让曾经在过程中的执行者,变成了对象中的指挥者。
然后举例说现在面试官你现在都在使用面向对象的一种方式,比如来了一个项目,这个项目从需求分析,到编码,测试,你一个人都能完成,但是也这样效率太底了,你需要把一些具有专业的软件编码的能力来帮你做这些事情,因为我就是哪个对象了,至于过程怎么你不需要知道吗,我只要给你结果就可以了,因为我就是哪个对象吗
在java世界中万物都是对象
\
在我们进行java语言编写的时候,无非是运算现实生活就的数据
对象就是用来封装数据的,我们要处理生活中的数据,我们在做开发的时候也是一样的,要先找到数据它所属的对象,我们在遇到问题的时候也我们先要去分析问题当中它色及到的对象是哪些,而已不是关注动作有哪些,我们要找具备这些功能的对象来做,如果没有就创建具体这些功能的对象
比如说大象:你说大象有眼睛,能走,鼻子,这些一般的都有,你的说大象的特征,比如说体积很多,压很大,鼻子长,腿很粗,
下面再说一个事例:比如人开门在这个里面有有几个对象,2个对象人和门,如果对于分析者来讲,知道谁是对象也有一个方法叫做名词提练法,一般情况下名词都是对象,现在就是开这个动作你认为是定义在人里边合适不是门里边也,告诉你最基本的一个方法,那个对象对这个操作最清楚就定义在哪个对象上,在这里面门最清楚,其实人开门,是调用了开门的一个方法
/*
用java语言对现实生活中的事物进行描述。
通过类的形式来体现的。
怎么描述呢?
对于事物描述通常只关注两方面。
一个是属性,一个是行为。
只要明确该事物的属性和行为并定义在类中即可。
对象:其实就是该类事物实实在在存在的个体。
类与对象之间的关系?
类:事物的描述。
对象:该类事物的实例。在java中通过new来创建的。
*/
对于同一类事物可以抽取它们的共性的内容,定义在类中。
如生活中的汽车,每一台车都有轮胎数和颜色。
那么在通过java描述汽车这类事物时,就可以将这两个共性属性作为类中的属性进行定义。
通过该类建立的每一个汽车实体都具有该属性,并可以有对象特有的属性值。
//在计算机中创建一个car的实例。通过new关键字。
// Car c = new Car();// c就是一个类类型的引用变量,指向了该类的对象。
对象在内存中的具体体现
成员变量和局部变量的区别:
1,
成员变量定义在类中,整个类中都可以访问。
局部变量定义在函数,语句,局部代码块中,只在所属的区域有效。
2,
成员变量存在于堆内存的对象中。
局部变量存在于栈内存的方法中。
3,
成员变量随着对象的创建而存在,随着对象的消失而消失。
局部变量随着所属区域的执行而存在,随着所属区域的结束而释放。
4,
成员变量都有默认初始化值。
局部变量没有默认初始化值。
只要是用new操作符定义的实体就在会堆内存中开辟一个新的空间。
并每一个对象中都有一份属于自己的属性。
通过 对象.对象成员 的方式操作对象中的成员,
对其中一个对象的成员进行了修改。和另一个对象没有关系。
// Car c1 = new Car();
// c1.num = 4;
// c1.color = "red";
// Car c2 = new Car();
// c2.num = 4;
// c2.color = "red";
// Car c1 = new Car();
// Car c2 = new Car();
// show(c1);
// show(c2);
/*
匿名对象。没有名字的对象。
new Car();//匿名对象。其实就是定义对象的简写格式。
Car c = new Car();
c.run();
new Car().run();
1,当对象对方法仅进行一次调用的时候,就可以简化成匿名对象。
new Car().num = 5;
new Car().color = "green";
new Car().run();
2,匿名对象可以作为实际参数进行传递。
*/
// Car c1 = new Car();
// show(c1);
show(new Car());
}
//汽车改装厂。
publicstatic void show(Car c)//类类型的变量一定指向对象。要不就是null。
{
c.num = 3;
c.color = "black";
System.out.println(c.num+"..."+c.color);
}
像这些判断,循环这些语句只能写在函数里面边
X为什么要使用封装也,现在我们举个例子,就是人这个对象,有年龄吧,并且年龄不能为负数据吧,然而也如果我没有把年龄定义成private int age 而是把年龄定义成int age,那么我们在外界就可以直接通过Person person = new Person();person.age来进行赋负值,这样我们不好进行控制,那就我们通过对外提供一个方法,在方法里面进行控制,这样就达到效果了,对外进行提供方法的目的是可控 例子:机箱就是一个例子,里面封装了很多零件,对外提供一个按钮
private:私有,是一个权限修饰符。用于修饰成员。
私有的内容只在本类中有效。
注意:私有仅仅是封装的一种体现而已。
Java里面最小的封装体就是函数,函数里面怎么实现我们不用官,我只要知道这个函数的功能是什么,返回类型是什么就可以了,类也是封装