几个Java基础题
1.java中线程能不能重复start
t1.start();
System.out.println("ssss");
t1.start();
答:第一个start能运行,然后打出ssss,第二个运行时错误。编译不会错。
2.java中接口能不能多继承?
答:可以多继承。但是只能继承别的接口。不能直接或间接的继承自己。
Interface3 Extends Interface0, Interface1, interface……
不允许类多重继承的主要原因是,如果A同时继承B和C,而b和c同时有一个D方法,A如何决定该继承那一个呢?
但接口不存在这样的问题,接口全都是抽象方法继承谁都无所谓,所以接口可以继承多个接口
3.抽象类能不能实现接口?
答:当然可以。
4.Java 中对象的equals,==,hashCode(),还有HashMap.put(object,xxxx)之间的关系。
String a="abc";String b="abc"; a==b为true
String a=new String("abc"); a==b 为false
对于非基础数据类型来讲,== 比较的是地址,“abc”是常量字符串,a="abc" ,b="abc"其实a,b指向都是同一个常量字符串地址。
new String 是在堆区分配内存,a=new String("abc"),a指向堆区的 new String地址。
package com.abc.zj;
public class Test {
String a;
public Test(String a){
this.a=a;
}
public int hashCode(){
return super.hashCode();
//return 1;
}
public boolean equals(Object object){
if(a==((Test)object).a){
return true;
}else{
return false;
}
}
}
public static void main(String argv[]) throws ArithmeticException{
Test testa = new Test("abc");
Test testb = new Test("abc");
if(testa==testb){
System.out.println("testa==testb");
}
if(testa.equals(testb)){
System.out.println("testa equals testb");
}
if(testa.a==(testb.a)){
System.out.println("testa.a == testb.a");
}
if(testa.a.equals(testb.a)){
System.out.println("testa.a equals testb.a");
}
Map<Test,String> map = new HashMap<Test,String>();
map.put(testa, "value1");
map.put(testb,"value2");
for(Test t:map.keySet()){
System.out.println(map.get(t));
}
}
运行结果:
testa equals testb
testa.a == testb.a
testa.a equals testb.a
value1
value2
说明:最后 value1 和 value2 先后顺序可能有变化,每次运行都可能不一样。map遍历随机,没顺序。
public int hashCode(){
//return super.hashCode();
return 1;
}
这样以后,运行结果变为:
testa equals testb
testa.a == testb.a
testa.a equals testb.a
value2
==================
public int hashCode(){
//return super.hashCode();
return 1;
}
public boolean equals(Object object){
// if(a==((Test)object).a){
// return true;
// }else{
// return false;
// }
return false;
}
这样 运行结果变为:
testa.a == testb.a
testa.a equals testb.a
value2
value1
结论:hashCode 一样 且 equals 返回true,hashMap才认为两个key相同。
5.Integer ,int ,==,装箱 拆箱
小于128的Integer之间的比较。
Integer i=128;
Integer b=128;
if(i==b){
System.out.println("i=b");
}
if(i.equals(b)){
System.out.println("i equals b");
}
输出 i equals b
Integer i=127;
Integer b=127;
if(i==b){
System.out.println("i=b");
}
if(i.equals(b)){
System.out.println("i equals b");
}
输出
i=b
i equals b
原因: -128 到 127 之间 用缓存。看Integer源码
public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
网上其他的人解释:看看Integer 的源代码就知道了,其实就是Integer 把-128-127之间的每个值都建立了一个对应的Integer 对象,类似一个缓存。由于Integer 是不可变类,因此这些缓存的Integer 对象可以安全的重复使用。Integer i = XXX ,就是Integer i = Interger.valueOf(XXX), 首先判断XXX 是否在-128-127 之间,如果是直接return 已经存在的对象,否则就只能new 一个了。
new Integer 就不一样了。例如:
Integer i=new Integer(127);
Integer b=127;
if(i==b){
System.out.println("i=b");
}
if(i.equals(b)){
System.out.println("i equals b");
}
这样结果是:i equals b
6.子类重写父类的方法的访问修饰符,不能低于父类的方法访问权限。
对于接口来讲,实现接口的类中,对于实现的接口中的方法,都必须是public。因为接口中的方法都是public。
接口中的方法,只有public 和 abstract可以修饰,并且默认就是他俩修饰。(static不行)。
接口中的常量,默认都是public final static 修饰。
几个Java基础题的更多相关文章
- Java基础题:集合、String、性能、线程
转载自:Java基础题 https://yq.aliyun.com/articles/601786?utm_content=m_1000001149
- 【原创】这道Java基础题真的有坑!我也没想到还有续集。
前情回顾 自从我上次发了<这道Java基础题真的有坑!我求求你,认真思考后再回答.>这篇文章后.我通过这样的一个行文结构: 解析了小马哥出的这道题,让大家明白了这题的坑在哪里,这题背后隐藏 ...
- java 基础题 很基础, 很有趣
都是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我一样参加各大IT校园招聘的同学们,纯考Java基础功底, 老手们就不用进来了,免得笑话我们这些未出校门的孩纸们, ...
- Java基础题
问题: 1.请对比一下重载和重写的区别. 2.请对比一下接口和抽象类的异同. 3.写出一个单例模式,并说明其优点. 4.用过String.StringBuffer吗,说出他们的异同. 5.什么是值传递 ...
- 转载 java基础题(面试必知)
1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包 ...
- 这道Java基础题真的有坑!我求求你,认真思考后再回答。
本文目录 一.题是什么题? 二.阿里Java开发规范. 2.1 正例代码. 2.2 反例代码. 三.层层揭秘,为什么发生异常了呢? 3.1 第一层:异常信息解读. 3.2 第二层:抛出异常的条件解读. ...
- java基础题整理(1)
1.使用length属性获取数组长度,使用length()获取字符串的长度: 2.public.private.protected.friendly区别 public表明该数据成员.成员函数是对所有用 ...
- java基础题集
1.什么是java虚拟机?为什么java被称作是“平台无关的编程语言”? java虚拟机是一个可以执行java字节码的虚拟机进程.java源文件被编译成能被java虚拟机执行的字节码文件. java被 ...
- 从一道题看线程安全--牛客网Java基础题
从一道题看线程安全 Java中的线程安全是什么: 就是线程同步的意思,就是当一个程序对一个线程安全的方法或者语句进行访问的时候,其他的不能再对他进行操作了,必须等到这次访问结束以后才能对这个线程安全的 ...
随机推荐
- HDU - 4430 Yukari's Birthday(二分+枚举)
题意:已知有n个蜡烛,过生日在蛋糕上摆蜡烛,将蜡烛围成同心圆,每圈个数为ki,蛋糕中心最多可摆一个蜡烛,求圈数r和看,条件为r*k尽可能小的情况下,r尽可能小. 分析:n最大为1012,k最少为2,假 ...
- Python Learning Day9
Scrapy爬虫框架 发送请求 ---> 获取响应数据 ---> 解析数据 ---> 保存数据 Scarpy框架介绍 1.引擎(EGINE) 引擎负责控制系统所有组件之间的数据流,并 ...
- MVC学生管理系统-阶段II(添加学生信息)
项目源码 :https://download.csdn.net/download/weixin_44718300/11091042 前期准备,主体框架,学生列表显示 请看上一篇文章 本文是对阶段 ...
- css3 实现渐变边框
(1)一个渐变的底边线border:1px solid transparent;border-image: -webkit-linear-gradient(right, #FF9848,#FF2A2B ...
- 2020/2/3 PHP代码审计之PHP伪协议
0x00 简介 开局一张图233 0x01 file://协议 说明: file:// 文件系统是 PHP 使用的默认封装协议,展现了本地文件系统.当指定了一个相对路径(不以/..\或 Windows ...
- IDEA--IDEA配置web项目
参考:https://blog.csdn.net/kfm1376822651/article/details/79666586 记学习springmvc时,使用idea部署web项目至tomcat. ...
- lambda的题
def num(): return [lambda x: i*x for i in range(4)] print([m(2) for m in num()]) 这个式子,lambda相当于闭包函数, ...
- DRF框架之序列化器初体验
首先,我们需要明白序列化和反序列化的过程指的是什么. 序列化操作:将模型数据 ---> 字典数据 --->JSON数据(响应JSON数据的操作) 反序列化操作:将JSON数据 ---> ...
- ES6 之 第七种数据类型Symbol
概述 为了减少对象的属性名冲突,ES6引入新的原始数据类型Symbol,JS的第七种数据类型. Symbol 能够保证每个属性的名字都是独一无二,这样就能从根本上防止属性名冲突. Symbol 值能够 ...
- MST(最小生成树)——Prim算法——HDU 1879-继续畅通工程
Prim算法很好理解,特别是学完了迪杰斯特拉算法之后,更加能理解Prim的算法思想 和迪杰斯特拉算法差不多,由于最后要形成连通图,故任意指定一个点,作为初始点,遍历所有点,以当前最小权值的点(和迪杰斯 ...