Java基础相关

1.面向对象的三个特征
封装,继承,多态,这个应该是人人皆知,有时候也会加上抽象。
2.多态是什么?
酒 a = 剑南春
酒 b = 五粮液
酒 c = 酒鬼酒
3.接口抽象类的区别

比较                         抽象类                                                 接口
默认方法    抽象类可以有默认的方法实现   java 8之前,接口中不存在方法的实现.
实现方式    子类使用extends关键字来继承抽象类.如果子类不是抽象类,子类需要提供抽象类中所声明方法的实现.  子类使用implements来实现接口,需要提供接口中所有声明的实现.
构造器 抽象类中可以有构造器, 接口中不能
和正常类区别  抽象类不能被实例化   接口则是完全不同的类型
访问修饰符   抽象方法可以有public,protected和default等修饰  接口默认是public,不能使用其他修饰符
多继承 一个子类只能存在一个父类    一个子类可以存在多个接口
添加新方法   想抽象类中添加新方法,可以提供默认的实现,因此可以不修改子类现有的代码 如果往接口中添加新方法,则子类中需要实现该方法.

4.什么是不可变对象
不可变对象指对象一旦被创建,状态就不能再改变。任何修改都会创建一个新的对象,如 String、Integer及其它包装类。
5.java 创建对象的几种方式
采用new
通过反射
采用clone
通过序列化机制

6.switch中能否使用string做参数
在idk 1.7之前,switch只能支持byte, short, char, int或者其对应的封装类以及Enum类型。从idk 1.7之后switch开始支持String。

7.Object中有哪些公共方法
Object是所有类的父类,任何类都默认继承Object。

clone
保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常

equals
在Object中与==是一样的,子类一般需要重写该方法

hashCode
该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到

getClass
final方法,获得运行时类型

wait
使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。
调用该方法后当前线程进入睡眠状态,直到以下事件发生:

  1. 其他线程调用了该对象的notify方法
  2. 其他线程调用了该对象的notifyAll方法
  3. 其他线程调用了interrupt中断该线程
  4. 时间间隔到了
    此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常

notify
唤醒在该对象上等待的某个线程

notifyAll
唤醒在该对象上等待的所有线程

toString
转换成字符串,一般子类都有重写,否则打印句柄

8.short s1= 1; s1 = s1 + 1; 该段代码是否有错,有的话怎么改?

有错误,short类型在进行运算时会自动提升为int类型,也就是说s1+1的运算结果是int类型

9.short s1= 1; s1 += 1; 该段代码是否有错,有的话怎么改?

+=操作符会自动对右边的表达式结果强转匹配左边的数据类型,所以没错。

10.强制类型转换

在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需要强制转换。因为子类拥有比父类更多的属性、更强的功能,所以父类转换为子类需要强制。
正确:
Father father = new Son();
Son son = (Son)father;
错误:
Father father = new Father();
Son son = (Son) father;

11.final有哪些用法

final也是很多面试喜欢问的地方,能回答下以下三点就不错了:
1.被final修饰的类不可以被继承
2.被final修饰的方法不可以被重写
3.被final修饰的变量不可以被改变。如果修饰引用,那么表示引用不可变,引用指向的内容可变。
4.被final修饰的方法,JVM会尝试将其内联,以提高运行效率
5.被final修饰的常量,在编译阶段会存入常量池中。

回答出编译器对final域要遵守的两个重排序规则更好:
1.在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。
2.初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。

数据类型

java中int char,long各占多少字节?

类型 位数 字节数
short 2 16
int 4 32
long 8 64
float 4 32
double 8 64
char 2 16

集合

1.ArrayList和LinkedList的区别?

transient关键字的作用:在采用Java默认的序列化机制的时候,被该关键字修饰的属性不会被序列化。
ArrayList类实现了java.io.Serializable接口,即采用了Java默认的序列化机

1.ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表结构。
2.对于随机访问的get和set方法,ArrayList要优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。

2.hashmap linkedhashmap区别

HashMap和双向链表合二为一即是LinkedHashMap。所谓LinkedHashMap,其落脚点在HashMap,因此更准确地说,它是一个将所有Entry节点链入一个双向链表的HashMap。

猜你喜欢

转载自blog.csdn.net/weixin_34357436/article/details/87120581