面向对象:
1,符合现实中人们思考习惯的一种思想。
2,它让程序员的角色在做这转变,从原来的执行者变成指挥者。
3,将复杂的问题简单化。
对象无处不在,一切皆对象。
对象是现实中实实在在存在个体,那么我们需要使用计算机语言对其进行描述。
在java当中,描述事物是通过类来完成,在计算机中操作事物是通过new 该类的对象,并指挥对象完成的。
例:
制造汽车,对汽车进行描述:图纸。对应的就是java中的类class。
通过图纸生成汽车:对象,对应的就是java通过new在堆内存中产生的实例。
通过java语言编写程序,其实就是在不断的定义类,并定义类中的成员。
成员包括:成员变量(事物的属性)和成员函数(事物的行为)。
对象的存在有什么好处?或者说为什么要创建对象呢?
对象可以用于封装数据。可以在对象中定义属性和行为,并被指挥。
体现在程序中,当要完成功能时,先明确java中是否已提供了已有的对象。如果有,那么可以直接指挥该对象的功能。
如过该对象不存在,定义一个对象,并将需要的功能封装到该对象当中,以便以后该对象的重用。
对象如何使用呢?
通过new的方式来建立,并通过 “对象.对象成员” 的方式指挥对象做事情。
需求:
对数组的常见操作:取最值,排序,查找,变量打印。。。
每一次出现数组需要这样的操作都需要定义对应的功能。较为麻烦。
将这些功能都进行封装。封装到对象当中,以便重用。
早期:
int[] arr = new int[3];
public int getMax(int[] arr)
{
int max = arr[0];
for(int x=1; x<arr.length; x++)
{
if(arr[x]>max)
max = arr[x];
}
}
public int getMin(int[] arr)
{
int min = arr[0];
for(int x=1; x<arr.length; x++)
{
if(arr[x]<min)
min = arr[x];
}
}
对象的出现。现在常用情况:
class ArrayTool
{
public int getMax(int[] arr)
{
int max = arr[0];
for(int x=1; x<arr.length; x++)
{
if(arr[x]>max)
max = arr[x];
}
}
public int getMin(int[] arr)
{
int min = arr[0];
for(int x=1; x<arr.length; x++)
{
if(arr[x]<min)
min = arr[x];
}
}
public void printArray(int[] arr)
{
for(int x=0; x<arr.length; x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+",");
else
System.out.println(arr[x]);
}
}
}
class Demo
{
public static void main(String[] args)
{
int[] arr = new int[2];
ArrayTool at = new ArrayTool();
int max = at.getMax(arr);
at.printArray(arr);
}
}
----------------------------了解----
匿名对象:其实就是没有名字的对象,可以理解为创建对象的简化形式。
使用情况:
1,当只对对象的方法进行一次调用的使用,可以使用匿名对象。
Car c = new Car();//简化成;new Car().run();
c.run();
//c.run();
2,匿名对象可以作为实际参数进行传递。
show(new Car());
public void show(Car c)//Car c = new Car();
{
c.run();
}
-----------------------------------
面向对象的第一个特征:封装:
什么是封装呢?
其实就是隐藏实现细节,提高了安全性。
在代码的体现:
函数就是一个最小最直接的封装体。
类本身也是一种封装。
包也是一个封装体。
SSH框架也是一种封装。
tomcat服务器软件。
在通过类建立对象后,通过对象调用成员,可以使用使用对象的属性。
但是直接对属性操作容易出现安全隐患如:人的年龄,如果被直接操作容易出现负数。
为了提高安全性,所以避免直接对象属性进行访问,使用了一个关键字:private 私有。
私有只修饰成员,并该成员只在本类中有效。
如何可以对人对象的age进行赋值呢?
通过对外提供方法来间接访问age属性。而该方法已有自己的规范。set。get。
private只是封装特性的一种体现形式而已。
class Person
{
private int age;
public void setAge(int x)
{
age = x;
}
public int getAge()
{
return age;
}
void speak()
{
System.out.println("age="+age);
}
}
main()
{
Person p = new Person();
p.age = -20;//描述的事物不具备负数值。当age私有时,在如此访问就会编译失败。
}