java基础问题总结(1)

1.java代码为什么能一次编译,到处运行?

因为JVM(java虚拟机)将java文件编译成.class字节码文件,解释器再将字节码文件翻译成机器码,java代码就可以在不同机器上运行。

2.java中8种基本数据类型是什么?

整型:byte、short、int、long

浮点型:double、float

字符型:char 

布尔型:boolean

3.this 关键字的使用?

表示指向当前对象本身,形参与成员名字重名,用this来区分。

4.super关键字的使用?

表示指向离当前对象最近的父类,可以用super.xxx来引用父类的成员。

5.面向对象三大特征?

封装、继承、多态。

6.类加载顺序?

父类的静态成员变量->父类的静态代码块->子类的静态成员变量->子类的静态代码块->父类的成员变量->父类的代码块->父类的构造器

->子类的成员变量->子类的代码块->子类的构造器

7.构造器作用?

类初始化

8.内部类包括?

静态内部类 new Outer.Inner();

成员内部类 Outer  outer = new Outer();  outer.new Inner();

方法内部类 方法内直接new

匿名内部类  匿名内部类必须继承或实现一个已有的接口

9.重载和重写的区别?

重载 : 同一个类,方法名相同,参数不同,和方法返回值和访问修饰符无关;

重写 : 父子类之间,方法名和参数相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类

10. 集合框架包括哪些类或接口,特点是什么?

Map接口和Collection接口是所有集合框架的父接口;

Collection  接口的子接口 List 和 Set ;

List接口的实现类 主要有 ArrayList 、LinkedList 、Vector

ArrayList 底层是动态数组,在内存中是连续的 。有序,可重复,允许多个null,遍历快,删除和加入慢,因为要把原数组的数据Copy到新的数组;

LinkedList 底层是双向链表,通过Node来维护,所以删除和加入快(除了头尾元素),遍历慢,最好通过迭代器来遍历;

Vector 基本同ArrayList ,但在增加了Synchronized 来实现线程同步,是线程安全的,所以性能比较慢。

Set接口的实现类 HashSet 、LinkedHashSet、TreeSet

HashSet  无序,不可重复,允许一个null,实际上调用了 HashMap,将对象存入HashMap的Key,Value始终为一空值PRESENT;

LinkedHashSet  实际上调用了LinkedHashMap;

TreeSet 有序,基于TreeMap实现;

Map 接口的实现类有 HashMap、LinkedHashMap 、ConCurrentHashMap 、HashTable

HashMap 线程不安全,允许一个Key为null,多个Value为null,底层是在jdk1.8 中是数组+链表/红黑树的结构 ,add方法通过计算hash值来确定在数组中的位置,如果发生hash冲突,则加入链表,该位置链表数大于阈值(默认8),则转化为红黑树,以减少搜索时间;

LinkedHashMap 在HashMap的基础上实现了双向链表;

ConCurrentHashMap  线程安全,1.7 实现了分段锁,1.8优化使用CAS,只在每一个链表或红黑树的头结点加锁,提升了性能;

HashTable 线程安全,加了全表锁,性能不行;

11.多线程的实现方式?

继成Thread类,实现Runable接口,实现Callable接口,线程池

12.线程的状态?

新建(new)可运行(runable)运行(runing)阻塞(block)死亡(dead)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值