J2SE之重学面向对象

       J2SE之重学面向对象

                给自己放了一个长长的假期,感觉以前学到的有关软件编程的好多知识已经淡忘了,正好现在借着学习J2SE的机会重新复习一下,也让自己的记忆更加深刻。用了两天时间将面向对象的知识快速的学习了一下,大多数知识还都是以前学过的,但也有少数的知识是与当时不一样的,还有就是由于我自己学艺不精没有明白的,在这里就整理补充一下。

1、类和对象的概念:

  对象通过“属性”和“方法”来分别对应事物所具有的静态属性和动态属性。

  类是用于描述同一类形的对象的一个抽象的概念,类中定义了这一类对象所因具有的不同的静态属性和动态属性。类可以看成一类对象的模板,对象可以看成该类的一个具体事例。Java中类的定义跟以前学过的c#是差不多的,再此不在多说。

2、类(对象)之间的关系:

这部分内容在以前学UML的时候就学过,但是有点淡忘,再此只是复习回忆。

几种关系分别是:关联关系、继承关系(一般和特殊的关系)、聚合关系(整体和部分的关系,可分开的整体和部分)、组合关系(不可分开得整体和部分的关系)、实现关系、多态等。

3、内存解析:

视频中老师一直强调内存解析,一定要弄清楚内存是如何存放的。看一下例子:

class Point{   //定义了一个点类
	double x,y,z;
	
	Point(double _x,double _y,double _z){
		x=_x;
		y=_y;
		z=_z;
	}
	void setX(double _x){
		x=_x;
	}
	
	double getDistance(Point p){    //求距离的方法
		return(x - p.x)*(x - p.x)+(y - p.y)*(y - p.y)+(z - p.z)*(z - p.z);
		
	}
}
public class TestPoint{
	public static void main(String[] args){   //主程序入口
		Point p=new Point (1.0,2.0,3.0);
		Point p1=new Point(0.0,0.0,0.0);
		System.out.println(p.getDistance(p1));
		
		p.setX(5.0);
		System.out.println(p.getDistance(new Point(1.0,1.0,1.0)));
	}
}

从程序入口void main开始分析:

第一句:


前两句话都是实例化Point类的对象,都是属于引用类型的,需要分配两块内存,局部变量放在栈上,实例化出来的对象放在堆上。如图所示。


接着下一条语句:


此时的p是一个临时变量,是局部分配的,所以要放在栈中,将P1中的值复制到p中,所以此时p和P1指向的应该是同一块内存,如图:


下面开始执行GetDistance方法,执行完以后,返回一个数值。返回的数值会重新在栈中开辟一块空间,临时存放在栈中:

当执行完打印输出之后,也就是方法调用完之后,临时存放在栈中的返回值和临时变量就没有了。如图:


同理:下一条语句:


执行完成之后的内存情况:


下一条语句:因为没有指定new出来的(1.0 1.0 1.0)的局部变量,所以就由方法GetDistance中的P来接受,在栈中出现一个p,指向新new出来的对象。


接着计算出来结果后又存放在栈中临时存放空间中,调用完成之后消失,同样,p也属性临时变量,也会消失。


最后,在堆中开辟出来的(1.0 1.0 1.0)的空间也会由垃圾回收机制回收。

等main方法执行完之后,再栈和堆中的所有的空间都会被垃圾回收机制回收,一切又回归原始。

到此就是整个程序的内存分析过程。

4、  Package和Import语句

为了便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,Java引入包(package)机制,提供类的多重类命名空间。

Package语句格式:


  如果写的类在一个包中,编程是用到这个类,这个类的目录一定要写对,和包的目录层次一致。如上边的例子。另外还要把这个类文件放在相应的目录(文件夹)下边。如果在其他类中药执行一个包中的类,需要写包全名,还要添加引入语句。

引入包中类的简写:

Import包名.类名


   讲对象的时候讲的内容挺多的,听得我也有点不知所云。。。多总结总结应该就会好点了,这里先总结这些,以后再继续吧。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值