主题一 面向对象程序设计
» Java中面向对象、类与对象的定义
- 对象是客观世界中存在的事物,例如一个人,一辆车,一堂计算机课,正是无数的对象构成了世界,因此人们对于世界的认识是以对象为单位开始的。一个对象通常具有三方面特征:标识、属性、方法(行为)。(《Java程序设计》北京航空航天大学出版社 )
- 类可以将数据和函数封装在一起,其中数据表示类的属性,函数表示类的行为。定义类的过程就是定义类的属性和行为(方法)的过程。一个类的定义包含两部分的内容:定义类头和定义类体
- 类与对象的关系。类是对某一类事物的描述,是抽象的,概念上的定义;对象是实际存在的该类事物的每个个体,因此也称实例(instance)
- 面向对象的三大特征:封装(Encapsulation)增加了程序的安全性。继承(Inheritance)提高了代码的可重复利用率。多态(Polymorphism)包括方法重载和方法覆盖
[请点击查看更多内容转自百度空间玲珑齐]
» 构造函数(Constructor)
- 构造函数也称构造方法,它是一种特殊的、与类名同名的方法,专门用于创建对象,完成初始化的工作。构造方法的名称与类名相同
- 构造函数的继承是指子类可以继承父类的构造函数
- 构造函数的重载是指同一个类中存在着若干个具有不同参数列表的构造函数。构造方法的重载,参数列表必须不同。可以在构造函数的第一行使用this关键字调用其它(重载的)构造方法
[请点击查看更多内容 转自百度空间西雁大大的空间]
» 静态代码块与构造函数的区别
- 构造函数是对每个新创建的对象进行初始化,而静态代码块则是对每个类进行初始化
- 构造函数是在用new运算符创建新对象时由系统自动执行,而静态代码块则是在它所属的类被加载到内存时由系统调用运行的
- 不同于构造函数,静态代码块不是方法,没有方法名、返回值和参数列表
[请点击查看更多内容 转自网易博客burst3166的博客]
» 对象的生成,使用及清除
类定义以后,只有实例化后才有意义创建对象就是在内存中开辟一段空间,存放对象的属性和方法。创建对象分为声明对象和实例化对象两步。
- 声明对象就是确定对象的名字及所属的类
- 实例化对象是在内存中为对象分配具体的空间,并初始化其属性和方法。也可以将两部合为一步:类名 对象名 = new 类名(参数列表)
- 不同于构造函数,静态代码块不是方法,没有方法名、返回值和参数列表
关于对象的使用的内容,包括引用对象的成员变量和成员方法。
最后关于对象的清除有以下方法可供选择:Java虽然没有提供析构方法,但提供了一个类似的方法:protected void finalize(); Java对内存的释放是采用垃圾自动回收机制;Java系统另外提供了方法“System.gc()”来强制立即回收垃圾(但系统并不保证会立即进行垃圾回收)。Java虚拟机在即将回收对象存储单元之前可能先调用该对象的finalize方法,如果该对象没有定义finalize方法,则Java系统可能会先调用该对象默认的finalize方法。
[请点击查看更多内容 转自百度空间戴经纬的空间]
» 垃圾收集机制
Java运行时系统通过垃圾收集机制周期性地释放无用对象所使用的内存,完成对象的清除。这种方式是系统自动隐含进行的。一个对象在没有引用指向它时,该对象成为一个无用对象,可作为垃圾进行收集。不同的Java虚拟机具有不同的垃圾回收机制调用垃圾回收器有两种相同效果的方法:System.gc()和Runtime.getRuntime().gc()。这两种方法的调用不会强制垃圾回收器立刻执行,只是一种建议、通知性而非强制性的要求,希望Java虚拟机调用垃圾回收器来回收已被废弃的对象,以便释放占据的资源供其它对象使用。
[请点击查看更多内容转自CSDNdaniel_tu的专栏]
» 静态修饰符(static)的作用
在类定义过程中,如果希望类的某些属性或方法属于该类,即在未创建该类的对象时已经分配空间,可以在属性和方法前面加上static修饰符,成为静态属性或静态方法。
[请点击查看更多内容 转自CSNDximenghappy的专栏]
» static方法中不能处理非static的域或方法
一般情况下,你得产生某个对象,再通过该对象取用其数据和函数,所以non-static数据/函数必须知道他们隶属于哪一个对象,才有办法运作。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。static 成员的最常见的例子是main(),因为在程序开始执行时必须调用main(),所以它被声明为static。由于static函数前并不需要先产生任何对象,所以在static函数中不能“直接”取用non-static数据/函数,如果只是单纯的直接调用non-static函数,而没有指定某个对象,是行不通的,原因是non-static数据/函数总是得和特定的对象捆绑在一起。
[请点击查看更多内容 转自CSDN断翼天使]
» Java语言提供的访问控制修饰符
Java语言提供的访问控制符有:public(公共访问控制符)、private(私有访问控制符)、protected(保护访问控制符)、默认访问控制符(没有访问权限修饰符)。
[请点击查看更多内容 转自51CTO.com]
» 封装的实现
封装性在Java中有很多形式,private只是最基本的一种形式,也是比较常见形式。
属性封装:private 属性类型 属性名称。
方法封装:private 方法返回值 方法名称(参数列表){ }
[请点击查看更多内容 转自CSDNLuoHanJava的专栏 ]
» 类的继承
- 类的继承又称为类的派生,是指一个类可以继承其它类的所有成员,包括成员变量和成员方法。Java语言只支持单继承(即一个子类只能有一个父类,而一个父类可以有多个子类),不允许多继承,但可以通过实现多个接口,来实现多继承的效果
- 在Java语言中,类的继承是通过extends关键字来实现的,在定义类时使用extends关键字指明新定义类的父类。新定义的类成为子类,它可以从父类那里继承所有非private的属性和方法作为自己的成员
- 方Java语言中有一个比较特殊的类,就是java.lang包中的Object类,它是所有类的父类。如果一个类没有使用extends关键字来明确标识继承另外一个类,则这个类就默认继承Object类。因此,Object类是Java类库中的最顶层的类,是所有类的超类,即所有的Java类都是它直接或间接的子类
[请点击查看更多内容 转自CSDN维生素&的专栏]
» 方法的继承,覆盖和重载
- 变方法的继承是指子类可以继承父类中非私有的方法
- 方法的覆盖是指子类定义的方法与父类定义的方法完全相同(返回值,方法名,参数列表),可以通过在方法名前加不同的类名或对象名区分
- 方法的重载是指同一类中可以包含多个同名方法的情况,但这些方法参数必须不同。Java根据参数的类型及参数的个数来区分这些方法,即或者是参数个数不同,或者是参数的类型不同,不能通过返回值来区分同名方法。重载使程序具有更好的兼容性,体现了面向对象程序设计的多态性
[请点击查看更多内容转自CSDNcdsnmdl的专栏]
» 多态的概念
多态是同一表现形式的不同实现机制,是面向对象的三大重要特征之一。多态性也是实现软件可重用性的手段之一,它使得继承性更为灵活,并使程序具有良好的可扩展性。对象的多态性是指在一般类中定义的属性或服务被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或服务在一般类及其各个特殊类中具有不同的语义。多态性包括:
- 静态多态性:在编译时,就可以被系统识别,也称为编译时多态 ;Java中,重载(overload)方法采用静态联编的方法实现 ;重载(overload):完全相同的方法名和不同的参数列表
- 动态多态性:在编译时不能被系统识别,只有在运行时才能被系统识别,也称为运行时多态 ;Java中,覆盖(override)方法、抽象方法和接口采用动态联编的方法实现。覆盖(override):子类和父类定义了具有相同声明的方法,但它们一般具有不同的含义和功能
[请点击查看更多内容 转自开源中国社区]
» 方法的重载与方法的重写的区别
方法的重载与方法的重写的共同点是:它们均为多个方法实现体对应同一个方法名,但两者的具体规则具有很大的区别。
- 重载的方法彼此独立,实质上是不同的方法,而重写的方法之间是取代的关系
- 重载的方法存在于同一个类中,其数量没有限制,而重写的方法分别存在于子类和父类中,其子类中最多只能有一个重写的方法
- 重载的方法必须具有不同的参数列表,而重写的方法则必须具有相同的参数列表
- 重载的方法的返回值类型可以随意,没有必须一致的规定,而重写的方法则必须具有相同的返回值类型
- 重载的方法对修饰符和抛出异常没有限制,而重写的方法则对修饰符和抛出异常具有限制条件,原则上要保持扩展性,即满足子类对父类的继承扩展的面向对象的特性
[请点击查看更多内容 转自CSDN博客频道wlsugerFly的专栏]
» 父类对象和子类对象之间的转换
- 子类对象可以被视为是其父类的一个对象
- 父类对象不能被当作是其某个子类的对象
- 通过参数的传递可以将一个子类对象作为实参传递给父类对象的形参
- 父类的实例对象实际上是其某个子类实例对象时,可以通过强制类型转换将父类的实例对象恢复为子类的实例对象
[请点击查看更多内容 转自CSDN博客频道Cheuk Hang的专栏]
» Java中的变量
- 成员变量:在类体的变量定义部分所定义的变量
- 局部变量:在方法体中定义的变量和方法的参数
[请点击查看更多内容 转自爱燕神鹰的博客园]
» abstract关键字
- 抽象类:当一个类被声明为abstract时,这个类被称为抽象类。所谓的抽象类就是没有实例对象的类。抽象类是他的所有子类的公共属性的集合,所以抽象类的一大优点就是充分利用公共属性来提高开发和维护程序的效率
- 抽象方法:类方法修饰符,abstract则声明了一种仅有方法头,而没有具体的方法体和操作实现的抽象方法。abstract方法只有方法头得声明,而用一个分号来代替方法体的定义;至于方法体得具体实现,那是由当前类的不同子类在他们各自的类定义中完成的
[请点击查看更多内容 转自大崩的博客园]
» final关键字
final在Java中表示的意思是最终的意思。也可以成为完结器。可以使用final关键字声明类、属性、方法:使用final声明的类不能有子类;使用final声明的方法不能被子类所覆写;使用final声明的变量即成为常量,常量不可以修改。
[请点击查看更多内容 转自CSDN博客xiaokang06的专栏]
» 接口(interface)
从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。接口中定义了一组行为的协议。两个对象之间通过这个协议来进行通信。在Java语言中,可以通过实现接口来实现多重继承:一个类可只继承一个父类,但可以实现多个接口。实现了接口的类就继承了该接口中定义的常量,同时要对接口中所有的抽象方法进行重写。在类定义中,用implements关键字来声明该类将要实现哪些接口。对于接口制订者:SUN公司通过定义接口,来制定新的软件系统的规范,例如Servlet规范、EJB规范和JDO规范,这些规范主要以接口的形式描述了软件系统必须具备的功能。对于接口调用者:接口调用者的程序具有良好的可移植性。以JavaWeb应用为例,由于Tomcat和Resin遵守同样的规范,因此用户开发的JavaWeb应用能够顺利的从Tomcat容器移植到Resin容器中。
[请点击查看更多内容 转自逍遥十四的网易博客]
[请点击查看更多内容 转自刘璐的博客园]
» 抽象类与接口的区别
抽象类与接口紧密相关。然而接口又比抽象类更抽象,这主要体现在它们的差别上:
- 类可以实现无限个接口,但只能继承一个抽象(或任何其他类型)类,从抽象类派生的类仍可实现接口,从而得出接口是用来解决多重继承问题的
- 抽象类中可以存在非抽象的方法,即已经有一些方法的具体定义,而接口中则不能存在非抽象的方法,即仅仅只能定义各个方法的界面(方法名,参数列表,返回类型),并不定义具体细节
- 抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是公共的静态常量
- 当使用父类中已具有实际功能的方法时,该方法在子类中可以不必实现,直接引用,子类也可以重写父类中的该方法。而实现一个接口的时候,则一定要实现接口中所定义的所有方法,而且不可遗漏任何一个,否则就会出现语法错误
- 这一点也是最重要最本质的一点,抽象类是对象的抽象,然而接口则是一种行为规范
[请点击查看更多内容 转自博客园Alan's Blog]
» package关键字
包(package)是相关的类和接口的一个集合,它提供访问控制与命名空间管理。 Java平台中的类与接口都是根据功能以包组织的。为了便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,Java语言中引入了包(package)机制,以提供类的多重命名空间。
[请点击查看更多内容 转自CSDNcombook的专栏]