Java基础知识笔记总结资料.pdf

上传人:白大夫 文档编号:5402727 上传时间:2020-05-01 格式:PDF 页数:250 大小:3.04MB
返回 下载 相关 举报
Java基础知识笔记总结资料.pdf_第1页
第1页 / 共250页
Java基础知识笔记总结资料.pdf_第2页
第2页 / 共250页
Java基础知识笔记总结资料.pdf_第3页
第3页 / 共250页
Java基础知识笔记总结资料.pdf_第4页
第4页 / 共250页
Java基础知识笔记总结资料.pdf_第5页
第5页 / 共250页
点击查看更多>>
资源描述

《Java基础知识笔记总结资料.pdf》由会员分享,可在线阅读,更多相关《Java基础知识笔记总结资料.pdf(250页珍藏版)》请在三一文库上搜索。

1、Java 知识精华总结 一、 java 概述与基础知识 6 二、方法与数组. 19 三、面向对象(1).28 四、面向对象(2). 39 五、异常处理和常用类. 59 六、线程技术.77 七、集合框架(1).93 八、集合框架(2)110 九、 IO 操作( 1).123 十、 IO 文件操作( 2)135 十一、网络编程.146 十二、反射机制.162 十三、 GUI 界面 .181 十四、 Java 高新技术( 1)197 十五、 Java 高新技术( 2) 205 十六、 Java 高新技术( 3)215 十七、面试题之交通灯管理系统. 233 十八、面试题之银行业务系统241 一、 j

2、ava 概述与基础知识 . 6 1、何为编程?. 6 2、 Java语言概述,历史、特点. 6 3、什么是跨平台性?原理是什么?JVM . 6 4、 Jre 和 Jdk 的区别 ? 7 5、 java 虚拟机 JVM 7 6、 Java 程序运行机制 . 7 7、 学习 java 注意的地方 8 8、 Java语法格式 . 8 9、代码注释:单行/,多行 /* */ ,文档注释 /* */ 8 10、Java 中的标识符 . 8 11、java 中的常量和变量 . 9 12、Java 成员变量和局部变量. 9 14、基本数据类型转换之向上转型和向下转换. 11 15、Java 的运算符 . 1

3、2 16、表达式和三目运算符. 12 17、程序流程控制. 13 18、三大循环结构: 15 19、嵌套循环与流程控制. 17 二、方法与数组. 19 1、什么是方法(Method)? 19 2、 Java 中方法的格式:. 19 3、方法里的属性. 20 4、方法特点 . 20 5、什么是方法的重载(Overload)? 21 6、 可变参数 . 22 7、数组简介:. 22 8、一维数组的声明与初始化:. 23 9、数组的使用:. 24 10、分配内存空间. 25 11、二维数组:. 26 12、操作数组的工具类-Arrays . 27 13、Java5新特性对数组的支持:. 28 三、面

4、向对象(1) . 28 1、什么叫面向对象?. 28 2、类 . 29 3、构造方法 . 30 4、 static 关键字 . 31 5、匿名对象 . 32 6、 this 关键字 32 7、面向对象之封装. 32 8、访问修饰符. 33 9、类的设计分析. 34 10、面向对象之继承. 34 11、子类访问父类和方法覆写. 35 12、super 关键字和调用父类构造方法 . 36 13、面向对象之多态. 37 14、引用变量类型转换. 38 四、面向对象(2) . 39 1、基本数据类型的包装类. 39 2、基本数据类型和包装类相互转换. 40 3、基本类型和String 之间的转换 .

5、41 4、 Object 类 . 41 5、代码块 . 42 6、构造方法的私有化. 43 7、 Singleton 模式 (单例模式 ) 饿汉式和懒汉式 44 8、 final 关键字 . 46 9、抽象类 . 46 10、抽象类的体现-模板模式 . 48 11、接口 (interface) 50 12、接口的使用. 51 13、面向接口编程之制定标准和简单工厂模式. 52 14、面向接口编程之适配器模式. 54 15、 接口和抽象类的比较. 55 16、匿名内部类. 56 17、枚举类 . 56 五、异常处理和常用类. 59 1、异常 . 59 2、异常处理格式. 60 3、多异常处理.

