201711671229 《Java程序设计》第五周学习总结

由于国庆假期冲掉了第四周的课程,所以本次是本学期的第五周学习总结

教材学习内容总结

本周的课程学习为类与对象

主要内容有类、构造方法与对象的创建、类与程序的基本结构、参数传值、对象的组合、实例成员与类成员、方法重载、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/4241/4230分钟/463分钟 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值