我对java的那些事

来源:互联网 发布:python 改变字体颜色 编辑:程序博客网 时间:2024/05/01 02:57

1.介绍

java是1995年sun公司推出的面向对象语言。他的基本语法跟C、C++很相似,同时在C++面向对象的基础上做了改进。

2.比较

java操作上跟C很多相近,一些常有的数据类型以及申明变量的方式,但也有些改变,比如C语言里的指针,在java里改成了引用。java中除了8种基本类型外,其他的都是引用类型。这8中基本类型是byte,char,short,int,long,float,double,boolean。

java和c++都是面向对象的,但java在一些混淆的问题上做了修改。例如,c++支持类的多继承,而java的类之间只支持单继承,但接口之间支持多继承。那java为什么把继承分成类的单继承和接口多继承呢?如果支持类的多继承会遇到这样一个问题,当子类继承两个父类,这两个父类具有相同的方法时,那么子类调用父类方法时,运行的应该是哪个呢?这就很容易让人混淆。所以java就把类之间的继承改成了单继承,这样就保证了一个类只有一个父类,不会出现刚才那个混淆的问题。但接口为什么会支持多继承呢?难道不会出现那个问题吗?答案是肯定不会,因为接口都没有具体实现,怎么会有调用方法出现问题这一说呢。但是,如果你对两个父接口稍作手脚,就会出现问题了,例如,两个方法的返回值不一样,那么子类必须包有这两个父类的方法,但同一个接口里不能出现两个同名方法,且返回值不一样又不满足重载的定义。所以,接口继承的时候需要注意这个点。更多详细可参考:http://scorpiomiracle.iteye.com/blog/580983

3.说明

OOP面向对象编程具有封装性、抽象性、继承性和多态性。

封装性:就是把一事物的过程和数据包围起来成一个对象,对数据访问通过已定义的界面。面向对象也始于这基本概念,即现实世界都可以被描绘成一系列完全自治的、封装的对象,这些对象通过受保护的接口互相访问。

抽象性:就是把一事物忽略与目标无关的部分,以便于更加充分的认识与目标相关的方面。抽象并不能解决全部问题,而是解决其中一部分,忽略不用的部分细节。抽象分过程抽象和数据抽象。

继承性:类的继承是一种联接类的层次模型,并允许和提倡类的重用,表示类之间共性的一种方法。新的对象的类可以在已有的类中派生,这个过程叫做类的继承,新类将会继承原来的类的特性,那么新类叫做原始类的子类,原始类叫做新类的父类。子类可以从父类那边继承成员变量和方法,并可以增加和修改方法来表示新对象的特性。

多态性:不同的对象对同一个消息做出不同响应,得到不同结果。多态性包括参数多态性和包含多态性。多态性具有灵活、抽象、行为共享和代码共享的优势,很好的解决了应用程序函数同名问题。

多态性中的重载和重写。

方法的重载和重写是多态性的体现。重写是父类和子类之间的多态性的一种表现,当子类写的一个方法与父类一样的时候,即相同名称和参数的时候,我们说该方法被重写,当子类调用该方法的时候,会运行自己定义的,而父类的该方法将会被屏蔽。重载是一个类中的多态性的一种表现,如果一个类中定义多个同名的方法,他们之间参数个数或参数类型不同,我们称这些方法重载,在重载方法里可以改变方法的返回值类型。

4.基本类和函数

java中有关字符串的类有String ,StringBuffer ,StringBuilder 等,String 每次值变化时,都要重新申请一下内存地址,StringBuffer 内存的空间会自己扩展(16字节),线程安全,StringBuilder 同StringBuffer,但线程不安全,单线程速度较快。

ArrayList,Vector, LinkedList的存储性能和特性,ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

5.特点

java是有JVM加载class字节文件的原理机制实现运行的,即java具有它运行的虚拟机,在JVM中类是由ClassLoader和他的子类实现装载,java ClassLoader是java运行的重要的系统组件,负责在运行时查找和装入类文件的类。在对应操作系统上具有相对应的JVM平台,这样实现了java跨平台的技术。

java的内存管理机制,JVM启动以后,会分配两类内存区域,一类用于开发人员使用,比如保存一些变量,对象等,一类JVM自己使用,比如存放一些class类和描述。

第一类内存区域又可以分为栈(stack)、堆(heap),还有一些静态存储区域。栈里存放对象引用、基本类型的变量等,而堆里面存放对象和数组。方法的执行是在栈上进行的,这一点可以通过异常的时候,经常会默认打印e.printStackTrace();栈信息得知。

第二类内存,有PermGen space,全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同,SUN的JDK在GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理。SUN 的JVM把内存分了不同的区,其中一个就是permenter区用来存放用得非常多的类和类描述。本来SUN设计的时候认为这个区域在JVM启动的时候就固定了,但没有想到现在动态会用得这么广泛。而且这个区域有特殊的垃圾收回机制,现在的问题是动态加载类到这个区域后,gc根本没办法回收。

GC垃圾回收,Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代 码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢。这是因为在Java虚拟机中,存在自动内存管理和垃圾清扫机制。概括地说,该机制对 JVM(Java Virtual Machine)中的内存进行标记,并确定哪些内存需要回收,根据一定的回收策略,自动的回收内存,永不停息(Nerver Stop)的保证JVM中的内存空间,放置出现内存泄露和溢出问题。

更多关于GChttp://www.cnblogs.com/hnrainll/archive/2013/11/06/3410042.html




0 0
原创粉丝点击