6、60 4、异常的分类. 61 5、声明异常(throws) 62 6、 throw . 62 8、 throw 和 catch 同时使用 64 9、常用类 . 64 10、String 方法 66 11、StringBuffer 与 StringBuilder . 68 12、Math 和 Random 和 UUID . 71 13、Date 和 Calendar . 73 14、System . 76 六、线程技术. 77 1、进程和线程. 77 2、创建线程方式. 78 3、两种进程创建方式比较. 79 4、线程的生命周期. 81 5、控制线程 . 82 6、多线程安全问题. 84 7、多

7、线程安全问题的解决方法. 85 8、线程通信 . 89 七、集合框架(1) . 93 1、集合类 它是运行所有Java程序的抽象计算机,是 Java语言的运行环境,它是Java 最具吸引力的特 性之一, JVM 读取并处理编译过的与平台无关的字节码(class)文件。 Java 编译器针对JVM 产生 class文件,因此是独立于平台的。 Java 解释器负责将JVM 的代码在特定的平台上运行。 Java 虚拟机是不跨平台的. 6、Java 程序运行机制 编译 : javac 文件名 .文件后缀名 运行 : java 类名 我的总结: Java 程序的组成:Java 源文件,字节码文件。 7、

8、学习 java 注意的地方 Java 语言拼写上 严格区分大小写; 一个 Java源文件里可以定义多个Java类, 但其中最多只能有一个类被定义成public 类; 若源文件中包括了public 类,源文件必须和该public 类同名; 一个源文件中包含N 个 Java 类时,编译后会生成N 份字节码文件,即每个类都会生成一份 单独的 class文件,且字节码文件名和 其对应的类名相同; 我的总结:一个Java 源文件只定义一个类,不同的类使用不同的源文件定义; 将每个源文件中单独定义的类都定义成public 的 ; 保持 Java 源文件的主文件名与源文件中的类名一致; 8、Java 语法格

9、式 任何一种语言都有自己的语法规则,Java也一样 ,既然是规则 ,那么知道其如何使用就可以了。 代码都定义在类中,类由 class 来定义,区分public class 和class; 代码严格区分大小写,如 main 和 Main 是不一样的 ; Java 中的标识符与关键字; 注释 ; main 方法的作用: 程序的入口 保证程序的独立运行 被 JVM 调用 9、代码注释:单行 /,多行 /* */ ,文档注释 /* */ 1.单行注释/: /后到本行结束的所有字符会被编译器忽略; 2.多行注释/* */: /* */之间的所有字符会被编译器忽略 3.文档注释/* */: 在/* */之

10、间的所有字符会被编译器忽略,java 特有的 (用于生成文档 ); 我的总结:多行和文档注释都不能嵌套使用。 10、Java 中的标识符 可简单理解为在Java 程序中为了增强阅读性自定义的名称。比如:类名,方法名,变量名 等。 命名规则: (1) 由字母、数字、下划线、$组成,不能以数字开头 注意 :此处的字母还可以是中文,日文等 ; (2) 大小写敏感 (3) 不得使用java 中的关键字和保留字 (4) 别用 Java API 里面的类名作为自己的类名。 11、java 中的常量和变量 变量的概念: 占据着内存中的某一个存储区域; 该区域有自己的名称(变量名)和类型(数据类型); 该区域

11、的数据可以在同一类型范围内不断变化; 为什么要定义变量: 用来不断的存放同一类型的常量,并可以重复使用; 使用变量注意: 变量的作用范围, 初始化值 定义变量的格式: 数据类型变量名= 初始化值; 注:格式是固定的,记住格式,以不变应万变。 作用范围:定义开始到定义它的代码块结束; 同一范围内,不允许多个个局部变量命名冲突 12、Java 成员变量和局部变量 局部变量:不是声明在类体括号里面的变量; 局部变量使用前必须初始化值; 局部变量没有默认初始化值; 局部变量的作用域是从定义开始到定义它的代码块结束; 成员变量 :在方法体外 ,类体内声明的变量,又称字段 (Field) 或全局变量;(其

12、实 Java中没有全 局变量,由于Java 是面向对象语言,所有变量都是类成员) 成员变量的作用域是整个类中; 我的总结:注意成员变量和局部变量的区别 package reviewDemo; public class Demo2 public static void main(String args) int i; System.out.println(i); 备注:局部变量调用前没有初始化,所以编译的时候就会报错! package reviewDemo; public class Demo2 static int i; public static void main(String args)

