Java学习个人备忘录之面向对象概念
对象,其实就是该类事物实实在在存在的个体。
类与对象之间的关系?
类:一类事物的描述。
对象:该类事物的实例。在java中通过new来创建的。
举例来说,类就是汽车说明书,类只能在理论上造一辆汽车,并且这个说明书非常明确的写了汽车有哪些部件、可以干什么等等信息,我们可以通过这个说明书(类)得知这辆车全方位的信息;对象就是按照这个说明书造出来的一辆汽车实体,是真实存在的,可以开走的。
下面我们用类描述一辆小汽车:
分析:
1,属性
轮胎数.
颜色.
2,行为
运行.
定义类其实就是在定义类中的成员
成员:成员变量就是属性,成员函数就是行为。
class Car { int num; //成员变量,汽车的属性 String color;//成员变量 void run() //成员函数汽车的功能 { System.out.println(num + "..." + color); } } class CarDemo { public static void main(String[] arge) { //在计算机中创建一个car的实例,通过new关键字 Car c = new Car(); //就是一个类类型的引用变量,指向了该类的对象 c.num = 4; c.color = "red"; c.run(); } }
成员变量和局部变量的区别
1,成员变量定义在类中,整个类中都可以访问;局部变量定义在函数、语句、局部代码块中,只在所属的区域有效。
2,成员变量存在于堆内存的对象中;局部变量存在于栈内存的方法中。
3,成员变量随着对象的创建而存在,随着对象的消失而消失;局部变量随着所属区域的执行而存在,随着所属区域的结束而释放。
4,成员变量都有默认初始化值;局部变量没有默认初始化值。
类类型参数
class CarDemo { public static void main(String[] args) { Car c1 = new Car(); Car c2 = new Car(); show(c1); show(c2); } //汽车改装厂 public static void show(Car c)//类类型的变量一定指向对象,要不就是null. { c.num = 3; c.color = "black"; System.out.println(c.num + "..." + c.color); } }
匿名对象
new car(); //匿名对象,其实就是定义对象的简写格式
new Car().run();
没有将car对象赋值给某一变量。
1,当对象对方法仅进行一次调用的时候,就可以简化成匿名对象
2,匿名对象可以作为实际参数进行传递
基本数据类型参数传递
class Demo { public static void main(String[] args) { int x = 3; show(x); System.out.println("x="+x); } public static void show(int x) { x = 4; return ; } }
这道题的结果是3。
首先执行主函数,主函数进栈,然后执行int x = 3; 现在x的值为3。然后调用show函数,所以show 函数进栈,将x = 3 传进去,show函数将x赋值为4,show函数return,show函数出栈,这时,栈中只剩下了主函数中的x = 3 ,然后输出。所以结果为3。
引用数据类型参数传递
class Demo { int x = 3; public static void main(String[] args) { Demo d = new Demo(); d.x = 9; show(d); System.out.println(d.x); } public static void show(Demo d) { d.x = 4; } }
结果为4。
首先执行主函数,主函数进栈,然后执行Demo d = new Demo(); 这时就在堆中开辟一块空间,同时将它的地址赋值给栈中的d,它中的x赋值为3,执行 d.x = 9; 堆中的x就被赋值为9;执行show(d); show函数进栈,将对象d传入,堆中的x又被赋值为4;show函数执行完毕,show函数出栈;这时输出d.x。结果就为4。
函数的封装
class Person { private int age; public void setAge(int a) { if (a < 0) { System.out.println("年龄不能为负数"); return; } age = a; speak(); } void speak() { System.out.println("age=" + age); } } class Test { public static void main(String[] args) { Person p = new Person(); p.setAge(20); } }