《Java程序设计》第三周学习总结
目录
教材学习内容总结
第四章
4.1 编程语言的几个发展阶段
面向对象编程主要体现下列三个特性:
- 封装性
- 继承
- 多态
4.2 类
- 类的目的是抽象出一类事物共有的属性和行为,并用一定的语法格式来描述所抽象出的属性和行为。
- 类体的内容由下述两个部分组成
- 变量的声明:用来存储属性的值
- 方法的定义:方法可以对类中声明的变量进行操作
- 成员变量作用于整个类,其有效性与它在中的位置无关;局部变量只在方法中有效,而且从它声明的位置开始有效,有效范围是该复合语句。
- 如果局部变量的名字与成员变量的名字像同,则成员变量被隐藏。若要使用被隐藏的成员变量,使用this关键字。
- 局部变量没有默认值
- 所有对成员变量的操作必须放在方法中
4.3 构造方法与对象的创建
- 如果没有编写构造方法,系统会提供默认构造方法。
- 构造方法没有类型
4.4 类与程序的基本结构
- Java应用程序从主类的main方法开始执行
- 如果应用程序的主类的源文件和其他源文件在同一目录中,可以只编译主类的源文件,Java系统会自动地先编译主类需要的其他源文件。
4.5 参数传值
- 对于基本数据类型的参数,向该参数传递的值的级别不可以高于该参数的级别
- Java中,方法的所有参数都是“传值”的,也就是说,方法中参数的值是调用指定的值的拷贝。
- 当参数是应用类型是,“传值”传递的是变量中存放的引用,而不是变量所引用的实体。
- 可变参数类型必须相同且放在参数列表的最后。参数代表可以通过下标运算来表示参数列表中的具体参数。可变参数使用方法为
public void f(int ... x)
。可以使用for each语句操作可变参数。
4.6 对象的组合
- 如果A类中的成员变量是用B类声明的对象,那么A和B的关系是关联关系。
- 如果A类中某个方法的参数是用B类声明的对象或某个方法返回的数据类型是B类,那么A和B的关系是依赖关系。
4.7 实例成员与类成员
- 实例变量和类变量的区别
- 不同对象的实例变量互不相同
- 所有对象共享类变量
- 通过类名直接访问类变量
- 实例方法和类方法的区别
- 对象调用实例方法,实例方法可以操作实例变量和类变量
- 类名调用类方法,类方法不可以操作实例变量
- 设计类方法的原则
4.8 方法重载
- 方法重载:一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同。两个方法的参数不同是指满足下列之一:
- 参数的个数不同
- 参数的个数相同,但参数列表中对应的某个参数的类型不同
4.9 this关键字
- this不能出现在类方法中,这是因为类方法可以通过类名直接调用,这时,可能还没有任何对象诞生。
4.10 包
- package语句作为Java源文件的第一条语句,指明源文件定义的类所在的包,即为该源文件中声明的类指定包名
- 如果源程序省略了package语句,源文件中所定义命名的类被隐含地认为是无名包的的一部分,只是这些类的字节码被存放在相同的目录中,那么他们就属于同一个包。
- 如果主类的包名是tom.jiafei,那么主类的字节码一定存放在.../tom/jiafei目录中,那么必须到tom的父目录去运行主类,用如下格式来运行:
java tom.jiafei.主类名
4.11 import语句
-
常用包:
- java.lang: 包含所有的基本语言类
- javax.swing: 包含抽象窗口工具集中的图形、文本、窗口GUI类
- java.io: 包含所有的输入/输出类
- java.util: 包含实用类
- java.sql: 包含操作数据库的类
- java.net: 包含所有实现网络功能的类
-
如果不更新classpath值,可以把程序使用的自定义的包名所形成的目录都放在同一文件夹中。
4.12 访问权限
- 不能用protected和private修饰类
- 访问限制修饰符按访问权限从高到低的排列顺序是public、protected、友好的、private
4.13 基本类型的封装
详情见JDK文档中对Double、Float、Byte、Short、Integer、Long、Character类的描述
4.12 对象数组
Student [] stu;
stu = new Student[10]
上述代码仅仅定义了数组stu有10个元素,但这些对象目前都是空对象,因此在使用数组stu之前,应当创建数组所包含的对象。
4.13 JRE扩展与jar文件
- 只要将类打包为jar格式文件,放在扩展(/jre/lib/ext)中,程序就可以使用import语句使用扩展中的类了
- 步骤:首先编写清单文件xxx.mf,然后使用
jar cfm xxx.jar xxx.mf class文件路径
打包,最后把xxx.jar文件放在JDK安装目录的/jre/lib/ext文件夹中
4.16 文档生成器
javadoc xxx.java
杂项
- java.util.Arrays类可以调用
public static void sort(double a[])
把数组按升序排序,或者使用public static void sort(double a[], int start, int end)
对a中索引start~end-1的元素进行升序排序。 - java.util.Arrays类可以调用
public static int binarySearch(double a[],double number)
对有序数组进行二分法查找,如果找到,返回索引值,否则返回一个负数。 - java.lang.Character类包含以下方法:isDigit()判断一个字符是否是数字,isLetter()判断一个是字符是否是字母,isUpperCase()判断是否大写,isLowerCase()判断是否小写,toUpperCase()转为大写字母
教材学习中的问题和解决过程
- 问题1:使用package语句后,源文件目录结构分不清,在什么地方编译、运行?
-
问题1解决方案:经过试验,得出结论,如果主类中用到了别的类,那么编译的时候必须在所有要用到的类的父目录进行。在编译用到package语句的类时,使用-d,java会自动生成对应的目录存放class文件;class文件一定要放在package对应的目录下。
-
问题2:书上public、protected、友好的、private之间的区别讲的不清楚。
-
问题2解决方案:参考博客java中private,public,protected详解
代码调试中的问题和解决过程
-
问题1:通过共享文件夹从Windows移动到Linux的文件存在乱码,无法编译
-
问题1解决方案:使用enca工具准换编码,详情见解决Windows下文件在Linux下打开出现乱码的问题
代码托管
上周考试错题总结
无
其他(感悟、思考等,可选)
类是Java的核心,在程序的构造和思想上明显和面向过程编程不一样
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 32/32 | 3/3 | 20/20 | 掌握JDB用法 |
第二周 | 261/293 | 3/6 | 18/38 | 无 |
第三周 | 770/1063 | 2/8 | 10/48 | 类 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)