
java核心基础
xiangyuenacha
任何时候学习都不晚,只要你坚持再坚持
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
请说下java中常用的几种线程池[中高]
为什么用线程池?创建线程要花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变长,而且一个进程能创建的线程数有限。为了避免这些问题,在程序启动的时候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程。从JDK1.5开始,Java API提供了Executor框架让你可以创建不同的线程池。java.util.concurrent.Executors提供了一个一些静态方法,负...原创 2018-11-24 19:51:38 · 286 阅读 · 0 评论 -
java7中,ArrayList 和 HashMap 的默认容量是多少?[中高]
在 Java 7 中,ArrayList 的默认容量是 10 个元素,HashMap 的默认容量是16个元素(必须是2的幂)。jdk1.8中,ArrayList包含了两个重要的对象:elementData 和 size。elementData 是”Object[] 类型的数组”,它保存了添加到ArrayList中的元素。实际上,elementData是个动态数组,我们能通过构造函数 Arr...原创 2018-11-22 23:06:56 · 1233 阅读 · 0 评论 -
Comparable和Comparator接口有什么区别?
相同点: Comparable 和 Comparator 都是用来实现集合中元素的比较、排序的不同点:1 接口定义的方法不同Comparable接口里面的方法是 public int compareTo(T o); 在java.lang包下Comparator接口里面的方法是 int compare(T o1,T o2); 在java.util包下2 Comparable 是在集合内部定...原创 2018-11-22 23:06:02 · 10370 阅读 · 1 评论 -
Iterator和ListIterator之间有什么区别?
看源码ListIterator继承Iterator:public interface ListIterator extends Iterator首先看一下Iterator和ListIterator迭代器的方法有哪些。Iterator迭代器包含的方法有:hasNext():如果迭代器指向位置后面还有元素,则返回 true,否则返回falsenext():返回集合中Iterator指向位置后面...原创 2018-11-22 23:04:46 · 5802 阅读 · 0 评论 -
List和Set,map有什么区别?List,Set, Map是否继承自Collection接口?
List:1.可以允许重复的对象。2.可以插入多个null元素。3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。4.常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。Set:1.不允许重复对象...原创 2018-11-20 16:47:13 · 3056 阅读 · 0 评论 -
Java中堆和栈介绍下
堆:(对象)引用类型的变量,其内存分配在堆上或者常量池(字符串常量、基本数据类型常量),需要通过new等方式来创建。堆内存主要作用是存放运行时创建(new)的对象。(主要用于存放对象,存取速度慢,可以运行时动态分配内存,生存期不需要提前确定)栈:(基本数据类型变量、对象的引用变量)基本数据类型的变量(int、short、long、byte、float、double、boolean、cha...原创 2018-11-23 19:47:43 · 130 阅读 · 0 评论 -
Java NIO和IO的主要区别是什么?
一、什么是NIO?java.nio全称java non-blocking IO,是指jdk1.4 及以上版本里提供的新api(New IO) ,为所有的原始类型(boolean类型除外)提供缓存支持的数据容器,使用它可以提供非阻塞式的高伸缩性网络。在非阻塞io出现之前,java是通过传统的socket来实现基本的网络通信功能的。Java NIO 的核心部分组成:Channel,Buffer,S...原创 2018-11-23 19:50:43 · 208 阅读 · 0 评论 -
java io中有几种类型的流?JDK为每种类型的流 提供了一些抽象类以供继承,请说出他们分别是哪些类?
一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。字节流----字节输入流:InputStream,字节输出流:OutputStream字符流----字符输入流:Reader,字符输出流:Writer什么时候使用字节流、什么时候使用字符流?InputStream 和OutputStream,两个是为字节流设计的,主要用来处理字节或二进制对象,Read...原创 2018-11-23 19:50:25 · 1998 阅读 · 0 评论 -
简单说说Java 序列化以及反序列化?
简单介绍下Java 序列化:Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列(字节流),该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据,还有对象中的数据类型可以用来在内存中新建对象。简单说: Java对象的序列化指将一个java...原创 2018-11-23 19:50:03 · 299 阅读 · 0 评论 -
hashCode()和equals()方法有什么重要性?
hashCode()方法和equals()方法的作用其实一样,在Java里都是用来对比两个对象是否相等一致,在Java中任何一个对象都具备equals(Object obj)和hashCode()这两个方法,因为他们是在Object类中定义的。equals(Object obj)方法用来判断两个对象是否“相同”,如果“相同”则返回true,否则返回false。hashCode()方法返回一个...原创 2018-11-22 23:08:18 · 2215 阅读 · 0 评论 -
HashSet和TreeSet有什么区别?
HashSet:不能保证元素的排列顺序,顺序有可能发生变化集合元素可以是null,但只能放入一个nullHashSet底层是采用HashMap实现的HashSet底层是哈希表实现的TreeSet:Treeset中的数据是排好序的,不允许放入null值。TreeSet是通过TreeMap实现的,只不过Set用的只是Map的key。TreeSet的底层实现是采用二叉树(红-黑树)的数据...原创 2018-11-22 23:09:17 · 15214 阅读 · 0 评论 -
HashMap的工作原理请介绍下?是线程安全的么?[中高]
一 底层的数据结构HashMap底层是用的哈希表,哈希表是由数组+链表组成。思考:哈希表有什么优势呢?数组数组存储区间是连续的,占用内存严重,故空间复杂度很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。哈希表那么我们...原创 2018-11-22 23:10:19 · 570 阅读 · 0 评论 -
什么是线程局部变量和原理?[中高]
一 ThreadLocal概述ThreadLocal,顾名思义,它不是一个线程,而是线程的一个本地化对象。当工作于多线程中的对象使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程分配一个独立的变量副本。所以每一个线程都可以独立地改变自己的副本,而不会影响其他线程所对应的副本。从线程的角度看,这个变量就像是线程的本地变量,这也是类名中“Local”所要表达的意思。...原创 2018-11-24 19:49:16 · 2677 阅读 · 0 评论 -
简述synchronized和Lock的区别?[中高]
区别:1)Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现;2)synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock在发生异常时,如果没有主动通过unLock()去释放锁,则很可能造成死锁现象,因此使用Lock时需要在finally块中释放锁;3)Lock可以让等待锁的线程响应中断,而s...原创 2018-11-24 19:47:10 · 2532 阅读 · 0 评论 -
启动一个线程Thread是用run()还是start()?
启动一个线程是调用start()方法,使线程就绪状态,以后可以被jvm调度为运行状态,一个线程必须关联一些具体的执行代码,run()方法是该线程所关联的执行代码。实现并启动线程有两种方法:1、写一个类继承自Thread类,重写run方法。用start方法启动线程2、写一个类实现Runnable接口,实现run方法。用new Thread(Runnable target).start()方法来...原创 2018-11-24 19:45:23 · 8551 阅读 · 0 评论 -
线程的join方法的作用是什么?
等待该线程终止。相当于等待该线程执行完,才去继续执行,和同步顺序执行差不多。为什么需要join方法?举个例子,现在有 A, B, C 三件事情,只有做完 A 和 B 才能去做 C,而 A 和 B 可以并行完成。参考代码: JoinThreadTest/** * 存在两个线程:主线程和线程t Join,这里所说的调用方就是主线程,主线程调用线程t的Join方法,导致主线程阻塞, ...原创 2018-11-24 19:43:40 · 4940 阅读 · 1 评论 -
sleep() 和 wait() 有什么区别?
1、这两个方法来自不同的类分别是Thread和Object,sleep方法属于Thread类中的静态方法,wait属于Object的成员方法。2、最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。3、wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用(使用范围)。sleep方法属于...原创 2018-11-24 19:42:28 · 8377 阅读 · 0 评论 -
线程的生命周期介绍下?
一 操作系统中线程和进程的概念现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于某个进程,进程中的多个线程共享进...原创 2018-11-24 19:40:16 · 204 阅读 · 0 评论 -
创建线程有几种不同的方式?用过那种方式?
java创建线程的三种方式:继承Thread类创建线程类通过Runable接口创建线程类通过Callable和FutureTask创建线程总结下:实现Runnable和实现Callable接口的方式基本相同,不过是后者执行call()方法有返回值。1、如果需要访问当前线程,必须调用Thread.currentThread()方法。2、继承Thread类的线程类不能再继承其他父类(...原创 2018-11-24 19:36:56 · 8162 阅读 · 0 评论 -
说说你对GC理解,什么是GC?
GC(GarbageCollection)是垃圾回收机制(垃圾回收器),GC是JVM对内存(实际上就是对象)进行管理的方式。Java是由C++发展来的。它摈弃了C++中一些繁琐容易出错的东西。其中有一条就是这个GC。写C/C++程序,程序员定义了一个变量,就是在内存中开辟了一段相应的空间来存值。内存再大也是有限的,所以当程序不再需要使用某个变量的时候,就需要释放这个内存空间资源,好让别的变量来...原创 2018-11-22 23:13:42 · 9542 阅读 · 0 评论 -
集合框架中的泛型介绍下?[中高]
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。在Java集合类框架中泛型被广泛应用。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。思考: 假定我们有这样一个需求:写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,该如何实现?当然是可以使用 Jav...原创 2018-11-22 23:12:32 · 186 阅读 · 0 评论 -
Collection和Collections有什么区别?
1、java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。List,Set,Queue接口都继承Collection。直接实现该接口的类只有AbstractCollection类,该类也只是一个抽象类,提供了对...原创 2018-11-19 11:42:01 · 14734 阅读 · 0 评论 -
介绍下java的异常框架
Throwable Throwable是 Java 语言中所有错误或异常的超类。 Throwable包含两个子类: Error 和 Exception。它们通常用于指示发生了异常情况。 Throwable包含了其线程创建时线程执行堆栈的快照,它提供了printStackTrace()等接口用于获取堆栈跟踪数据等信息。Exception Exception及其子类是 Th...原创 2018-11-19 11:09:47 · 909 阅读 · 0 评论 -
Java异常机制用到的几个关键字:try、catch、finally、 throw、throws,都有什么作用?
• try – 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。• catch – 用于捕获异常。catch用来捕获try语句块中发生的异常。• finally – finally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有finally块,执行完成之后...原创 2018-11-19 11:06:57 · 5235 阅读 · 1 评论 -
请简要叙述下Java中修饰符的作用域及可见性?
public:修饰的成员可以在任何范围内直接访问,只是一种最宽松的访问控制等级。需要注意的,所谓的直接访问仍需要先创建或获得一个相应类的对象然后才可以使用”对象名.成员“的方式访问其属性或调用其方法,但是出于信息封装和隐藏的需要一般不提倡把成员声明为public的,而构造方法和需要外界直接调用的普通方法则适合声明为public.protected:修饰的成员可以在其所在类中、同一包中及子类中(无...原创 2018-11-16 15:20:06 · 575 阅读 · 0 评论 -
内部类了解么?简单介绍下[中高]
一定义:放在一个类的内部类我们就叫内部类。二作用1.内部类可以很好的实现隐藏一般的非内部类,是不允许有 private 与 protected 权限的,但内部类可以2.内部类拥有外部类的所有元素的访问权限3. 可以实现多重继承(重点说下这个)三 分类1.静态内部类:作为类的静态成员,存在于某个类的内部。 (java.util.Collections,ConcurrentHashMa...原创 2018-11-16 15:00:08 · 304 阅读 · 0 评论 -
接口和抽象类有什么区别?
接口和抽象类都是继承树的上层,他们的共同点如下:1)都是上层的抽象层。2)都不能被实例化3)都能包含抽象的方法,这些抽象的方法用于描述类具备的功能。区别如下:1)在抽象类中可以写非抽象的方法,从而避免在子类中重复书写他们,这样可以提高代码的复用性,这是抽象类的优势;接口中只能有抽象的方法(jdk8以后也可以有实现方法)。2)一个类只能继承一个直接父类,这个父类可以是具体的类也可是抽象类...原创 2018-11-16 14:46:28 · 125 阅读 · 0 评论 -
java类支持多继承么?可以实现多个接口么?
java 不支持多继承,但类可以实现多个接口,间接的实现多继承,也可以通过内部类。参考代码:MultiExtendsTest// 测试间接的实现多继承public class MultiExtendsTest extends D implements A, B, C { @Override public void work() { // TODO Auto-generated me...原创 2018-11-16 14:41:42 · 12634 阅读 · 1 评论 -
ArrayList中的元素如何删除?
强烈推荐使用Iterator,不会出错。参考代码:ArrayListRemove// 测试ArrayList删除元素public class ArrayListRemove { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String&...原创 2018-11-20 16:48:31 · 2989 阅读 · 0 评论 -
ArrayList和LinkedList有何区别?
ArrayList是实现了基于动态数组的数据结构,而LinkedList是基于链表的数据结构;(结合源码看)对于随机访问get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针;对于添加和删除操作add和remove,一般大家都会说LinkedList要比ArrayList快,因为ArrayList要移动数据。...原创 2018-11-20 16:47:57 · 176 阅读 · 0 评论 -
详解:面向对象的三大特性
1.1 封装 封装就是把同一类事物的属性和方法归到同一类中,方便使用。 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。 要访问该类的代码和数据,必须通过严格的方法控制。 封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。 适当的封装可以让程序更容易理解与维护,也加强了程序的安全性。封装的优点 1. 良好的封装能够减少...原创 2018-09-04 10:59:17 · 1657 阅读 · 0 评论 -
理解:重载和重写有什么区别
重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。重载(Overload) 重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。 每个重载的方法(或者构造函数)...原创 2018-09-04 11:08:06 · 692 阅读 · 0 评论 -
Java HelloWorld实现及Java运行原理介绍
首先我们新建一个后缀是java的HelloWorld文件;然后编写HelloWorld代码;(代码暂时不需要全部理解,后面会详细讲到)上代码:public class HelloWorld{ public static void main(String args[]){ System.out.println("Java大爷,你好!"); }}这...原创 2018-08-25 11:05:43 · 2784 阅读 · 0 评论 -
"=="和equals方法有什么区别?
equals()和“==”操作用于对象的比较,检查俩对象的相等性,但是他们俩的主要区别在于前者是方法,后者是操作符。总结:1 一般使用比较原生类型如:boolean、int、char等等,使用equals()比较对象。2 如果两个引用指向相同的对象返回true,equals()的返回结果依赖于具体业务实现,一般重写equals方法时,同样重写hashcode方法,默认的equals方法实现是...原创 2018-11-16 15:25:30 · 1259 阅读 · 1 评论 -
一个static方法内可以调用非static方法吗?
不可以。因为非 static 方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而 static 方法调用时不需要创建对象,可以直接调用。也就是说,当一个 static 方法被调用时,可能还没有创建任何实例对象,如果从一个 static 方法中发出对非 static 方法的调用,那个非 static 方法关联到那个对象上的呢?这个逻辑无法成立,所以,一个 stati...原创 2018-11-16 15:38:10 · 9581 阅读 · 0 评论 -
静态变量和实例变量的区别?
1)在语法定义上的区别:静态变量前要加 static 关键字,而实例变量(成员变量)前则不加。2)在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,只分配一次,静态变量就可以被使用了。总之,实例变...原创 2018-11-16 15:58:47 · 11042 阅读 · 0 评论 -
说一下工作中遇到过哪些异常?
Java.lang.NullPointerException 空指针异常java.lang.ClassNotFoundException 指定的类不存在java.lang.ArrayIndexOutOfBoundsException 数组下标越界java.lang.IllegalArgumentException 方法的参数错误java.lang.IllegalAccessExc...原创 2018-11-19 11:05:29 · 588 阅读 · 0 评论 -
final, finally, finalize有什么区别?
1、finalFinal是最终的意思,标示不能被改变,可以用于成员变量(包括方法参数),方法、类。修饰变量,变量一旦被初始化便不可改变。修饰方法,方法不能被覆盖。修饰类,类不能被继承。2、finally异常处理关键字,finally中的主体总会执行,不管异常发生是否。3、finalize类的Finalize方法,可以告诉垃圾回收器应该执行的操作,该方法从Object类继承而来。在从...原创 2018-11-19 11:04:23 · 989 阅读 · 0 评论 -
当try、catch中有return时,finally中的代码会执行么?
总结:1、不管有没有异常,finally中的代码都会执行2、当try、catch中有return时,finally中的代码依然会继续执行3、finally是在return后面的表达式运算之后执行的,此时并没有返回运算之后的值,而是把值保存起来,不管finally对该值做任何的改变,返回的值都不会改变,依然返回保存起来的值。也就是说方法的返回值是在finally运算之前就确定了的。4、如果r...原创 2018-11-19 11:02:38 · 27758 阅读 · 3 评论 -
反射中,Class.forName和classloader的区别?[中高]
相同点:java中class.forName()和classLoader都可用来对类进行加载。不同点:class.forName()除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块。而classLoader只干一件事情,就是将.class文件加载到jvm中,不会执行static中的内容,只有在newInstance才会去执行static块。Clas...原创 2018-11-19 11:00:24 · 379 阅读 · 0 评论