20165205 2017-2018-2 《Java程序设计》第三周学习总结
教材学习内容总结
- 学习类的概念(类体,成员变量,方法)
- 学会构造方法(默认和自定义构造方法)
- 学会创建、使用对象(注意对象引用和实体)
- 学会同目录下的文件源文件一起使用的方法(同时编译)
- 学会参数传值
- 学会对象的组合与复用
- 学会区别实例变量和类便利
- 了解方法重载(注意不要出现歧义)
- 学会使用this关键字
- 学会使用包
- 学会import的用法(帮助包的使用)
- 了解访问权限
-
了解类封装,对象数组,JRE扩展与jar文件,文档生成器
学习重点
- 关键词:
-
class
:定义类 -
new
:新建一个对象(实例)
-
- 只要有一个类定义,编译程序就会产生一个.class文档。
- 标准类的使用:java.util.Scanner`:在“命令提示符”模式下取得用户输入
-
使用
new
关键词指定长度建立数组教材学习中的问题和解决过程
- 问题1:在刚学这一章的时候我完全搞不清楚(分不清)类,方法,对象的概念,之后我在知乎中找到一个我认为比较清楚的讲解,我把他的内容总结了一下:
- 问题1解决方法:
- 类=一个种类(class)的东西
- 对象=属于该种类(类)的一个对象/物品
- 方法=对这个种类的东西都可以进行操作
-
比如:我有一辆汽车
public class car{...}
我把汽车命名为‘gu’
car myCar = new car("gu")
所有的汽车都可以加速(accelerate)和刹车(brake)
public class car
{
void accelerate() {...}
void brake(){...}
}
我可以指定我的汽车加速
myCar.accelearte();
我的朋友也有一辆汽车,也可以加速
car pCar = new car("p");
pCar.accelerate();
- 问题2:关于实例变量和类变量,实例方法和类方法的区别,我在一开始学的时候感觉似懂非懂,我还是借助了百度,学了一下,做了一点总结(大部分来自原文)。
- 问题2解决方法:
- 实例变量(无static):
1.实例变量声明在一个类中,但在方法、构造方法和语句块之外;
2.当一个对象被实例化之后,每个实例变量的值就跟着确定;
3.实例变量在对象创建的时候创建,在对象被销毁的时候销毁;
4.实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方法获取实例变量信息;
5.实例变量具有默认值。数据型变量的默认值是0,布尔型变量的默认值是false,引用类型的默认值是null私有。。变量的值可以在声明时指定,也可以在构造方法中指定;
6.实例变量对于类中方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;
7.实例变量可以直接通过变量名访问。但在静态方法以及其他类中,九应该使用完全限定名:
ObejectReference.VariableName
。
- 类变量(静态变量)
1.类变量在类中以static关键词声明,但必须在方法、构造方法和语句块之外。
2.无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。(我对这句话的理解是类变量只占一个内存,并且共享)。
3.静态变量除了被声明为常量外很少使用。常量是指声明为public、final和static类型的变量。常量初始化后不可改变。
4.静态变量储存在静态储存区。经常被声明为常量,很少单独使用static申明变量。
5.静态变量在程序开始时创建,在程序结束时销毁。
6.与实例变量具有相似的可见性。
- 实例方法与类方法对实例变量和类变量的访问
实例方法可以对当前对象的实例变量进行操作,也可以对类方法进行操作。实例方法由实例对象调用。
类方法不能访问实例变量,只能访问类变量。类方法由类名或者实例对象调用。类方法不能出现this或者super关键字。
- 问题3:普通方法和构造方法的区别是什么?
-
问题3解决办法:
与一般方法相比,构造方法的特点是:
1.构造方法的名称总和它的类名一致。2.构造函数没有返回值,即不可以为它指定任何类型的返回值。(学到这里我明白了为什么我之前改了对象名称没有改构造方法时报错:没有返回类型)。
3.在构造函数的第一条语句中,可以调用同类的另一个构造函数或者父类的构造函数。
4.构造函数不能由编程人员显示地直接调用。
5.构造函数的主要作用是完成对类对象的初始化。
- 问题4:java语言类库中的包是如何使用的?
-
问题4解决办法:首先我在书中学到类库中的包需要用import作为接口来使用,,然后书上介绍了六种包,我通过百度完善了一下,也解决了我上一篇博客中的一些问题。
- java.lang包。
该包提供了Java语言进行程序设计的基础类,它是默认导入的包。该包里面的Runnable接口和Object、Math、String、StringBuffer、System、Thread以及Throwable类需要重点掌握,因为它们应用很广。
2.java.util包
该包提供了包含集合框架、遗留的集合类、事件模型、日期和时间实施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。3.java.io包。
该包通过文件系统、数据流和序列化提供系统的输入与输出。4.java.NET包
该包提供实现网络应用与开发的类。5.java.swing包
这两个包提供了GUI设计与开发的类。java.awt包提供了创建界面和绘制图形图像的所有类,而javax.swing包提供了一组“轻量级”的组件,尽量让这些组件在所有平台上的工作方式相同。 - java.lang包。
说实话这些我是没有看懂的,只是知道了有这些包,然后在课本代码中见过java.util的包,剩下的在学习他们的时候再学吧。
代码调试中的问题和解决过程
- 问题1: 如图,在bin文件夹外无法运行程序。
- 问题1解决方法:进入bin文件夹后可以运行
-
但是,我总觉得在根目录里是可以运行的,于是我在询问之下找到了解决办法java -cp .: ch4.hello.nihao.p91
,如下图,这样是可以运行成功的。
问题2:关于多个类相互调用(使用)的问题:需要同时编译
javac *.java
的文件,当这些文件放在大文件夹之下无法编译成功,会显示无法找到类,同时无关程序也出现报错。(无截图)问题2解决方案:
方法一:把需要相互使用的java文件放在新建文件夹之下,然后javac *.java
时,可以成功。
方法二:将需要同时编译的文件名加前缀,我在命名文件时以代码页数命名,如p90_1.java
,p90_2.java
,所以我在编译时需要输入javac p9*.java
就可以在src/ch4里编译成功。当然,按照老师说的,类名要有意义,我这样的方法是不好的。但是,可以在原类名(有意义)前加a(或其他字母)这样就可以类名既有意义,又方便编译。
[代码托管](https://gitee.com/BESTI-IS-JAVA-2018/20165205l)
总结
本周的学习内容的难度明显增加了,前三章学习的时候还可以说与c语言类似,但第四章开始,完全是java的知识,包括初次学习面向对象,方法,类等知识都比较抽象,在听网课的时候老师画图解释的方法我是很受用了。边敲代码边学习也是一种很好的方法。但是还是有很大一部分内容搞不懂,有许多刚接触的东西,不能掌握,我只好借助百度来学习。好在这周在上传代码方面已经没有了问题可以顺利进行了。
还有一个我刚发现的问题是我在统计代码时每git push一次,code summary information就会减少,暂时不知道是 什么原因。