while和do-while循环的区别
while先判断后执行,第一次判断为false,循环体一次都不执行
do while先执行 后判断,最少执行1次
break和continue的作用
break: 结束当前循环并退出当前循环体,还可以退出switch语句
continue: 循环体中后续的语句不执行,但是循环没有结束,继续进行循环条件的判断(for循环还会i++)。continue只是结束本次循环
类和对象的关系
类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。
类和对象好比图纸和实物的关系,模具和铸件的关系。比如人类就是一个概念,人类具有身高,体重等属性。人类可以做吃饭、说话等方法
实例:小明就是一个具体的人,也就是实例,他的属性是具体的身高200cm,体重180kg,他做的方法是具体的吃了一碗白米饭,说了“12345”这样一句话
面向过程和面向对象的区别
先有面向过程,后有面向对象,因为针对面向过程的不足推出了面向对象开发思想
面向过程:事物比较简单,可以用线程的思维去解决
面向对象:事物比较复杂,使用简单的线性思维无法解决
两者都是解决实际问提的一种思维方式,解决复杂问题,可以通过面向对象方式便于我们从宏观上把事物之间复杂的关系、方便我们分析整个系统,但是从具体具体到微观操作,我们可以使用面向过程方式来处理
比喻:蒋介石和毛泽东分别是面向过程和面向对象的杰出代表,这样充分说明,在解决复制问题时,面向对象有更大的优越性
如果面向过程是蛋炒饭,面向对象是盖浇饭。盖浇饭的好处就是“菜”“饭”分离,从而提高了制作盖浇饭的灵活性,饭不满意就换饭,菜不满意换菜,“可维护性”比较好,“饭” 和“菜”的耦合度比较低
面向过程以实现功能的函数开发为主,而面向对象要首先抽象出类、属性及其方法,然后通过实例化类、执行方法来完成功能
两者都具有封装性,但是面向过程是封装的是功能,而面向对象封装的是数据和功能
面向对象具有继承性和多态性,而面向过程没有继承性和多态性,所以面向对象优势是明显
方法重载和方法重写的区别
| 英文 | 位置不同 | 作用不同 | 修饰符 | 返回值 | 方法名 | 参数 | 抛出异常 |
重载 | overload | 同一个类中 | 在一个类里面为一种行为提供多种实现方式并提高可读性 | 无关 | 无关 | 相同 | 不同 | 无关 |
重写 | override | 子类和父类间 | 父类方法无法满足子类的要求,子类通过方法重写满足要求 | 大于等于 | 小于等于 | 相同 | 不同
| 小于等于 |
==和equals的区别和联系
==”是关系运算符 equals() 是方法用于判断 Number 对象与方法的参数进是否相等 同时他们的结果都返回布尔值;
“==”使用情况如下: a)基本类型,比较的是值 b) 引用类型,比较的是地址 c) 不能比较没有父子关系的两个对象
equals()方法使用如下:a) 系统类一般已经覆盖了equals(),比较的是内容。 b) 用户自定义类如果没有覆盖equals(),将调用父类的equals (比如是Object),而Object的equals的比较是地址(return (this == obj);) c) 用户自定义类需要覆盖父类的equals()
从(return (this == obj);)可以看出这里定义的equals与==是等效的(Object类中的equals没什么区别),不同的原因就在于有些类(像String、Integer等类)对equals进行了重写,但是没有对equals进行重写的类(比如我们自己写的类)就只能从Object类中继承equals方法,其equals方法与==就也是等效的,除非我们在此类中重写equals
对equals重写:
自反性:对任意引用值X,x.equals(x)的返回值一定为true;
对称性:对于任何引用值x,y,当且仅当y.equals(x)返回值为true时,x.equals(y)的返回值一定为true;
传递性:如果x.equals(y)=true, y.equals(z)=true,则x.equals(z)=true ;
一致性:如果参与比较的对象没任何改变,则对象比较的结果也不应该有任何改变;
非空性:任何非空的引用值X,x.equals(null)的返回值一定为false 。