目录
对象的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不能倒!在认真的重新过知识点的过程中收获不少,希望就这么慢慢的进步,不要心急,给自己点信心!这两天弄一个代码题弄得自己头都大了,昨天晚上还梦到它呢,唉,决定先放一阵子,换换脑子重新再来。
上午就这样子交代了,下午打算上完课以后弄弄安卓,竞赛什么的,还是要好好学习,差距太大。昨天早上的实验让我很是崩溃,感觉自己好没用的样子,动手能力果然太差,加油吧,别无他法!
北京雨天,注意安全~