13、 System.out.println(i); 备注:此时i 为全局变量,未初始化会被赋予默认的初始化值!程序正确! 我的总结: 局部变量是定义在方法中的变量,出了该方法就不能访问该变量了 成员变量是在类中定义,并且在类的成员方法中都能访问的变量 13、基本数据类型 在数据类型中, 最常用也是最基础的数据类型,被称作基本数据类型。可以使用这些类型的 值来代表一些简单的状态。 Java 语言的基本数据类型总共有以下8 种,下面是按照用途划分出的4 个类别: 定点类型: 整数型是一类代表整数值的类型。当需要代表一个整数的值时,可以根据需要从4 种类型 中挑选合适的,如果没有特殊要求的话,一般选择i

14、nt 类型。 4 种整数型区别主要在每个数 据在内存中占用的空间大小和代表的数值的范围。 浮点类型: 小数型是一类代表小数值的类型。当需要代表一个小数的值时,可以根据需要从以下2 种 类型中挑选合适的。如果没有特殊要求,一般选择double 类型。 由于小数的存储方式和整数不同,所以小数都有一定的精度,所以在计算机中运算时不够精 确。根据精度和存储区间的不同,设计了两种小数类型。 字符型: 字符型代表特定的某个字符,按照前面介绍的知识,计算机中都是以字符集的形式来保存字 符的, 所以字符型的值实际只是字符集中的编号,而不是实际代表的字符,由计算机完成从 编号转换成对应字符的工作。Java 语言

15、中为了更加方便国际化,使用Unicode 字符集作为 默认的字符集, 该字符集包含各种语言中常见的字符。在程序代码中, 字符使用一对单引号 加上需要表达的字符来标识,例 如 A 、 a等,当然也可以直接使用字符编码,也就是一个非负整数进行表示。 布尔型: 布尔型代表逻辑中的成立和不成立。Java 语言中使用关键字true 代表成立, false 代表不成 立。布尔型是存储逻辑值的类型,其实很多程序中都有逻辑值的概念,Java 把逻辑的值用 布尔型来进行表达。 14、基本数据类型转换之向上转型和向下转换 向上转换: 整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则: 容量小的类

16、型可自动转换 为容量大的数据类型; byte,short,char int long float double byte,short,char 之间不会相互转换,他们在计算时首先会转换为int 类型。 boolean 类型是不可以转换为其他基本数据类型。 Eg: int i = 123; long l = i; /自动转换,不需强转 float f = 3.14F; double d = f; 向下转换: 整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则: 容量小的类型可自动转换为容量大的数据类型; byte,short,char int long float double

17、byte,short,char 之间不会相互转换,他们在计算时首先会转换为int 类型。 boolean 类型是不可以转换为其他基本数据类型。 Eg: long l = 123L; int i = (int) l;/ 必须强转 double d = 3.14; float f = (float) d; 我的总结:类型转化 小转大,自动!自动类型转换(也叫隐式类型转换) 大转小,强转!强制类型转换(也叫显式类型转换) 15、Java 的运算符 运算符是一种特殊符号,用以表示数据的运算、赋值和比较等共分以下几种: 算术运算符( + 、* 、/ 、%) 赋值运算符( = 、 +=、-=、*= 、/=

18、,、%=) 关系运算符( 、=、) 我的总结: 逻辑运算符用于连接布尔型表达式,在Java 中不可以写成33 else if (i 4) System.out.println(“ 变量 i 小于 4“); else System.out.println(“ 其他 “); switch 控制语句 格式: switch( 表达式 ) case 表达式可能的结果值1: 执行语句; break; case 表达式可能的结果值2: 执行语句; break; . default: 执行语句; break;/最后这个一般不写 备注: case之间与 default 没有顺序。先执行第一个case,都没有匹配

19、的case值执行 default。 结束 switch 语句的两种情况:遇到break,switch 语句执行结束。 如果匹配的case 或者 default 没有对应的break,那么程序会从第一次匹配的case语句开始 继续向下执行,运行可以执行的语句,直到遇到break或者 switch 结束为止。 class switch2 public static void main(String args) int a = 7,b = 5; switch(a-b) case 3:/表达式可能的值; System.out.println(“33!“); break; case 4: System.

