第 4 章 类和对象
1. 面向对象编程主要体现下列三个特征:封装性,继承,多态。
2. 类是java的基本元素,一个java应用程序就是由若干个类所构成。类是java语言中最重要的“数据类型”,类声明的变量被称作对象变量,简称对象。类是对象的模板,没有类就没有对象。
3. 类的定义包括两部分:类声明和类体。基本格式为:
class 类名{
类体的内容
}
4. 如果类名使用拉丁字母,那么名字的首字母使用大写字母;类名最好容易识别。
5. 类的目的是抽象出一类事物共有的属性和行为,并用一定的语法格式来描述所抽象出的属性和行为。类是一种用于创建具体实例(对象)的数据类型。
6. 类体的内容由两部分构成:变量的声明(所声明的变量被称为成员变量或域变量)和方法的定义。
7. 成员变量的类型可以是java的任何一种数据类型,基本类型:整型,浮点型,字符型,逻辑类型;引用类型:数组,对象和接口。成员变量在整个类内都有效,其有效性与它在类体中书写的先后位置无关。
8. 编程风格:(1):一行只声明一个变量;(2):变量的名字除了符合标识符规定外,名字的首单词的首字母使用小写,如果变量的名字由多个单词组成,从第2个单词开始的其他单词的首字母使用大写;(3):变量名字见名知意。
9. 方法的定义包括两部分:方法头和方法体。一般格式为:
10. 方法头{
方法体的内容
}
11. 方法返回的数据的类型可以且必须是java中的任何一种数据类型,当一个方法是void类型时,该方法就不需要返回数据。在方法体中声明的变量和方法的参数被称作局部变量,只在方法内有效,而且与其声明的位置有关。方法的参数在整个方法内有效,方法内的局部变量从声明它的位置之后开始有效。
12. 如果局部变量的名字与成员变量的名字相同,那么成员变量被隐藏,即被成员变量在这个方法内暂时失效。如果想用被隐藏的成员变量,必须使用关键字this。
13. 成员变量有默认值,局部变量没有默认值,因此在使用局部变量前,必须保证局部变量有具体的值。
14. 对成员变量的操作只能放在方法中,方法使用各种语句对成员变量和方法体中声明的局部变量进行操作。
15. 构造方法是类中的一种特殊方法,当程序用类创建对象时需使用它的构造方法。类中的构造方法的名字必须与它所在的类的名字完全相同,而且没有类型。允许在一个类中编写若干个构造方法,但必须保证它们的参数不同(参数个数,参数类型)。如果类中定义了一个或多个构造方法,那么java不提供默认的构造方法。
16. 创建对象包括对象的声明和为对象分配变量两个步骤。
17. 对象的声明一般格式为:
类的名字 对象名字;
18. 使用new运算符和类的构造方法为声明的对象分配变量,并返回一个引用值给对象名称,即创建对象。
19. 空对象不能使用,因为它没有得到任何的实体,必须再进行为对象分配变量的操作,即为对象分配实体。假如程序中使用了空对象,在运行时会出现异常NullPointException。
20. new运算符只能和类的构造方法进行运算,运算的最后结果是一个十六进制的数,这个数称作对象的引用。
21. 抽象的目的是产生类,而类的目的是创建具有属性和行为的对象。
22. 对象调用自己的变量(体现对象属性),一般格式为:对象.变量; 对象调用类中的方法格式为:对象.方法;
23. 类中的方法可以操作成员变量,当对象调用方法时,方法中出现的成员变量就是指分配给该对象的变量。
24. 一个类声明的两个对象如果具有相同的引用,二者就具有完全相同的变量(实体),而且java有所谓的“垃圾收集”机制,这种机制周期地检测某个实体是否已不再被任何对象所拥有,就释放实体占有的内存。如果希望java虚拟机立刻进行“垃圾收集”操作,可以让System类调用gc()方法。
25. 在java语言中没有析构方法。
26. Java应用程序有个主类,即含有main方法的类,java应用程序从主类的main方法开始执行。
27. 如果需要编译某个目录下的全部java源文件,可以进入该目录,使用通配符*代表各个源文件的名字来编译全部的源文件。如:C:\chapter4>javac*.java
28. 参数属于局部变量,当对象调用方法时,参数被分配内存空间,并要求调用者向参数传递值,即方法被调用时,参数变量必须有具体的值。
29. 在java中,方法的所有参数都是“传值”的,也就是说,方法中参数变量的值是调用者指定的值的拷贝。因此,方法如果改变参数的值,不会影响向参数“传值”的变量的值,反之亦然。
30. 对于基本数据类型的参数,向该参数传递的值的级别不可以高于该参数的级别。
31. 当参数是引用类型时,“传值”传递的是变量中存放的“引用”,而不是变量所引用的实体。对于两个相同类型的引用型变量,如果具有同样的引用,就会用同样的实体,因此,如果改变参数变量所引用的实体,就会导致原变量的实体发生同样的变化;但是,改变参数中存放的“引用”不会影响向其传值的变量中存放的“引用”,反之亦然。
32. 可变参数是指在声明方法时不给出参数列表中从某项开始直到最后一项的名字和个数,但这些参数的类型必须相同。可变参数使用“…”表示若干个参数,这些参数的类型必须相同,并且最后一个参数必须是方法的参数列表中的最后一个参数。x.length等于x所代表的参数的个数。
33. 在声明成员变量时,用关键字static给予修饰的称作类变量,否则称作实例变量(类变量也称作static变量,静态变量);static需放在变量的类型的前面。
34. 实例变量和类变量的区别:(1)不同对象的实例变量互不相同;(2)所以对象共享类变量;(3)类变量不仅可以通过某个对象访问,也可以直接通过类名访问。
35. 类中的方法也可分为实例方法和类方法。加static关键字修饰的是类方法(静态方法),static需放在方法的类型的前面。
36. 实例方法和类方法的区别:(1)对象调用实例方法。当我们创建第一个对象时,类中的实例方法才分配了入口地址,当再创建对象时,不再分配入口地址,也就是说,方法的入口地址被所有的对象共享,当所以的对象都不存在时,方法的入口地址才会被取消。实例方法不仅可以操作实例变量,也可以操作类变量。但不能通过类名调用,只能由对象调用。(2)类名调用类方法。在该类被加载到内存时,就分配了相应的入口地址。类方法的入口地址直到程序退出才被取消。类方法不可以操作实例变量。(3)对于static方法,不必创建对象就可以用类名直接调用它。
37. Java中存在两种多态:重载和重写,重写是与继承有关的多态。对象的行为通过类中的方法来体现,那么行为的多态性就是方法的重载。
38. 方法重载:一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同(参数个数不同或参数列表中对应的某个参数的类型不同)。方法的返回类型和参数的名字不参与比较。
39. this是java的关键字,表示某个对象。this可以出现在实例方法和构造方法中,但不可以出现在类方法中。
40. this关键字出现在类的构造方法中,代表使用该构造方法所创建的对像;this关键字出现在实例方法中,代表正在调用该方法的当前对象,格式为:this.成员变量;当static成员变量在实例方法中出现时,默认的格式是:类名.成员变量;在通常情况下,可以省略实例成员变量名字前面的“this.”以及static变量前面的“类名.”。
41. 类的实例方法可以调用类的其他方法,对于实例方法调用的默认格式是:this.方法;对于类方法调用的默认格式是:类名.方法;当逻辑关系明确时,一个实例方法调用另外一个方法时可以省略方法前面的“this.”和“类名.”
42. 包是java语言有效地管理类的一个机制。通过关键字package声明包语句,格式为:package包名;如果源程序中省略了package语句,源文件中所定义命名的类被隐含地默认为是无名包的一部分,只要这些类的字节码被存放在相同的目录中,那么它们就属于同一个包,但没有包名。包名可以是一个合法的标识符,也可以是若干个标识符加“.”分割而成。
43. 如果一个类有包名,那么就不能在任意位置存放它,否则虚拟机将无法加载这样的类。如:packagetom.jiafei;那么储存文件的目录结构中必须包含如下结构:…\tom\jiafei,而且主类的字节码一定放在此目录中。运行时,必须写主类的全名,即“包名.主类名”。
44. 如果用户需要类库中的类,就必须使用import语句。使用import语句可以引入包中的类和接口。在一个java源程序可以有多个import语句,他们必须写在package语句和源文件中类的定义之间。
45. Java提供了130多个包,如:
java.lang:包含所有的基本语言类(系统自动引用);
javax.swing:包含抽象窗口工具集中的图形,文本;
java.io:包含所有的输入/输出类
java.util:包含使用类;
java.sql:包含操作数据库的类;
java.net:包含所有实现网络功能的类;
如果要引用一个包中的全部类,则可以用通配符(*)来替代,如:importjava.util.*;
如果不用import语句引入包中的类,也可以直接带着包名使用该类,如:java.util.Date date=new java.util.Date( );
46. 都是无包名而且在同一个文件夹下的类就可以互相使用,无包名类也可以使用import语句来使用有包名的类,但是有包名的类无论如何也无法使用无包名的类。
47. 访问限制修饰符有private,protected和public。类方法总是可以操作该类中的类变量,与访问限制符没有关系。
48. 用private修饰的成员变量和方法称为私有变量和私有方法。如果Tom类中的某个成员是私有类变量(静态成员变量),那么在另外一个类中,也不能通过Tom类名来操作这个私有类变量。如果Tom类中的某个方法是私有的类方法,那么在另外一个类中,也不能通过Tom类名来调用这个私有的类方法。
49. 用public修饰的成员变量和方法被称为共有变量和共有方法。如果Tom类中的某个成员是public类变量,那么在另外一个类中,也可以通过类名Tom来操作Tom的这个类成员变量。
50. 不用private,public,protected修饰符修饰的成员变量和方法被称为友好变量和友好方法。如果一个类与Tom类在同一个包中,那么该对象能访问自己的友好变量和友好方法。如果源文件使用import语句引入了另外一个包中的类,并用该类创建了一个对象,那么该类的这个对象将不能访问自己的友好变量和友好方法。
51. 用protected修饰的成员变量和方法被称作受保护的成员变量和受保护的方法。任何一个与Tom在同一包中的类,也可以通过Tom类的类名访问Tom类的protected类变量和protected类方法。
52. 类声明时,如:public class A{}这样的类是一个public类,可以在任何另外一个类中使用public类创建对象。如果一个类不加public修饰,这样的类被称作友好类,那么另外一个类中使用友好类创建对象时,要保证他们是子啊同一个包里。
53. 不能用private和protected修饰类。
54. 访问限制修饰符按访问权限从高到低的排列顺序是public,protected,友好的,private。
55. Java提供了与基本数据类型相关的类,实现了对基本数据类型的封装。这些类在java.lang包中,分别是Byte,Integer,Short,Long,Float,Double和Character。
56. Double类和Float类实现了对double和float基本数据类型的类包装。构造方法Double(doublenum),Double对象调用doubleValue()方法可以返回该对象含有的double型数据;其他类型Float,Byte,Short,Integer,Long与double型一样。
57. 可以使用Character类的构造方法Character(char c)创建一个Charater类型的对象。Character对象调用cahrValue()方法可以返回该对象含有的char型数据。
58. 如果一个类中有多个对象,则使用对象数组,即数组的元素是对象。如:
Student [] stu;
Stu =new Student[10];
还要创建数组所包含的对象,如:stu[i]=new Student;
59. java运行环境提供了扩展(\jre\lib\ext),只要将类打包为jar格式文件,放入扩展中,程序就可以使用import语句使用扩展中的类了。
60. 使用jdk提供的javadoc.exe可以制作源文件类结构的html格式文档。
推荐阅读
-
[重温云本地] 第 4 章 云网络 第 4.3.7.6 节 - MP-BGP 协议
-
[重温云原生] 第 4 章 云网络 第 4.3.7.4 节 - BGP 协议高级功能
-
心理学与生活》第 4 章:感知与记忆
-
60岁拿2000元创业,靠 "神 "做生意,如今年赚24亿--如今的天堂伞集团,无论是口碑还是销量,都是业内首屈一指的 "大牛"。王斌章的一把伞,仅去年的销售额就实现了近6亿元的好成绩。雨伞销售更是占据了中国所有雨伞行业的最大份额。可以说,如今的天堂伞,无论是质量还是口碑,都堪称行业翘楚。 一把天堂伞,如何在王斌章手中打出新高度,玩出大生意?总结起来,两点制胜法宝:一是质量绝对保证,二是服务有保障。这看似很简单,但几十年来不折不扣地执行,特别是在保护伞这个不太重要的对象上,想要做到始终如一,难度很大。这也是为什么中国只有一个王斌章被称为 "全球伞王 "的原因。 天堂伞成立之初,销售场地选在附近的一个广场,以摆摊的形式销售王斌章亲手制作的杭州伞。凭借几十年的手艺和严谨的态度,加上上乘的伞料,即使价格比普通伞高3倍5倍,也打开了市场,积累了第一批人气和资金。
-
实践中的软件测试技术:设计、工具和管理 - 第 2 章第 2.3 节 使用状态转换图设计测试用例
-
STM32H7 教程] 第 14 章 STM32H7 的电源、复位和时钟系统
-
STM32F429 开发板用户手册] 第 14 章 STM32F429 的电源、复位和时钟系统
-
20170714 第 4 章 三大秘技(上) 内部分享
-
STM32H7 教程] 第 14 章 STM32H7 的电源、复位和时钟系统
-
第 18 章 STM32MP1 M4 裸机 HAL 库开发指南中的系统时钟配置实验