《疯狂JAVA讲义》3

·  阅读 18

目录

对象的this使用

1. this关键字总是指向调用该方法的对象。

做法一:使用this

做法二:不使用this

2. 特殊的:

方法详解

成员变量和局部变量

隐藏和封装


对象的this使用

1. this关键字总是指向调用该方法的对象。

根据this出现位置不同,this作为对象的默认引用有两种情形:

(1)构造器中引用该构造器正在初始化的对象;

(2)在方法中调用该方法的对象。

事实上,this最大的作用就是让类中的一个方法,访问同一个类中的另一个方法或者实例变量。

举个栗子:定义一个Dog类,里面有run和jump两个方法,想在jump中调用run方法。

做法一:使用this

图片

结果如下:

图片

做法二:不使用this

 

图片

结果相同。

二者的比较: 不使用this时,需要在jump方法中重新定义一个对象,否则不能引用run方法,相比较而言,使用this更简练。

    如果自己调试程序,发现不用this也可以得到相同的结果,但是这是一种假象,实际上还是存在着this。

2. 特殊的:

    对于static修饰的方法而言,是不可以用this的,之前说过,static声明的是类方法和类变量,不能调用没有用static修饰的方法或者变量,必须创建一个实例。如果可以用this,就意味着类里的所有方法和变量都可以通过this调用,显然很矛盾。因此,java规定,静态成员不能访问非静态成员。

下面举个栗子告诉大家静态方法引用非静态方法时发生的错误:

图片

看一下原因:

图片

这就很明显了。

个人觉得this理解到这里已经可以了。

方法详解

1. java里的方法不能单独存在,所有的方法都必须定义在类里。方法在逻辑上要么属于类,要么属于对象。因此,方法也不能像函数那样独立执行,必须使用类或者方法作为调用者。同一个类里方法互相调用给人一种方法可以独立执行的假象,上面也说了,是通过this进行调用的。

2. 方法的参数传递机制:值传递

    所谓的值传递,就是把参数的副本(复制品)传给方法内,参数本身不会受到影响。

下面通过对两个数进行交换来说明值传递:

图片

结果为:

图片

可以看到,没有我们预期的效果。因为系统开始执行方法时,是将实参变量赋值给形参变量,而并不是直接对实参进行操作,所以当然不会变啦。这就是值传递。这里我们需要用引用类型的参数传递。

正确的做法如下:

图片

结果如下:

图片

3. 方法重载

    同一个类里定义多个同名的方法,但是形参列表不同。

    java程序中确定一个方法有三个要素:

    (1)调用者

    (2)方法名

    (3)形参列表

    方法重载只需要形参列表不同,方法名相同即可,至于其他部分,比如方法的修饰符,返回值类型等等都与方法重载没有关系。

举个栗子:

图片

结果如下:

图片

成员变量和局部变量

图片

   (1) 可以看出来,成员变量是在类里定义的变量,局部变量是在方法中定义的变量。类变量是直到这个类被销毁,否则一直存在,但是局部变量是随着方法的消失而消失。

    (2)类变量可以通过类或者实例进行访问及修改。因此,在实例中用到类变量时注意,一旦修改,别的实例用的就是修改后的值,慎重。

    (3)与成员变量不同的是,局部变量除了形参之外,都必须显示初始化。也就是说,如果没有赋初始值,不可以访问它们。

举个栗子:

图片

报错如下:

图片

隐藏和封装

主要通过四个访问控制符进行控制:

(1)private(当前类访问权限)

(2)default(包访问权限)

(3)protected(子类访问权限)

(4)public(公共访问权限)

介绍一下private:

****类里的大部分成员变量都应该使用private修饰,只有一些用static修饰的,类似全局变量的成员变量,才考虑用public修饰。这是为了使模块高内聚(尽可能把模块内部数据在模块内独立完成,不允许外部直接干预),低耦合(仅暴露少量的方法等给外部使用)。

介绍一下default:

    如果类里的一个成员或者一个外部类不使用任何访问控制符修饰,就是包访问权限的。default访问控制的成员或外部类可以被相同包下的其他类访问。

介绍一下protected:

    通常情况下,使用protected修饰一个方法,通常是希望其他子类重写这个方法。

注意:

如果一个java文件定义的所有类都没有用public来修饰,则这个java源文件的文件名可以是一切合法名,但是如果一个java文件里定义了一个public修饰的类,则这个源文件的文件名必须与public修饰的类的类名相同。

/********************************/

最后说一个容易忽视的问题:

import 语句放在package语句之后,类定义之前。

 

END

图片

    今天比较开心的是用的是eclipse,我一定要学会熟练使用它,flag不能倒!在认真的重新过知识点的过程中收获不少,希望就这么慢慢的进步,不要心急,给自己点信心!这两天弄一个代码题弄得自己头都大了,昨天晚上还梦到它呢,唉,决定先放一阵子,换换脑子重新再来。

    上午就这样子交代了,下午打算上完课以后弄弄安卓,竞赛什么的,还是要好好学习,差距太大。昨天早上的实验让我很是崩溃,感觉自己好没用的样子,动手能力果然太差,加油吧,别无他法!

    北京雨天,注意安全~

分类:
代码人生
标签: