开头
大家好,我是程序员Manor,我希望自己能成为国家复兴道路的铺路人,大数据领域的耕耘者,平凡但不甘于平庸的人。
今天为大家带来14道Java开发岗面试题
1、问:short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
答:对于short s1 = 1; s1 = s1 + 1;
由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
队友锁在边
对于short s1 = 1; s1 += 1;
由于 += 是java语言规定的运算符,
java编译器会对它进行特殊处理,
因此可以正确编译。
队友加一
2、问:使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
答:
使用final关键字修饰一个变量时,是指引用变量不能变,
引用变量所指向的对象中的内容还是可以改变的
3、"=="和equals方法究竟有什么区别?
答案(
1、””是运算符,
2、equals是超(人)类(型)Object中的方法
3、””比较基本类型是数值,
引用类型是地址比较内存地址,
String类中重写的equals方法比较的是值)
因此圣诞树
4、是否可以从一个static方法内部发出对非static方法的调用?
不可以。
普通方法属于对象,
只有对象创建后才可以调用,
而static方法调用时不需要创建对象,
从static方法中调用非static方法时可能还没有创建任何实例对象
趴着睡退出
5、Integer与int的区别
Int是基本数据类型,
Integer为int对应的封装类型。
int的默认值为0,
而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别
家都没去
6、请说出作用域public,private,protected,以及不写时的区别
作用域 当前类 同一包 子类 其他包
Public(公开的 √ √ √ √
Protected(受保护的 √ √ √ ×
Default(默认的 √ √ × ×
Private(私有的 √ × × ×
类包子其
那包紫琪
公受默私
公司没收
7、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
答:Overload是重载的意思,
Override是覆盖的意思,也就是重写。
Override覆盖要注意以下的几点:
1.覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
2.覆盖的方法的返回值必须和被覆盖的方法的返回值一致;
3.被覆盖的方法不能为private,
否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
- 子类覆盖父类方法,方法访问权限必须大于等于父类
5.覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
表反派附议
overload要注意以下的几点:
1.重载只和参数列表有关。例如,不同的参数类型,不同的参数个数,不同的参数顺序
2.不能通过访问权限、返回类型、抛出的异常进行重载;
3.方法的异常类型和数目不会对重载造成影响;
4.对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。
才不要·对喷
8、abstract class和interface有什么区别?
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
- 抽象类中的抽象方法的访问类型可以是public,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5.抽象类和接口中都可以包含静态成员变量,
抽象类中的静态成员变量的访问类型可以任意,
但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
5. 一个类可以实现多个接口,但只能继承一个抽象类
接口中不能有构造方法
接口中没有普通成员变量
接口中的所有方法必须都是抽象的,不能有非抽象的普通方法
接口中的抽象方法只能是public类型的,并且默认即为public abstract类型
接口中定义的变量只能是public static final类型,并且默认即为public static final类型
9、String是最基本的数据类型吗?
不是,基本数据类型包括byte、int、char、long、float、double、boolean和short。
java.lang.String类是final类型的,
因此不可以继承这个类、不能修改这个类。
为了提高效率节省空间,
我们应该用StringBuilder类
10、String s = new String(“xyz”);创建了几个String Object? 二者之间有什么区别?
答:创建了两个,
“xyz” 是一个,
new String 是一个,
存储的位置不一样,前者存储在常量池中,后者在堆中分配存储空间。
处分
11、String 和StringBuilder的区别
答案:
(String做字符串拼接会产生多个对象,
加大系统的开销。
而StringBuilder做字符串拼接只会产生一个对象,大大提高了频繁拼接字符串的效率)
参加真高
12、下面这条语句一共创建了多少个对象:String s=“a”+“b”+“c”+“d”;
答案:(创建了一个对象)
编译可以对字符串常量直接相加的表达式进行优化,
不必要等到运行期去进行加法运算处理,
而是在编译时去掉其中的加号,
直接将其编译成一个这些常量相连的结果。
不包邮
不对劲,饿不起,自己
13、简述List、Map、Set三个接口的特点
答案:
(List: 存储的元素有序、
可重复、
允许值为空
Map:以键值对形式存储元素,
键不能重复,
值可重复
Set:存储的元素无序、
不可重复)
来嘛死人
有序重复 值为空
14、简述ArrayList和LinkedList的结构以及操作特点
答案:(ArrayList底层是数组,
LinkedList底层是双向链表。
ArrayList查找快增删慢,
LinkedList查找慢增删快