public class TestObj {
public static void main(String
[] args){
Object o=new Object(){
//重写了equals(),不管参数是什么,都是返回true
public boolean equals(Object obj){
return true;
}
};
System.out.println(o.equals("Fred"));
}
}
本题涉及匿名内部类、多态和覆盖三个知识点。 语句
Object o=new Object(){
public boolean equals(Object obj){
return true;
}
};
创建了一个匿名内部类,并将所创建的匿名对象赋给 Object (多态:子类对象赋给超类引用)。同时,该匿名内部类重写了 Object 类的 equals 方法。
在执行语句
o.equals(“Fred”)
时,根据多态及覆盖原则,会调用匿名内部类重写后的 equals 方法。
B
4、根据下面的程序代码,哪些选项的值返回true?
public class Square {
long width;
public Square(long l) {
width = l;
}
public static void main(String arg[]) {
Square a, b, c;
a = new Square(42L);
b = new Square(42L);
c = b;
long s = 42L;
}
}
a == b
s == a
b == c
a.equals(s)
这题考的是引用和内存。
//声明了3个Square类型的变量a, b, c
//在stack中分配3个内存,名字为a, b, c
Square a, b, c;
//在heap中分配了一块新内存,里边包含自己的成员变量width值为48L,然后stack中的a指向这块内存
a =
new
Square(42L);
//在heap中分配了一块新内存,其中包含自己的成员变量width值为48L,然后stack中的b指向这块内存
b =
new
Square(42L);
//stack中的c也指向b所指向的内存
c = b;
//在stack中分配了一块内存,值为42
long
s = 42L;
A: a == b
由图可以看出a和b指向的不是同一个引用,故A错
B:s == a
一个Square类型不能与一个long型比较,编译就错误,故B错
c:b == c
由图可以看出b和c指向的是同一个引用,故C正确
d:a equal s
程序会把s封装成一个Long类型,由于Square没有重写Object的equals方法, 所以调用的是Object类的equals方法,源码如下
public boolean equals(Object obj) {
return (this == obj);
}
其实就是判断两个引用是否相等,故D也错误。
C
5、请问以下代码运行结果是:
try catch
try finally catch
try finally
try catch finally
throws:写在方法声明之后,表示方法可能抛出异常,调用者需要处理这个异常。
throw:写在方法体中,表示方法一定会抛出一个异常,要么try…catch处理,要么throws抛出。
本题正是有了throw,所以才会顺序执行,否则不执行catch块中的语句。
finally块中的代码,不论在try中是否抛出异常,都会执行。但是一旦在try中跑出异常,fianlly块后的代码不再执行
D
6、以下代码运行输出的是
public class Person{
private String name = “Person”;
int age=0;
}
public class Child extends Person{
public String grade;
public static void main(String[] args){
Person p = new Child();
System.out.println(p.name);
}
}
输出:Person
没有输出
编译出错
运行出错
首先不能两个public类,其次child类中无法访问父类的私有变量
1.一个java文件里,public 的类只能出现一个,只能出现一个,只能出现一个,否则,不管你用哪一个类名命名文件名编译器都会报错
2.关于多态。子类继承了父类的所有成员,包括private权限的成员变量,但是继承的子类具有私有变量的拥有权但是没有使用权。
3.private的成员变量,根据权限修饰符的访问控制范围,只有在类内部才能被访问,就算是他的子类,也不能访问。
C
7、假定Base b = new Derived(); 调用执行b.methodOne()后,输出结果是什么?
public class Base
{
public void methodOne()
{
System.out.print(“A”);
methodTwo();
}
public void methodTwo()
{
System.out.print(“B”);
}
}
public class Derived extends Base
{
public void methodOne()
{
super.methodOne();
System.out.print(“C”);
}
public void methodTwo()
{
super.methodTwo();
System.out.print(“D”);
}
}
ABDC
AB
ABCD
ABC
向上转型:父类只能调用父类方法或者子类覆写后的方法,而子类中的单独方法则是无法调用的。
只要是被子类重写的方法,不被super调用都是调用子类方法
A
7、面向对象的基本特征是()
封装
继承
重载
多态
三大基本特征
封装、继承、多态
五大基本原则
1.单一职责原则
就一个类而言,应该仅有一个引起它变化的原因。
2.开放-封闭原则
一个软件实体应当对扩展开放,对修改关闭
3.里氏代换原则
子类型(subtype)必须能够替换它们的基(父)类型
4.依赖倒转(置)原则
要依赖于抽象,不要依赖于具体
5.接口隔离原则
使用多个专门的接口比使用单一的总接口总要好
ABD
8、单例模式中,两个基本要点是
构造函数私有
静态工厂方法
以上都不对
唯一实例
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
特点:
- 1、单例类只能有一个实例。
- 2、单例类必须自己创建自己的唯一实例。
- 3、单例类必须给所有其他对象提供这一实例。
AD
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
AD
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-eNKYAIO1-1714834303429)]
[外链图片转存中…(img-YPc3t6Am-1714834303430)]
[外链图片转存中…(img-Nm7OhZJU-1714834303430)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!