由于国庆假期冲掉了第四周的课程,所以本次是本学期的第五周学习总结
教材学习内容总结
本周的课程学习为类与对象
主要内容有类、构造方法与对象的创建、类与程序的基本结构、参数传值、对象的组合、实例成员与类成员、方法重载、this关键字、包、import语句、JRE扩展与jar文件。
讲到类就需要知道编程语言的几个发展阶段:面向机器语言→面向过程语言→面向对象语言。
Java就是面向对象语言,面向对象语言就必然会涉及到类,类是Java程序的基本要素;面向对象语言有三大特性:封装、继承、多态(到后续学习会详细解释三大特性的特点);
类的基本格式:
class 类名 {
类体的内容
}
类声明的变量就是对象;
类命名的编程风格:1、如果类名使用了拉丁字母,那么名字的首字母使用大写字母,如Hello、Time等;
2、类名最好容易识别、见名知意。当类名由几个单词复合而成时,每个单词的首字母大写,如ChinaMade等(驼峰习惯)
可以说类是一种用于创建具体实例(对象)的数据类型;
类体里含有成员变量的声明和方法的定义;声明变量部分所声明的变量又被称为成员变量或域变量;成员变量在整个类内都有效,与类体中书写的先后位置无关;
成员变量的编程风格:1、一行只声明一个变量; 2、变量的名字除了符合标识符规定外,名字的首单词的首字母使用小写,如果变量名字由多个单词组成,从第二个单词开始其他单词的首字母使用大写(驼峰习惯) ; 3、变量名字见名知意;
区分局部变量和成员变量:当成员变量的名字和局部变量的名字相同时,成员变量被隐藏,这时若要使用成员变量,需使用关键字this访问; 局部变量没有默认值。
有关this:1、如果this关键字出现在类的构造方法中,就代表使用该构造方法所创建的对象; 2、如果this关键字出现在实例方法中,this就代表正在调用该方法的当前对象; 注意:this不能出现在类方法(static)中,这是因为类方法可以通过类名直接调用,这时,可能还没有任何对象诞生。
方法的基本格式:
(构造参数没有返回值类型)返回值类型 方法名(参数(可有可无)){
方法体
return 返回值
}
在一个类中,如果出现 int b; b = 12; 是非法的,这是赋值语句,语句不是变量的声明,只能出现在方法体中;
接下来到类的UML图:UML图分为三层,顶部第一层是名字层,如果类的名字是常规字形,表明该类是具体类,如果类的名字是斜体字体,表明该类是抽象类; 第二层是变量层,也成属性层,列出类的成员变量及类型; 第三层是方法层,也称操作层,列出类中的方法,在根据设计的需要只须列出最重要的方法;
基本格式如下:
Lader |
above: float bottom :float .... |
computerArea():float setHeight(float):void ... |
接着是构造方法,如果类中没有自定义构造方法,那么,在创建对象时,Java会提供一个默认的构造方法(构造方法没有类型)。
有了构造方法就可以创建对象,创建对象格式为:
XiyoujiRenwu zhubajia; //声明对象
zhubajie = new XiyoujiRenwu(); //为对象分配变量
创建对象后就是使用对象,一般格式为:
对象.变量; //体现对象的属性
对象.方法; //体现对象的行为
没有实体的对象称为空对象,空对象不能使用; 在Java中同一个类的两个对象可以有赋值操作,如object2 = object1; 这样object2所拥有的变量就和object1一样了;
Java有独特的“垃圾收集”机制,没有析构方法;如果做了上述赋值如果操作,则系统会取消原来分配给object2的变量(这些变量没有其他对象继续引用)。如果希望Java虚拟机立刻进行“垃圾收集”操作,可以让System类调用gc()方法。
——————当用一个类创建对象后该对象可以通过“.”运算符操作自己的变量、使用类中的方法,但对象操作自己的变量和使用类中的方法有一定的限制; 访问限制修饰符有private、protectd、和public,用来修饰成员变量和方法。
不用private、protectd、和public修饰符修饰的成员变量和方法被称为友好变量和友好方法;当一个类中用另一个类创建了对象,如果这两个类在统统一个包中,则该对象能访问自己的protected变量和protected方法。
——1、不能用protected和private修饰类
——2、访问修饰符按访问权限从高到低的排序是public、protected、友好的、private。
一个Java应用程序由若干个类所构成,这些类可在一个源文件中,也可以在若干个源文件中,但一个Java应用程序只有一个主类,并且执行时都是从主类的main方法开始执行。
方法最重要的部分之一就是方法的参数,参数属于局部变量,方法被调用时,参数变量必须有具体的值;基本数据类型参数的传值与变量的赋值相似,向一个参数传递的值的级别不可以高于该参数的级别,即不可以向int型参数传递一个float值,但可以向double型参数传递一个float值。
当参数是一个引用类型时,“传值”传递的是变量中存放的“引用”,而不是变量所引用的实体。
当参数类型相同,但不知道参数个数时,可用可变参数表示:
public void f(int ... x)
或
public void g(double a,int ... x)
对象的组合指一个类的对象是另一个类中的成员变量;一个类声明的两个对象如果具有相同的引用,二者就具有完全相同的变量
如果A类中某个方法的参数是用B类声明的对象或某个方法返回的数据类型时B类对象,那么A和B的关系是依赖关系。
实例变量和类变量的区别:1、实例变量是创建对象后产生的,类变量是定义后就产生了;
2、不同对象的实例变量互不相同,所有对象共享类变量; 3、通过类名可以直接访问类变量;
声明如下:
class Dog {
float x; //实例变量
static int y; //类变量
}
类中的方法可分为实例方法和类方法;方法声明如下:
class A{
int a;
float max(float x,float y){ //实例方法
...
}
static float jerry(){ //类方法
...
}
static void speak(String s){ //类方法
...
}
}
实例方法与类方法的区别:1、当类的字节码文件被加载到内存时,只有该类创建对象后,类中的实例方法才分配入口地址,实例方法不仅可以操作实例变量,也可以操作类变量,类方法不能操作实例变量;
2、类方法可以被类创建的对象调用,也可以通过类名直接调用,实例方法不能用类名直接调用;
接着是方法重载,方法重载的意思:一个类中可以有多个相同名字的方法,但这些方法的参数必须不同(1.参数个数不同,2.参数类型不同。二者满足其一即可)(不考虑方法的返回值类型) 方法重载是多态性的一种。
在构造方法中使用this关键字,代表使用该构造方法所创建的对象;
在实例方法中使用this关键字,代表正在调用该方法的当前对象;
当实例成员变量或实例方法在实例方法出现时,默认格式为:
this.成员变量
this.方法
当static成员变量或类方法在实例方法中出现时,默认的格式是:
类名.成员变量
类名.方法
注意:this不能出现在类方法中,因为类方法可以通过类名直接调用,这时可能还没有任何对象诞生。
不同Java文件中可能出现名字相同的类,如果想区分这些类,就需要使用包名。包名的目的是有效区分名字相同的类,两个名字相同的类可以隶属于不同的包来区分。
包语句的一般格式(Java语言不允许用户程序使用java作为包名的一部分):
package 包名;
如果使用了包语句:
package tom.jiafei;
那么存储文件的目录结构中必须包含如下结构:...\tom\jiafei,例如C:\1000\tom\jiafei
编译时:C:\1000>javac tom\jiafei\源文件
如果主类的包名是tom.jiafei,那么主类的字节码一定存在...\tom\jiafei目录中,那么必须到tom\jiafei的上一层(即tom的父目录)目录中去运行主类。如:C:\1000\ java tom.jiafei.主类名
import语句的功能:引用类库中的类,引入自定义包中的类
注意:在一个源文件中编写命名的类总是在同一个包中。如果源文件使用import语句引用了另外一个包中的类,并用该类创建了一个对象,那么该类的这个对象将不能访问自己的友好变量和友好方法。
最后是对象数组(与数组类似),声明如下:
Student [] stu;
stu = new Student();
教材学习中的问题和解决过程
基本上没有问题
代码调试中的问题和解决
在实际操作时,包语句是生僻的操作(第一次接触),经过一番调试最终解决。
感悟
本周学习了类,开始初步接触面向对象,敲的代码也开始增多;从开始记不住一些系统的包名,到慢慢有点印象,果然学习这门课程上机调试比学习概念更重要。
学习进度条
代码行数(新增/累计) | 博客量(新增/累计) | 学习时间(新增/累计) | 重要成长 | |
目标 | 5000行 | 30篇 | 400小时(24000分钟) | |
第五周 | 343/424 | 1/4 | 230分钟/463分钟 |