学习内容:学习定义类、成员变量和方法,创建并使用对象,java的参数传递机制,递归方法,方法的重载,封装,使用package,import,建立构造器和构造器的重载,继承的使用,重写父类方法,super关键字的使用,继承和多态,向上转型和强制类型转换,继承和组合的关系,初始化块的作用,静态初始化块
学习笔记:
1、对定义成员变量语法格式的要求。①修饰符:修饰符可以省略,也可以是public、protected、private、static、final,其中public、protected、private只能出现其中的一种,可以与static、final组合使用。
2、类型:可以是java允许的任何数据类型,包括基本类型和引用类型。成员变量名只要是一个合法的标示符即可,定义成员变量还可以指定一个可选的默认值。
3、定义方法语法格式。①修饰符可以省略,修饰符可以省略,也可以是public、protected、private、static、final、abstract,其中public、protected、private只能出现其中的一种,abstract和final只能出现其中之一,可以和static组合使用。②返回值类型可以是java语言的任何数据类型,包括基本类型和引用类型,如果声明了方法返回值类型,方法体内必须有一个有效的return语句,该语句返回一个变量或者表达式,该变量和表达式类型必须与声明的类型匹配,如果没有返回值,必须要用void声明。③方法名的命名规则与成员变量名的命名规则相同。④形参列表用于定义该方法可以接受的参数,形参列表由零组到多组“参数类型 形参名”组合而成,多组参数之间以英文逗号隔开,形参类型和形参名以英文空格符隔开。
4、不管是数组还是对象,当程序访问引用变量的成员变量或方法时,实际上是访问该引用变量所引用的数组、对象的成员变量或方法。
5、this关键字总是指向调用该方法的对象,根据this出现位置的不同,this作为对象的默认引用有两种情形。①构造器中引用该构造器正在初始化的对象。②在方法中引用调用该方法的对象。
6、static修饰的方法而言,可以使用类直接调用改方法,如果在静态方法里使用this,则this无法指向合适的对象,所以静态方法里不能使用this关键字,也不能访问非静态的普通成员,java语法规定:静态成员不能直接访问非静态成员。
7、java编程时不要使用对象去调用静态成员变量和方法,而应该使用类去调用!
8、使用this作为方法的返回值可以让代码更加简洁,但可能造成实际意义的模糊。
9、从JDK1.5以后,java允许定义形参个数可变的参数,从而允许为方法指定数量不确定的参数。如果在定义方法时,在最后一个形参的类型后增加三点(...),则表明该形参可以接受多个参数值,多个参数值被当成数组传入。
10、个数可变的形参只能处于形参列表的最后,一个方法中最多只能包含一个个数可变的形参,个数可变的形参本质就是一个数组类型的形参,因此调用包含个数可变形参的方法时,该个数可变的形参既可以传入多个参数,也可以传入一个数组。
11、一个方法体内调用它自身,被称为方法递归。方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无需循环控制。
12、java允许同一个类里定义多个同名方法,只要形参列表不同就行。如果同一个类中包含两个或两个以上方法的方法名相同,但形参列表不同,则被称为方法重载。
13、java程序中确定一个方法需要三个要素①调用者,也就是方法的所属者,即可以是类,也可以是对象。②方法名,方法的标识③形参列表,当调用方法时,系统将会根据传入的实参列表匹配。
14、方法重载的要求就是两同一不同:同一个类中方法名相同,形参列表不用。至于方法的其他部分与方法重载没有任何关系。
15、成员变量被分为类变量和实例变量两种,定义成员变量时没有static修饰的就是实例变量,有static修饰的就是类变量。其中类变量从该类的准备阶段起开始存在,直到系统完全销毁这个类,类变量的作用域与这个类的生存范围相同,而实例变量则从该类的实例被创建起开始存在,直到系统完全销毁这个实例,实例变量的作用域与对应实例的生存范围相同。
16、局部变量根据定义的形式不同,又可以分为如下三种。①形参:在定义方法签名时定义的变量,形参作用域在整个方法内有效。②方法局部变量:在方法体内定义的局部变量,它的作用域是从定义该变量的地方生效,到该方法结束时失效。③代码块局部变量:在代码中定义的局部变量,这个局部变量的作用域从定义该变量的地方生效,到该代码块结束时生效。
17、与成员变量不用的是,局部变量除了形参之外,都必须显示初始化。也就是说,必须先给方法局部变量和代码块局部变量指定初始值,否则不可以访问它们。
18、在同一个类里,成员变量的作用范围是整个类内有效,一个类里不能定义两个同名的成员变量,即使一个是类变量,一个是实例变量也不行,一个方法里不能定义两个同名的方法局部变量,方法局部变量和形参也不能同名,同一个方法中不同代码块内的代码块局部变量可以重名,如果先定义代码块局部变量,后定义方法局部变量,前面定义的代码块局部变量与后面定义的方法局部变量可以重名。
19、因为定义一个成员变量时,成员变量将被放置到堆内存中,成员变量的作用域将扩大到类存在范围或者对象存在范围,这种范围的扩大有两个害处。①增大了变量的生存空间。这将导致更大的内存开销。②扩大了变量的作用域,这不利于提高程序的内聚性。
20、如果有如下几种情况,则应该考虑使用成员变量。①如果需要定义的变量是用于描述某个类或某个对象的固有信息的,例如人身高,体重等信息,它们是人对象的固有信息,每个人对象都具有这些信息。这种变量应该定义为成员变量。如果这种信息对这个类的所有实例完全相同,或者说它是类相关的,这种类相关的信息应该定义成类变量,如果这种信息是实例相关的,应该定义成实例变量。②如果在某个类中需要以一个变量来保存该类或者实例运行时的状态信息,这种用于保存某个类或某个实例状态信息的变量通常应该使用成员变量。③如果某个信息需要在某个类的多个方法之间进行共享,则这个信息应该使用成员变量来保存。
21、封装是面向对象的三大特征之一,它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象的内部信息,而是通过该类所提供的方法来实现的内部信息的操作和访问。
22、对一个类或者对象实现良好的封装,可以实现以下目的。①隐藏类的实现细节。②让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对成员变量的不合理访问。③可进行数据检查,从而有利于保证对象信息的完整性。④便于修改,提高代码的可维护性。
23、外部类可以使用public和包访问控制权限,使用public修饰的外部类可以被所有类使用,如声明变量、创建实例;不使用任何访问控制符修饰的外部类只能被同一个包中的其他类使用。
24、如果一个java源文件里定义的所有类都没有使用public修饰,则这个java源文件的文件名可以是一切合法的文件名,但如果一个java源文件里定义了一个public修饰的类,则这个源文件的文件名必须与public修饰的类的类名相同。
25、关于访问控制符的使用,存在如下几条基本原则。①类里绝大部分成员变量都应该使用private修饰,只有一些static修饰的、类似全局变量的成员变量,才可能考虑使用public修饰。除此之外,有些方法只用于辅助实现该类的其他方法,这些方法被称为工具方法,工具方法也应该使用private修饰。②如果某个类主要用作其他类的父类,该类里包含的大部分方法可能仅希望被其子类重写,而不想被外界直接调用,则应该使用protected修饰这些方法。③希望暴露出来给其他类自用调用的方法应该使用public修饰。因此,类的构造器通过使用public修饰,从而允许在其他地方创建该类的实例。因为外部类通常都希望被其他类自由使用,所以大部分外部类都是用public修饰。
26、父包和子包之间确实表示了某种内在的逻辑关系,但父包和子包在用法上则不存在任何关系,如果父包中的类需要使用子包中的类,则必须使用子包的全名,而不能省略父包部分。
27、jdk1.5以后增加了一种静态导入的语法,它用于导入指定类的某个静态成员变量、方法或全部的静态成员变量、方法。
28、如果程序员没有为java类提供任何构造器,则系统会为这个类提供一个无参数的构造器,这个构造器的执行体为空,不做任何事情。无论如何,java类至少包含一个构造器。
29、一旦程序员提供了自定义的构造器,系统就不再提供默认的构造器。