打卡面试题-day01(javaSE)

面向对象都有哪些特性以及你对这些特性的理解

  1. 继承:从已知类中继承信息并创建新类的过程。提供信息的类被称为父类、超类、基类;得到信息的类成为子类,派生类。
  2. 封装:通常认为封装是将数据与操作数据的方法帮顶起来,对数据的访问只能通过已定义的接口来实现。我认为的封装是隐藏一切可隐藏的东西,只向外界提供最简单的接口。犹如黑盒,我们不知道里面的具体数据,只知道通过接口可以实现某些功能。
  3. 多态:是指不同子类对象对同一消息作出的不同的响应。简单来说就是用相同的对象引用调用同样的方法来实现不同的功能。多态性分为编译时多态和运行时多态。方法重载实现的是编译时的多态性,而方法重写实现的是运行时的多态。运行时的多态是面向对象的重中之重,要实现多态要做两件事:1.方法重写(子类继承父类并重写父类已有的或抽象的方法)2.对象造型(用父类型引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)
  4. 抽象:将一类对象的共同特征抽取出来构造类的过程,包括数据抽象和行为抽象。抽象只关注对象的属性和行为,并不关注行为的细节。

访问权限修饰符public,private,protected以及不写(默认)时的区别

修饰符当前类同包子类其他包
publictruetruetruetrue
protectedtruetruetruefalse
defaulttruetruefalsefalse
privatetruefalsefalsefalse

为什么要用clone

在实际编程过程中,我们常常要遇到这种情况:有一个对象 A,在某一时刻 A 中已经包含了一些有效值,此时可能会需要一个和 A 完全相同新对象 B,并且此后对 B 任何改动都不会影响到 A 中的值,也就是说,A 与 B 是两个独立的对象,但 B 的初始值是由 A 对象确定的。在 Java 语言中,用简单的赋值语句是不能满足这种需求的。要满足这种需求虽然有很多途径,但实现 clone()方法是其中最简单,也是最高效的手段

new一个对象的过程和clone一个对象的过程区别

new:创建对象分配内存,当程序运行到new操作符,会先去看new操作符后面的类型,知道了数据类型,才能知道分配多大的内存空间。内存分配完成后,在调用构造函数,填充对象的各个域,这就是初始化,构造返回后,一个对象创建完毕,可以把它的引用发布到外部,在外部可以使用这个引用操作这个对象。
clone:与new相似,分配内存,调用clone方法时,分配内存和原对象相同,再使用原对象中对应的个各类,填充新的对象的域,clone方法返回,一个新对象被创建,同样把新对象的引用发布到外部。

& 和&& 的区别

& 运算符有两种用法(1)按位与;(2)逻辑与
&& 运算符是短路与运算。逻辑与和短路与的差别是很大的,虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true
&&之所以被称为短路与运算是因为,若果&&左边的表达式的值是false,左边表达式则不会执行。

在java中,如何跳出当前嵌套的多重循环

在最外层循环前加一个标记如A,然后用break A;可以跳出循环,
break终止循环,continue是跳出当前本次循环,

两个对象相同(x.equals(y) == true),但是却又不同的hashCode,这句话对不对?

不对,如果两个对象的x和y满足x.equals(y)==true它们的hashCode应当相同。
equals和hashCode的规定是:(1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定相同;(2)如果两个对象的hashCode相同,它们并不一定相同。
实现高质量的equals方法

  1. 使用==操作符检查"参数是否为这个对象的引用";
  2. 使用 instanceof 操作符检查"参数是否为正确的类型";
  3. 对于类中的关键属性,检查参数传入对象的属性是否与之相匹配;
  4. 编写完 equals 方法后,问自己它是否满足对称性、传递性、一致性;
  5. 重写 equals 时总是要重写 hashCode;
  6. 不要将 equals 方法参数中的 Object 对象替换为其他的类型,在重写时不要忘掉@Override 注解

是否可以继承String

String类是final类,不可以继承
继承String本身就是一个错误的行为,对String类型最好的重用方式就是关联关系(Has-A)和依赖关系(Use-A)而不是继承关系(Is-A)

当一个对象被当做参数传递到一个方法,此方法可改变这个对象的属性,并返回变化后的结果,那么这个到底是值传递还是引用传递?

是值传递。java语言中的方法调用只支持参数的值传递,当一个对象实例作为一个参数被传递到方法中,参数的值就是该对象的引用。对象的属性可以再被调用过程中被改变,但对对象引用的改变是不会影响到调用者的。

重载(Overload)和重写(Overrrid)的区别?重载的方法能否根据返回类型进行区分?

方法的重载和重写都是实现多态的方式,区别在于前者是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同,参数个数不同或者二者都不同)则视为重载;重写发生在子父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更容易访问,不能比父类重写方法声明更多的异常。重载对返回类型没有特殊的要求。
方法重载的规则:

  1. 方法名一致,参数列表中参数的顺序,类型,个数不同
  2. 重载与方法的返回值无关,存在于子父类,同类中
  3. 可以抛出不同的异常,可以有不同修饰符
    方法重写的规则:
  4. 参数列表必须与被重写方法一致,返回类型必须完全与被重写方法的返回类型一致
  5. 构造方法不能被重写,声明为final的方法不能被重写,声明为static的方法不能被重写,但是能够被多次声明
  6. 访问权限不能比父类中别重写的方法的访问权限更低
  7. 重写的方法能抛出任何非强制异常,无论被重写的方法是否抛出异常,但是,重写的方法不能抛出新的强制性异常,或者被重写方法声明的更广泛的强制性异常,反之则可以
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

double_lifly

点喜欢就是最好的打赏!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值