java标记符的命名规则
- 1)标识符有大小写字母、下划线、数字和$符号组成。
- 2)开头可以是大小写字母,下划线,和$符号(不能用数字开头)
- 3)标识符长度没有限制
- 4)标识符不能使关键字和保留字
面向对象的四大特征
抽象、封装、继承、多态
封装,类、对象,类与对象的关系,创建对象,对象实例变量
构造函数,默认构造函数,派生类的构造函数,构造函数的作用,初始化的顺序,构造方法的重载
构造函数:创建对象的同时将调用这个对象的构造函数完成对象的初始化工作。把若干个赋初值语句组合成一个方法在创建对象时一次性同时执行,这个方法就是构造函数。是与类同名的方法,创建对象的语句用new算符开辟了新建对象的内存空间之后,将调用构造函数初始化这个新建对象。
构造函数是类的特殊方法:
- 构造函数的方法名与类名相同。
- 构造函数没有返回类型。
- 构造函数的主要作用是完成对类对象的初始化工作。
- 构造函数一般不能由编程人员显式地直接调用。
- 在创建一个类的新对象的同时,系统会自动调用该类的构造函数为新对象初始化。
类的修饰符:public类 VS 默认; abstract类; final类;
- 1)类的访问控制符只有一个:public,即公共的。公共类表明它可以被所有其他类访问和引用。
- 若一个类没有访问控制符,说明它有默认访问控制特性,规定该类智能被同一个包中的类访问引用(包访问控制)。
- 2)abstract类:用abstract修饰符修饰的类被称为抽象类,抽象类是没有具体对象的概念类,抽象类是它所有子类的公共属性集合,用抽象类可以充分利用这些公共属性来提高开发和维护效率。
- 3)final类:被final修饰符修饰限定的,说明这个类不能再有子类。所以abstract与final不能同时修饰一个类。
域和方法的定义
1)域:定义一个类时,需要定义一组称之为“域”或“属性”的变量,保存类或对象的数据。可以是java任意的数据类型,其中包括简单类型、类、接口、数组等。一个类中域名应该是唯一的。
2)方法是类的动态属性,标志了类所具有的功能和操作。
方法由方法头和方法体组成:
修饰符1 修饰符2 …返回值类型 方法名(形式参数列表) throw(异常列表)
{
方法体个语句;
}
static域和方法,特点,本质,与普通域和方法区别,初始化问题
- 1)静态域:用static修饰符修饰的域是仅属于类的静态域。特点是:它们是类的域,不属于任何一个类的具体对象。保存在类的内部区域的公共存储单元,任何一个类的对象访问它都是相同的数值,任何一个类的对象去修改它,都是在对同一个内存单元操作。
- 2)静态方法:用static修饰的方法,是属于整个类的方法;(调用静态方法时,应该使用类名做前缀,而不是使用某个具体对象名。)
非静态方法属于某个对象的方法,在这个对象创建时,对象的方法在内存中拥有自己专用代码段;而静态方法属于整个类,它在内存中的代码段将随着类的定义而分配和装载,不被任何一个对象专有。 - 由于static方法是属于整个类的方法,所以它不能操纵和处理属于某个对象的成员变量,而只能处理属于整个类的成员变量,static方法只能处理static域。
final关键字,final类,final域,final方法
- 1)final类:一个类如果被final修饰符修饰限定,说明这个类不再能有子类
- 2)final域:final是用来修饰修饰常量的修饰符,一个类的域如果被声明为final,那么它的值在程序的整个执行过程中都不能改变。
用final修饰符说明常量是注意:- 1.需要说明常量的数据类型;
- 2.需要同时指出敞亮的具体取值;
- 3.因为所有类对象的常量成员,其数值固定一致,为了节省空间,常量通常声明为static.
- 3)final方法:不能被当前类的子类重新定义的方法。被private限定为私有方法,以及final类中的方法,都是默认为最终方法。
访问控制符是一组想定类、属性、方法是否可以被程序中的其他部分访问和调用的修饰符,其他部分指这个程序中这个类之外的类。
- 1)类的访问控制:
类的访问控制符只有一个Public,公共的。一个类被声明为公共类,表明它可以被所有的其他类访问和引用,程序其他部分可以创建这个类的对象,访问这个类内部可见的成员变量和调用它的可见方法。
如果类没有访问控制符public说明它是默认访问控制,规定该类只能被同一个包中的类访问和引用,不可被其他包中的类使用(包访问)。
- 2)类成员的访问控制:
- Public:公共。一个方法或者域被声明为公共的,表明它可以被所有的类访问。
- 默认访问控制符:类的定义中,域和方法没有指定访问控制符,则域和方法具有包访问性,即可以被同一个包中的所有类(的方法)访问。
- Protected:保护访问控制符,类中限定为protected的成员可以被这个类本身、它的子类(包括同一个包和不同包中的子类)以及同一个包中的其他类来访问。
- Private:私有访问控制符,被private修饰的域和方法只能被同一个类中的成员方法所访问,而不能被任何其他类(包括该类的子类)访问。它们也被称之为私有域和方法。
**类的继承,继承的特性可给面向对象编程带来哪些好处?什么是单继承,什么是多重继承?
- 继承:是存在于面向对象程序中的两个类之间的一种关系,当一个类获取另一个类的所有非私有的数据和操作的定义作为自己的一部分或全部成分时,就称两个类之间是继承关系。
继承能够使程序结构清晰,降低编码和维护工作量。可以提高程序抽象程度,使之更接近人的思维方式,同时也可以提高程序开发效率,降低维护工作量。 - 单继承:只任何一个类都只有一个单一的父类;
- 多重继承:只一个类可以有一个以上的父类,它的静态的数据属性和操作从所有这些父类中继承。Java处于安全性可靠性考虑,仅支持单继承。
域的继承与隐藏
在子类中重新定义一个与从父类哪里继承来的域变量完全相同的变量,导致子类中有两个同名变量,一般情况,子类的方法所操作的是子类自己定义的变量,而从父类继承的变量为不可见,即被子类同名变量隐藏,成为域的隐藏。
方法的继承与覆盖,与方法重载有什么不同?
- 子类可以重新定义与父类同名的方法,实现对父类方法的覆盖(overload),与域的隐藏不同在于:子类隐藏父类的域只是使之不可见,父类同名域在子类对象中仍然占有自己的独立内存空间;子类方法对父类同名方法的覆盖将清除父类方法占用的内存,从而使父类方法在子类对象中不复存在。注意:子类重新定义父类已有方法时,应保持与父类完全相同的方法头声明,即应与父类具有完全相同的方法名,返回值和参数列表。
- 重载(override)是在一个类中定义同名方法的情况。由于重载发生在同一个类里,不能再用类名来区分不同的方法,所以一般采用不同形式参数列表,包括形式参数个数、类型和顺序不同来区分重载方法。
super 与 this
super调用父类构造函数:严格来说子类并不继承父类构造函数。但子类构造函数与父类构造函数存在一定关系并遵循以下原则:
- 如果子类自己没有定义任何构造函数,那么创建子类对象时将调用父类无参数构造函数。
- 如果子类自己定义了构造函数,则在创建子类对象时,系统将首先隐含执行父类无参数的构造函数,然后再执行子类自己的构造函数。
- 如果在子类自己定义的构造函数中,利用super关键字显式地调用父类的构造函数,系统将不再隐含调用父类的无参数的构造函数。super的显式调用语句必须是子类构造函数的第一个可执行语句。
this:一个类的不同构造函数之间可以互相调用。一个构造函数需要另一个构造函数时,应使用关键字this,同时这个调用语句应该是整个构造函数的第一个可执行语句。当使用this并给他一个参数列表时,this显式调用参数匹配的另一个构造方法。
多态:重载,覆盖,对象引用多态(兼容性原则)
- 多态,指一个程序中同名的不同方法共存的情况。突出Java语言的继承性。面向对象程序中多态可以表现在:
- 1)子类对父类方法的覆盖;
- 2)一个类中方法的重载;
- 3)将子类对象作为父类的对象实现多态。
父类与子类对象的转换
子类继承了父类所有的非私有的成员(属性和方法),父类成员也就是子类成员。我们可以通过父类变量让一个子类对象做父类对象可做的全部事情。
如果父类变量指向的实际是一个子类对象,即早先曾将子类对象的引用赋值给这个父类变量,那么可以用强制类型转换将这个父类变量引用转换为子类对象的引用,也就是将作为父类对象看待的子类对象转变为作子类对象看待。
接口是用来实现类间多重继承功能的结构。
Java中接口在语法上有些相似与类,它定义了若干个抽象方法和常量,形成一个属性集合,属性集合通常对应了某一组功能,主要是可以帮助实现类似于类的多重继承功能。
声明接口:
[public] interface 接口名 [extends 父接口名列表]
{ //接口体
// 常量域声明
[public] [static] [final] 域类型 域名 = 常量值;
//抽象方法声明
[public] [abstract][native] 返回值 方法名(参数列表)[throw 异常列表];
}
实现接口:
在类的声明部分,用implements关键字声明该类将要实现那些接口。
如果实现某接口的类不是abstract的抽象类,则在类的定义部分必须实现指定接口的所有抽象方法,即为所有方法定义方法体,方法头部分应该与接口中的定义完全一致。
如果实现接口类是abstract类,它可以不实现该接口的所有的方法。
一个类在实现某接口的抽象方法时,必须使用完全相同的方法头。
接口的抽象方法的访问限制符都已指定为public,所以类实现方法时候,必须显式地使用pubic修饰符。
什么是抽象?什么是过程抽象?什么是数据抽象?面向对象软件开发如何实现?
- 抽象:即去除掉被研究对象中与主旨无关的次要部分,或暂时不考虑的部分,而仅抽取与研究工作有关的性质的内容加以考察。
- 过程抽象:将整个系统的功能划分为若干部分,强调功能完成的过程及步骤。
- 数据抽象:把系统中需要处理的数据和数据上的操作结合在一起,根据功能性质和作用等因素抽象成为不同的抽象数据类型。
- 面向对象软件开发采用数据抽象的方法构建程序的类,对象及方法。
什么是封装?面向对象程序如何实现封装?
封装是指利用抽象数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型内部,系统的其他部分只有通过包裹在数据外面的被授权操作,才能够与这个抽象数据类型交流和交互。
抽象数据类型用“类”这个面向对象工具可理解和操纵的结构来代表的,每个类封装了相关数据和操作。
使用抽象和封装有哪些好处?
抽象可以帮助人们明确工作重点,理清问题的脉络。
封装特性使抽象数据类型的可重用性大为提高,利于构建,开发大型标准化的应用软件系统,大幅提高生产效率,缩短开发周期和降低各种费用。
Java程序中使用的类分为哪两种?什么事系统定义的类?什么事用户自定义类?
- 1)系统定义的类及用户自定义类
- 2)Java类库是一组由开发人员或软件供应商编写的Java程序模块,每一个模块通常对应一种特定的基本功能和任务可以直接利用这些类库无需从头编写。
- 3)用户自己根据需要定义的类。
使用已经存在的类(包括类库中系统类和用户类)有哪三种主要方法?如何在程序中引入已经存在的类?
第一、继承系统类或继承已经定义好的类。
第二、创建已经定义好的类的对象。
第三、直接使用类。
什么事静态初始化器?它有什么特点?与构造函数有什么不同?
- 静态初始化器:由static引导的一对大括号括起的语句组,作用与类的构造函数相似,都完成初始化工作。与构造函数的不同:
- 构造函数是对每个新创建的对象初始化,而静态初始化器是对类自身进行初始化。
- 构造函数是在用new运算符产生新对象时由系统自动执行,而静态初始化器是在它所属的类加载入内存时由系统调用执行。
- 不同于构造函数,静态初始化器不是方法,没有方法名、返回值、和参数列表。
最终域和易失域各有有何特点?如何定义?
- (1)最终域:一个类的域如果被声明为final,那么它的值在程序的整个执行过程中是不能变的。
- final修饰常量时注意:
- 1)说明常量的数据类型
- 2)需要同时指出常量的具体值。
- 3)所有类对象的常量成员,其数值固定一致,为了节省空间,常量通常声明为static.例:static final String phoneNum =”123”。
- (2)易失域:一个域被volatile修饰符修饰,说明这个域可能同时被几个线程控制修改,即这个域不仅被当前程序掌握,运行过程中可能存在其他未知程序,操作来影响和改变域的取值。
如何定义方法?在面向对象程序设计中方法由什么作用?
方法名后面的小括号()是方法的标志。程序用方法名调用方法。
定义方法的目的:是定义具有相对独立和常用功能的模块,使程序结构清晰也利于模块在不同场合重复利用。
什么事抽象方法?它有何特点?如何定义、如何使用?
由abstract 修饰符修饰的抽象方法是一种仅有方法头,没有具体方法体和操作实现的方法。
例如:abstract void performDial( );
注意:所有抽象方法,都必须存在抽象类中,一个非抽象类中出现抽象方法时非法的。一个抽象类的子类若不是抽象类,它必须为父类中所有的抽象方法写方法体,不过抽象类不一定只能拥有抽象方法,它也可以包括非抽象方法。
修饰符是否可以混用?混合使用应该注意什么问题?
修饰符可以混合使用。
例如:public abstract final 三者之间并非互斥。Public abstract class …
Abstract不能与final 并列修饰一个类。
Abstract 不能与private、static、final、native修饰同一个方法。
Abstract 类不能有private域和方法。
Abstract方法必须在abstract类中。
Abstract方法不能处理非static属性。
子类的域和方法数目一定大于等于父类的域和方法数目,说法是否正确?
不正确,子类并不能继承父类的私有域和私有方法.
构造函数是否可以被重载?试举例。
可以被重载。构造函数的重载指同一个类中存在若干个具有不同参数列表的构造函数
例:D200_Card(){} / /无形式参数,无任何操作的构造函数
D200_Card(long cn){ cardNumber = cn; } //一个参数的构造函数
D200_Card( long cn,int pw; ){ cardNumber = cn; password = pw; } //两个参数的构造函数
** 什么是静态变量?什么是静态方法?各自有何特点?**
被static修饰的变量叫静态变量,被static修饰的访问静态方法。静态变量最主要特点是它们是类的域(变量),不属于任何一个类的具体对象,它不保存在对象空间,而是保存在类的内存区域的公共存储单元,任何类的对象访问它时,取到的都是相同的数值,修改它时,都是对同一个内存单元进行操作。静态方法是属于整个类的的类方法,不是属于某个具体对象的方法。
ava中对变量和成员方法的访问控制主要有哪四种?有何区别?
- a) Private:私有访问属性,被private修饰的变量或方法只能被同一个类的成员方法访问,而不能被任何其他类访问。Private访问控制符提供最高的成员保护级别,使它们不为其他类所见,体现了类的封闭和信息隐藏。
- b) 默认访问控制符:如果在类的定义中,域和方法前没有指定访问控制符,则具有包访问性,即被同一包的所有类所访问,称之为“包友元”成员。
- c) Protected保护访问控制符:被portected修饰的成员可以被类本身、它的子类、以及同一个包中所有类访问。
- d) Public公共访问控制符:成员可以被所有类访问。
个人总结
从大二开始算,我学习java已经有一年的时间了,不过虽然时间长,但是对于现在的我还是一个初学者,懂不了多少的java初学者。期间曾迷茫过,曾困惑过,走了不少的弯路,老师布置的作业每次都是不会做,每次都是要问同学,这个代码什么意思啊?为什么用这条代码,用别的不行吗?每每敲完代码面对一堆的红色error,内心都是崩溃的。
对于学习java基础的经验就是多做、多思考,基础知识的学习不能不求甚解,要追本溯源,弄清问题的本质。这样才能举一反三,由点及面。java的所有编程思路都是“面向对象”的编程。所以大家在往更高境界发展以前一定要打好基础,基础是王道。我们的基础要扎实扎实再扎实。所谓打好基础并不是说要熟悉所有的java代码,而是要了解java的结构。class,object,各种套用import,extend 让自己在结构上对java有个立体而且整体的了解。
java是一种面向对象的操作语言,必须要明白这点,才能从总体_上把握java。 学习编程,首先要从分析别人的代码开始,明白他们的思路,认真分析,在学习的过程中一定要动手做、写代码。学习java 不是抱一本书看看就行。很多东西和体会必须自己动手才能真正属于自己,实践是最重要的。而且还可以从实验中,体会到编程的乐趣,感受到自己做好一个程序,然后运行出结果,很有成就感。