Day001

1.面向过程和面向对象的区别?

以我去新疆为目的进行解释。

面向过程就是就是所有的事情都需要自己做,如,我开车,我挂挡,去新疆。

面向对象就是使用一个工具去完成我要做的事,如,我要去新疆,我命令车去新疆,而不用管车是怎么去新疆的。

 

用面向对象解决问题:

第一步要考虑用到那些类和对象

第二步考虑这些类和对象都有什么方法和属性

第三步考虑这些类之间存在什么关系。

 

2.属性就是成员变量。

 

3.类和类之间的关系:

  关联关系,如学院、教授、学生三者之间互相存在某种联系。

  继承关系,如猫继承动物类的共同属性。

  聚合关系,头、退是人身体的一部分,这种关系就是聚合关系。

  实现关系,

  多态关系,

  

4.成员变量就是一个类里的属性或方法,而局部变量是定义在方法里的变量。成员变量默认值如下表所示,而局部变量必须是先复制,才能使用。  

 

 

5.Java中除了基本的8种数据类型(如 intchar等),其它的都是引用类型。

6.内存解析,对于8中基本数据类型,

int i=0;内存会分配一块内存空间,分配给i,并赋值为0

而对于引用类型,

String s;内存会先分配一块空间给s,并赋值为null,s new了一个新的对象string,会再创建一个内存空间,把string里的属性和方法放在新的内存空间里,新的内存空间是堆内存。局部变量位于栈空间,new出来的对象放在堆空间,

7.构造函数。

 

具体如下例所示:

 

注:如果在一个类中定义了构造函数,那么系统就不会在为这个类添加构造函数了。如上面这个图。如果这样写的话,会报错。

Public  static  void  main(String[] args ){

//这句话就报错了。因为已经在系统中定义了一个构造函数。

Person tom = new Person();

}

 

8.内存分析

1)Test test = new Test(),test是一个局部变量,存放在栈内存中,分配一个地址110925,然后new Test(),会根据110925这个地址,然后在堆内存中在新开辟一个内存,存放new Test()对象,然后test就指向了new Test().

2)Int Data = 9,Data是一个局部变量,存放在栈内存中,赋值为9

3)BirthData d1 = new BirthDate(7,7,1970);d1是一个局部变量,放在栈内存中,地址为587934,然后通过new BirthDate(7,7,1970),在堆内存中新建一块内存。然后通过d1指向分配的堆内存。d2d1一样。

4)test.change1(int i),test调用change1方法时,参数i放在栈内存中,然后i根据传过来的date初始化为9,然后i在进行初始化为1234;调用完这个方法之后,这个方法就会立即释放。I也会存栈内存中清除。

5)test.change2(BirthDate b),首先在栈内存中新建一个局部变量b,然后b指向了d1,在然后b = new BirthDate(22,2,2004),b会在堆内存中新开辟一块堆内存赋值,指向22,2,2004这个堆内存。调用完这个方法后,会立即释放,b会从栈内存消失,但是new BirthDate(22,2,2004),这个不会立即消失,最后通过垃圾回收机制而进行处理。

6)test.change3(BirthDate b),也是b先指向d2,然后,b调用BirthDate类的方法setDay(22),就会修改d2的只,将d2的天数修改成22.

 

 

posted @ 2018-09-23 22:31  Aftersoon_sun  阅读(116)  评论(0编辑  收藏  举报