20、out.println(“44!“); break; default:/都没有执行则执行该语句 ! System.out.println(“ 其它的 “); 18、三大循环结构 : 用于处理需要重复执行的操作; 根据判断条件的成立与否,决定程序段落的执行次数,而这个程序段落我们称为循环体; while: 事先不需要知道循环执行多少次; do while: 同上,只是至少要执行一次(先做,后判断); for: 需要知道循环次数; 循环结构 (while 我的总结: do while 特点是无论条件是否满足,循环体至少被执行一次。 循环里的条件表达式不能直接写false 或直接写结果是false

21、的表达式 ,不过可以使用变量来 传递 false 值 ; 循环结构 (for) 格式: for(初始化表达式(1) ;循环条件表达式(2) ;循环后的操作表达式(3)) 执行语句;(4) 执行顺序: (1) (2) (4) (3) (2) (4) (3) 备注: 1, for 里面的 3 个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真就执行 循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复找个过程,直到条 件不满足为止。 2, while 与 for 可以互换,区别在于for 为了循环而定义的变量在for 循环结束就在内存中释 放。而 while 循环使用的变量在

22、循环结束后还可以继续使用。 3, 最简单无限循环格式:while(true) , for(;), 无限循环存在的原因是并不知道循环多少次, 而是根据某些条件,来控制循环。 Eg: 用三种循环控制求出100 以内前 5 个 3 的倍数的数字; class while public static void main(String args) int i = 1,k = 0; while(i agej) int temp = agei; agei = agej; agej = temp; System.out .println(Arrays.toString(age); /输出为: 1, 2, 12

23、, 32, 36, 56, 95, 363, 1232, 3263 10、分配内存空间 分配内存空间 数组名 =new 数据类型 数组长度 ; new 关键字用来实现为数组或对象分配内存 数组具有固定的长度。获取数组的长度:数组名 .length 定义数组 +分配内存空间 数据类型 数组名 =new 数据类型 数组长度 ; 定义数组时不指定长度,分配空间时指定数组长度;如:String cities = new String6; 数组元素: 数组名 下标值 ; 数组下标从0 开始scores0=75; 数组的内存分配栈内存和堆内存 如定义一个数组intscores 将在栈内存中为scores

24、分配内存空间, 其值是一个不确定的值。 当执行语句scores=new int5 时,将在堆内存分配连续5个空间,每个空间4 个字节,用于 存放整型数据,其初始值为0,然后将该段空间首地址,也就是第一个元素的地址,比如 0*3000 ,赋给 scores 变量。该地址相当于一个指针,指向堆内存中分配的空间。此时堆内存 中分配的5 个空间可以分别使用scores0,一直到 scores4来表示。当执行四个赋值语句时, 分别用指定值填充到对应元素位置。如果此时将null 值赋给 scores 时,scores变量将不再指 向任何位置,此时堆内存中分配的空间就变成了垃圾,由垃圾回收器在某一时间进行回

25、收。 在方法中定义的变量,包括基本数据类型变量和引用数据类型变量,都将在栈内存中分配空 间,当超过变量作用范围后,自动回收 我的总结:初始化=定义数组 +分配空间 +赋值 11、二维数组: 二维数组: (其实是一个一维数组,它的每一个元素又是一个一维数组), 可以看做是一张表格。 初始化: 动态初始化 int arr = new int32; 定义了一个二维数组,其中有3 个一维数组,每一个一维数组中有2 个元素 静态初始化 int arr = new int1,2,3,4,5,6; int arr = 1,2,3,4,5,6; Eg: publicclass Demo3 publicstat

26、icvoid main(String args) int age = newint1,2,3,4,5,6,7; System.out .println(age0.length);/2 System.out .println(age2.length);/3 12、操作数组的工具类 -Arrays static int binarySearch(type a, type key) 使用二分搜索法来搜索key 元素在数组中的索引; 若 a 数组不包括key,返回负数。 (该方法必须已按升序排列后调用)。 static int binarySearch(type a, int fromIndex, i

27、nt toIndex, type key) 使用二分搜索法来搜索 key 元素在数组中从fromIndex 到 toIndex 的索引;若a 数组不包括key,返回负数。(该方 法必须已按升序排列后调用)。 static boolean copyOf(type original, int newLength) 复制指定的数组见下面备注 static byte copyOfRange(type original, int from, int to) 将数组的指定范围复制到一个新数 组。 static boolean equals(type a, type a2) 如果两个数组长度相等和元素一一相

28、等,则返回true static void fill(type a, type val) 将 a 数组所有元素都赋为val。 static void fill(type a, int fromIndex, int toIndex, type val) 将 a数组从 formIndex 到 tiondex 索 引之间的元素都赋为val。 static void sort(type a) /sort(int arr)对指定的数组按数字升序进行排序。 static void sort(type a, int fromIndex, int toIndex) 对指定数组的从formIndex 到 tio

29、ndex 索引 之间的元素按数字升序进行排序。 static String toString(type a) 返回指定数组内容的字符串表示形式。多个数组元素之间用英 文逗号或空格隔开。 我的总结:使用数组工具类可以节省时间,提高效率,注意常查阅api; Eg: package reviewDemo; import java.util.Arrays; /使用 Arrays类 publicclass Demo4 publicstaticvoid main(String args) int age = newint 12, 26, 3, 60, 55, 6, 48, 4, 98 ; System.o

30、ut .println(Arrays.toString(age);/直接打印出数组的方 法 int age2 = 1,2,3,4,5,6,98,65,23; int i = Arrays.binarySearch(age2, 98); System.out .println(i); 13、Java5 新特性对数组的支持: 增强 for 循环 for-each for ( 参数类型参数名 : 数组名 ) 代码块 Eg: package reviewDemo; publicclass Demo6 publicstaticvoid main(String args) int age = 1,2,3,

31、69,36,636,459; for ( int i : age) System.out .println(i); 这样就用for-each 把数组遍历输出! 我的总结: for-each 用于数组和Iterable对象!在以后的集合学习中还会经常用到for-each 循环。 三、面向对象(1) 第三篇: 1、什么叫面向对象? 面向对象 (Object-Oriented ,简称 OO)就是一种常见的程序结构设计方法。 面向对象思想的基础是将相关的数据和方法放在一起,组合成一种新的复合数据类型,然后 使用新创建的复合数据类型作为项目的基础。 面向对象是一个很抽象的概念,它相对面向过程而言。 过程

32、与对象都是一种解决问题的思想。 面向过程:强调的是功能行为,一种过程 ,先干啥 ,再干啥 ; 面向对象:将功能封装到对象里,强调的是具备某功能的对象; 按照面向对象的思想,可以把任何的东西看做对象! 面向对象的三个特征: 封装 (Encapsulation); 继承 (Inheritance); 多态 (Polymorphism)。 我的总结: 面向过程:强调的是具体的功能实现;(执行者) 面向对象:强调的是具备功能的对象。(管理者) 2、类 类(class)是 Java 语言的最小编程单位,也是设计和实现Java 程序的基础,本部分将深入介 绍类的相关知识。 类的概念 类是一组事物共有特征和

33、功能的描述。类是对于一组事物的总体描述,是按照面向对象技术 进行设计时最小的单位,也是组成项目的最基本的模块。类的概念是抽象的,类似于建筑设 计中的图纸, 是对于现实需要代表的具体内容的抽象。类只包含框架结构,而不包含具体的 数据。所以类代表的是总体,而不代表某个特定的个体。 我的总结:类是抽象的,对象是具体的,实实在在的! 类的定义: 修饰符 class 类名 1n 个构造方法; 0n 个字段; 0n 个方法 定义类,其实就是定义类里面的对象 对象包含: 状态; (属性) 功能、行为; (方法) 通过类来描述对象; 状态 - 成员变量; 功能、行为方法; Eg: class Person /

34、 属性 private String name ; privateintage ; privateintsal ; / 方法 publicvoid show() System.out .println(“ 个人情况: “ +name+age +sal ); 3、构造方法 构造方法:用来构造类的实例(每一个类都默认有一个无参的构造方法,得使用new 调用) 字段:类或对象所包含的数据,对类状态的一种描述; 方法:类或对象的特征或行为 作用: 给类中的字段进行初始化,可以用来创建对象。 特点: 方法名与类名相同 不用定义返回值类型 不需要写return 语句 我的总结: 注意: 默认构造方法的特点

35、。 多个构造方法是以重载的形式存在的。 构造方法的重载:(需要哪个就去适配哪个,调用哪个) this(实参 );调用当前类的构造方法 注意 : this( 实参 ); 必须放在构造器的第一行; 对象的产生格式: 类名称对象名= new 类名称 (); 因为有 (),所以是方法 ,实际上它就是构造方法,并且是非私有的构造方法。 如: CellPhone cp = new CellPhone(); Eg: class Person private String name ; privateintage ; privateintsal ; publicvoid show() System.out .

36、println(“ 个人情况: “ +name+age +sal ); public Person(String name) super(); this. name = name; public Person(String name, int age) super(); this. name = name; this. age = age; public Person(String name, int age, int sal) super(); this. name = name; this. age = age; this. sal = sal; 4、static 关键字 特点: 随着类的

37、加载而加载 优先于对象存在 被所有对象所共享 可以直接被类名调用 使用注意: 静态方法只能访问静态成员 但是非静态成员可以访问静态成员; 静态方法中不可以使用this,super 关键字 主方法( main)是静态的(可以利用类名去调用静态的main 方法,很正常!但是会陷 入死循环,导致内存溢出,jvm 自动停止!) public static void main(String agrs) 可修饰字段 ,方法。 用 static 修饰的成员表示它属于这个类共有,而不是属于该类的单个实例。 static 修饰的字段= 类字段 static 修饰的方法= 类方法 没使用 static 修饰的字段

38、和方法,成员属于类的单个实例, 不属于类。 没有 static 修饰的字段= 实例字段 没有 static 修饰的方法= 实例方法 类和实例访问字段和方法的语法: 访问类成员:类.字段类 .方法 访问实例成员:实例 .字段实例 .方法 我的总结: static 修饰的字段和方法,既可以通过类调用,也可以使用实例调用; 没 static 修饰的字段和方法,只能使用实例来调用(建议使用:类名来调用 ; 其实在底层, 对象调用类成员,也会转换类名调用) static 关键字不能与this ,super 同时连用! 5、匿名对象 一个没有名字的对象, 创建了一个对象出来,没有赋给一个变量; 特点: 对

39、方法或字段只进行一次调用时; 可作为实际参数进行传递; 只在堆里面开辟存储区域, 只能使用一次, 使用完就被销毁了; 何时使用?只拿来用一次! new Person();表示匿名对象 , 没有名字的对象 new Person().age = 17;/使用一次之后就被销毁了 6、this 关键字 特点: this 表示当前对象。 当前对象当前正在调用实例成员的对象 换言之:谁调用了方法,谁就是当前对象。 什么时候使用this 关键字呢? 方法间的相互调用; this.字段 ; 构造器中相互调用,但是此时this( 参数 )必须写在构造方法第一行。 this 不能用在static 修饰的方法里和s

40、tatic 修饰的代码块里; Eg:构造方法中的this.name = name; 7、面向对象之封装 封装的两个含义: 1.把对象的状态和行为看成一个统一的整体,将二者存放在一个独立的模块中(类 ); 2.“信息隐藏 “, 把不需要让外界知道的信息隐藏起来,尽可能隐藏对象功能实现细节,字段 ; 封装机制在程序中的体现是:把描述对象的状态用字段表示,描述对象的行为用方法表示, 把字段和方法定义在一个类中,并保证外界不能任意更改其内部的字段值,也不允许任意 调动其内部的功能方法。 程 序 中 的 一 种 体 现 : 通 常 将 类 中 的 成 员 变 量 私 有 化 (private) , 通

41、过 对 外 提 供 方 法 (setXxx,getXxx ) ,可对该变量 (xxx) 进行访问。 boolean 类型的变量没有getXX, 只有isXX; Eg: class Person1 private String name ; privateintage ; privateintsal ; public String getName() returnname; publicvoid setName(String name) this. name = name; publicint getAge() returnage ; publicvoid setAge(int age) thi

42、s. age = age; 8、访问修饰符 private 类访问权限 :本类内部可以访问,不能继承到子类; default 什么都不写 ,包访问权限 :本类内部可以访问,同包其他类也可以访问,同包可继承 ; protected 子类访问权限:本类内部可以访问,不同包的子类也可以访问,同包其他类也可以 访问 ,能继承到子类; public 公共访问权限:任何地方都可以访问,能继承到子类 ; 我的总结: 9、类的设计分析 分析思路: 根据要求写出类所包含的字段; 所有的字段都必须私有化; 封装之后的字段可通过setter 和 getter 设值和取得; 按需求可添加若干构造方法; 根据需求可添加

43、相应的方法; 类中的所有方法都不要直接处理(输出打印 ),而是交给调用者去处理。 10、面向对象之继承 首先有反映一般事物特性的类,然后在此基础上反映出特殊事物的类; 也就是说: 继承是一种从一般到特殊的关系; 特点: 1、提高了代码的复用性。 2、让类与类之间产生关系,有了这个继承关系才有了多态的特性。 3、Java语言中只支持单继承(有别于C 语言) 。 因为多继承容易带来安全隐患(父类多了,功能相同的话, 就会出现调用不确定性吗, 覆写一个方法,到底覆写的谁的?)。 ps:接口可以实现多继承 4、Java支持多层继承,object 是每个类的超类,实现树形结构。 我的总结: 继承是多态的

44、前提。 对类而言,只支持单继承。 格式: 修饰符 class SubClass extends SuperClass 按照这种关系,我们把SuperClass 类称为父类或基类,把SubClass 称为子类或派生类或拓 展类; 我的总结: java.lang.Object是所有类的父类, Object 要么是直接父类要么是间接父类。 Eg: 学生属于人的一种特殊情况, 此时我把人的共性写在Person 类里面 , 为了让学生拥有这 些共性(别的比如老师也可以有这些共性), 然后我就让学生来拓展Person 类。 我的总结: 子类与父类的关系: 子类拓展父类(子类是父类的一种特殊情况) 主要是以

45、父类为基础,然后添加属于自己的字段和方法。 父类的私有成员子类不能继承到;父类的构造方法不能被继承; Java 只支持单继承,不支持多继承;/不然的话,比如show 方法,继承了多个,不知道到底 调用那一个。 一个类有且只有一个直接父类; 一个类没显示的继承其他的一个类的时候,默认的直接父类就是Object 类; Student 的直接父类是Person,Object 类也是 Student 类的父类 ,但是是间接父类; 一旦一个类显示的继承了其他的一个类的时候,此时默认的直接父类Object 就会被取消 ; Java 里一个类只能有一个直接父类;java.lang.Object 是所有类的父

46、类, Object 要么是直接父类 要么是间接父类。 子类对象实例化过程 在继承操作中,对于子类对象的实例化: 子类对象在实例化之前必须首先调用父类中的构造方法之后再调用自身的构造方法。 11、子类访问父类和方法覆写 子类不能直接访问父类的私有成员; 但是子类可以调用父类中的非私有方法来间接访问父类的私有成员。 Person 类中有私有字段name,Student继承 Person new Sudent().name; new Student().getName(); 子类拓展父类(子类是父类的一种特殊情况) 主要是以父类为基础,然后添加属于自己的字段和方法。 方法覆写产生原因: 当父类中某个

47、方法不适合于子类时,子类出现父类一模一样的方法. 判断必杀技 :子类方法前加上Override能编译通过 ,表明是方法的覆写。 调用被覆盖的父类方法:使用super.方法名 (实参 ); 方法覆写时应遵循的原则(一同两小一大): (一同 ):方法签名必须相同; (两小 ): 子类方法的返回值类型比父类方法的返回值类型更小或相等 子类方法声明抛出的异常应比父类方法申明抛出的异常更小或相等; (一大 ):子类方法的访问权限应比父类方法更大或相等; 子类需要覆写父类方法。 当父类的某个方法不适合于子类本身的特征行为时就当覆写父类中应当改变的方法。 12、super 关键字和调用父类构造方法 表示父类

48、对象的默认引用 如果子类要调用父类被覆盖的实例方法,可用 super作为调用者调用父类被覆盖的实例方法。 使用 super 调用父类方法 使用 super 调用父类的构造方法 调用构造方法 本类中调用另一个重载构造方法用this(参数列表 ) 子类构造方法调用父类构造方法用super(参数列表 ) 子类调用父类的构造方法时: super 必须放在第一句 Java 在执行子类的构造方法前会先调用父类无参的构造方法,其目的是为了对继承自父类的 成员做初始化操作。 子类在创建对象的时候,默认调用父类的无参构造方法,要是子类构造方法中显示指定调用 父类其他构造方法,就调用指定的父类构造方法,取消调用父类无参构造方法。 Eg: package reviewDemo; class A String name ; A() System.out .println(“ 父类默认隐式的构造方法!“ ); A(String name) System.out .println(“ 父类显式的构造方法!“ ); class B extends A B()

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1