关于类的使用,一些简单知识的整理,看看有什么比较常用的,以及在我的工作经历中,最常见遇到的场景, 进行总结和梳理。
上一章,回忆了关于类的3大组成部分的一些特征。下面我继续一边看书,一边回忆一些,类使用上的知识和以及场景。
方法的重载和重写:对于初学者,两个名词容易搞混,实际上,它们两个是完全不同的逻辑。
重载是指同一个类里面,有好几个名字相同的方法,和上一章,我举得构造器的例子是一样的。对于方法传入参数,也可以根据需要确定的参数不同,来进行一个嵌套。既可以某个方法全部使用默认参数,也可以,都使用定制参数,(类比上一章中,构造器例子)。
方法的重载是以传入参数来作为区分的,目前我知道的,需要用到方法重载的就是,有选择默认传入参数和定制传入参数差别的方法,进行重载。
方法的重写是源于继承,是子类的方法和父类不一样,于是子类重新写一个方法,称做方法的重写,@override 用于表示一个方法是重写的。这是属于@相关的知识了,这里不展开学习。
方法中声明的变量:
方法中声明的变量在方法结束时就会消失,从节约内存的角度,变量要尽量在最小的范围,比如for循环的i就在for里面创建。而不是在类里面去创建一个i来循环。
但是,变量太小也不行,比如一个方法a里面的变量,需要在方法b里面使用,但是又不会在方法a通过调用方法b将参数传递过去,那这是办不到的。 因为方法内部初始化的变量,只能在方法a里面使用 ,方法b不能跨界调用。
在实际使用时,没预料到变量会被方法b使用时,可以就在方法a内创建,如果后续发现方法b需要使用,再将变量从方法a移动出来,使其在类里面被创建即可。
对于平凡的我们,很难一次就把代码写完美,定然是写好后,还要一步步修改,一步步整理,所以在初始化变量的时候,无需一次考虑完成。
If判断中比较的方法:
初学者的时候,最喜欢用 == 来进行判断,也学到了要用“==” 不能用“=”
接下来是进阶
==是用来比较数据类型的。
对于String,则建议采用eqaule来比较。
类和对象的比较,instanceof是将对象和类进行比较的,这个功能又要回到面向对象编程的继承和多态,在传入参数的时候,某个父类及其所有子类,子类的子类,可以以相同的参数传入,但,实际传入的是不同的类。
以android为例,android是面向手机编程的,编写的就是APP,里面的图片,包括文字(textView),图片(ImageView)等等,都属于view这个类型。那么,它传入的参数就是view,但是实际上,我们会通过instanceof,来看看传入的参数到底是什么类型,在进行相关操作。
If( v instanceof textView){
内容1
}else if(v instanceof ImageView)
{
内容2
}
instanceof 是在相对复杂的继承关系中会用到的一种方案,而对比类和对象,采用instanceof 是最好的方法。
单例模式,单例模式是一个非常舒服的模式,在一些控制类的对象,也就是一个类只创建一个对象,这个对象不需要创建出对象1对象2的时候,比如,一个网络带着几百个主机,那么主机这个类需要几百个对象,而网络只需要一个对象,特别是我们不希望创建出2个以上的网络,但是从使用目的上,每个主机都要获取网络对象的时候,单例模式就非常好了。
单例模式的结构:
Public static classA getInstance(){
If (instance == null){
instance = new classA ();
}
Return instance;
}
这里代码的意思就是,
在别的地方调用这样,classA a = classA.getInstance();
然后实质就是,各个主机都在调用服务器classA的而classA.getInstance()仅在第一次调用的时候,会instance = new classA ();创建对象,后面再调用就直接返回之前创建的instance了。
这样达到,每个主机都调用同一个网络。
匿名内部类,先说内部类,就是一个类A,只在一个类B之间使用。那么这个类A就创建成内部类,最常用的内部类是runnable。
如果一个类很简单,且只创建一次对象,那么,匿名内部类则更是是首选。直接将类赋值给对象,runnable也是最常见的匿名内部类。
匿名内部类在实现通用接口也是很好用的,特别是android里面的onclick一类的listener
对象.post(new Runnable() {
public void run() {
内容1
}
}
});
这样就创建一个新的线程来运行内容1。 这个runnable就是一个匿名内部类。以及创建新线程的作用是异步操作,以及防止卡顿等,多线程相关知识不在此展开。
枚举类
是某种常见用法的简化编程代码,就像switch是if .... else if ....else if 的简化一样。回到之前讲到变量的修饰符时提到的用来作为判断的常量,在代码设计时是不建议直接使用数字来区分选择的内容,要用名字来代替数字。
例子:
Public static final int KEYBORAD=0;
Public static final int MOUSE=1;
Public static final int CPU=2;
以上3个是同类的常量,对于这种多个同类,使用到一起的常量,现在就建议使用enum来实现,
Public enum item{KEYBORAD,MOUSE,CPU }
系统会自动去分辨这三个,不需要去赋值为0,1,2了
如果仅仅一个常量,则不使用枚举类,枚举类还是针对有多个用在用一个地方作为分辨参数的。往往枚举类emun和switch会一起使用。