ArrayList LinkedList Vector
1.ArrayList:底层用数组实现的List
特点:查询效率高,增删效率低 轻量级 线程不安全
2.LinkedList:底层用双向循环链表 实现的List
特点:查询效率低,增删效率高
3.Vector: 底层用数组实现List接口的另一个类
特点:重量级,占据更多的系统开销 线程安全
Hashtable和HashMap不同之处。
1.hashMap去掉了HashTable 的contains方法,但是加上了containsValue()和containsKey()方法。
2.hashTable同步的,而HashMap是非同步的,效率上比hashTable要高。
3.hashMap允许空键值,而hashTable不允许。
String StringBuffer StringBuilder
1.String 字符串常量,是不可变类,任何对String的改变都会引发新的String对象的生成
2.StringBuffer 线程安全的可变字符序列。一个类似于 String 的字符串缓冲区
3.StringBuilder 字符串变量(非线程安全)
sleep和wait的区别
1.这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。
2.sleep方法没有释放锁,不出让系统资源,而wait方法释放了锁,出让系统资源,使得其他线程可以使用同步控制块或者方法。
3.wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用.
4.sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
final,finally,finalize的区别
1.final—修饰符(关键字)
final可以修饰类,这样的类不能被继承。
final可以修饰方法,这样的方法不能被重写。
final可以修饰变量,这样的变量的值不能被修改,是常量。
2.finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
3.finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
抽象类和接口
接口是特殊的抽象类,以下三个方面比较
1.属性:抽象类可以有普通成员变量,接口不行;
2.方法:抽象类有非抽象的方法和构造方法,并且修饰符可以是私有的,接口只能是抽象的方法,并且修饰符是public
3.关系:只能继承一个抽象类,但能实现多个接口。
equals和==的区别
==比较的是2个对象的地址,而equals比较的是2个对象的内容。
值类型是存储在内存中的栈,而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
堆和栈
1.堆是存放对象的,但是对象内的临时变量是存在栈内存中
2.栈是跟随线程的,有线程就有栈,堆是跟随JVM 的,有JVM 就有堆内存。
类变量和实例变量
1.静态变量是类变量,非静态变量是实例变量
2.静态变量存在方法区中,实例变量存在堆内存中。
OutOfMemoryError:java heap size”和”OutOfMemoryError: PermGenspace”
1.“heap size” 是说申请不到新的内存了,这个很常见,检查应用或调整堆内存大小。
2.“PermGen space”是因为永久存储区满了,这个也很常见,一般在热发布的环境中出现,是因为每次发布应用系统都不重启,久而久之永久存储区中的死对象太多导致新对象无法申请内存,一般重新启动一下即可。
&和&&
&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式.
&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作.
Error和Exception
Error:表示由JVM所侦测到的无法预期的错误,由于这是属于JVM层次的严重错误,导致JVM无法继续执行,因此,这是不可捕捉到的,无法采取任何恢复的操作,顶多只能显示错误信息。
Exception:表示可恢复的例外,这是可捕捉到的。
Java提供了两类主要的异常:runtime exception和checked exception。
运行时异常与一般异常
异常表示程序运行过程中可能出现的非正常状态.
运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java 编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
局部变量和成员变量
成员变量:作为类的成员而存在,直接存在于类中。
局部变量:作为方法或语句块的成员而存在,存在于方法的参数列表和方法定义中。
1.成员变量可以被public,protect,private,static等修饰符修饰,而局部变量不能被控制修饰符及static修饰;两者都可以定义成final型
2.成员变量存储在堆,局部变量存储在栈
3.存在时间不同
4.成员变量有默认值
静态变量与实例变量,
成员变量又分成俩中类型:实例变量和静态变量。
1.语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
2.程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
字节流和字符流
1.字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。
2.字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;
3.字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。
4.字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节, 操作字节和字节数组。
5.如果是 音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点.
6. InputStream是所有字节输入流的祖先,OutputStream是所有字节输出流的祖先
7. Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。
应用服务器和web server
应用服务器处理业务逻辑,web服务器是用于处理HTML文件的。应用服务器通常会包含web服务器。
应用服务器:Weblogic、Tomcat、Jboss
WEB SERVER:IIS、 Apache
Overload 和Override 的区别。
方法的重写Overriding 和重载Overloading 是Java 多态性的不同表现。
重写Overriding 是父类与子类之间多态性的一种表现,重载Overloading 是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded 的方法是可以改变返回值的类型。
Comparator或Comparable
一个类实现了Comparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。要实现compareTo方法。
Comparator要实现compare方法,可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:
1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
2、可以使用多种排序标准,比如升序、降序等。
相关推荐
这意味着Java Application可以作为一个独立的桌面应用程序存在,适用于创建各种复杂的应用场景,如企业级软件、游戏、办公软件等。 2. **Java Applet**:Java Applet的运行依赖于宿主环境,通常是网页内的一个组成...
Java 集合类别详解 Java 是一种基于对象的编程语言,它提供了多种集合类别来存储和操作数据。集合类别是 Java 编程语言的核心部分,它们提供了强大的数据存储和操作功能。今天,我们将深入了解 Java 中的集合类别,...
### C++和Java多态的区别 #### 一、概述 多态是面向对象编程语言中的一个核心特性,它允许程序员能够使用基类的指针或引用指向派生类的对象,并在运行时根据对象的实际类型来选择合适的方法进行调用。这一特性增强...
综上所述,`java.io.Reader`和`java.io.InputStream`之间的主要区别在于它们处理数据的方式。`Reader`专注于字符数据,尤其是Unicode编码的文本,而`InputStream`则更加通用,处理包括二进制数据在内的各种字节数据...
JavaCV 是一款开源的视觉处理库,基于GPLv2协议,对各种常用计算机视觉库封装后的一组jar包,封装了OpenCV、libdc1394、OpenKinect、videoInput和ARToolKitPlus等计算机视觉编程人员常用库的接口。 JavaCV通过其中的...
2. **Java集合框架**:面试中会频繁涉及ArrayList、LinkedList、HashSet、HashMap等集合类的使用,以及它们之间的区别和应用场景。例如,了解ArrayList和LinkedList在增删查改操作上的性能差异,以及HashMap的工作...
6. **异常处理**:Java的异常处理机制通过try-catch-finally语句块来捕获和处理异常,理解checked和unchecked异常的区别,以及如何有效地使用异常处理提升代码的健壮性。 7. **IO流**:Java的IO流分为字节流和字符...
一旦引入了这两个JAR包,你就可以开始使用JavaCV提供的各种计算机视觉功能。例如,你可以实现图像的加载、显示、处理、保存,也可以进行视频的捕获、播放、编码和解码。JavaCV还支持深度学习框架,如TensorFlow、...
学习Java,首先需要掌握JVM(Java虚拟机)、JRE(Java运行环境)和JDK(Java开发工具包)的区别。JVM是Java程序运行的基础,负责解释和执行字节码;JRE包含了运行Java应用程序所需的所有组件;而JDK则在JRE的基础上...
这份"java各种面试题"的资源集合涵盖了多个方面的Java知识,包括基础语法、面向对象编程、集合框架、多线程、异常处理、IO流、网络编程、JVM内存管理以及Java Web和框架等内容。以下是对这些知识点的详细解析: 1. ...
在Java编程语言中,存在着众多看似相似但实质上有着显著区别的概念,这些概念的深入理解对于编程者来说至关重要。本文将重点解析标题与描述中提及的一些关键知识点,包括final、finally、finalize的区别,以及...
本资源“java试卷各种题型总集”聚焦于Java语言的基础篇,覆盖了从一到十六章的重要概念和知识点,旨在帮助学习者巩固理论知识并提升实践能力。下面我们将详细探讨这些章节可能涉及的主要内容。 一、Java基础知识 1...
Java是世界上最流行的编程语言之一,尤其...通过深入学习和理解这些知识点,Java开发者将能更好地应对各种面试挑战,提升自己的技术实力和竞争力。同时,对于已经在职的开发者来说,这也是一个巩固和更新知识的好机会。
本文件“C语言与Java的区别1共2页.pdf.zip”似乎是一个压缩包,包含了一份关于两者区别的简短资料。尽管无法直接提供压缩包的具体内容,但我们可以深入探讨一下C语言和Java的基本差异,帮助你理解这两个语言的核心...
这份“25本Java高手合集”无疑是Java开发者们的一份宝贵资源,它涵盖了各种底层分析和精华知识点,旨在帮助读者深入理解Java的核心原理,提升编程技能。 在Java的世界里,JDBC(Java Database Connectivity)是连接...
### C++、C#、Java、Python 实现简单图形用户界面(GUI)的区别与方法 #### C++ 在C++中创建图形用户界面(GUI),主要依赖于Microsoft Foundation Classes(MFC)。MFC作为一套用于Windows应用程序开发的类库,...
Java API是Java编程语言的核心组成部分,它包含了各种预定义的类和接口,为开发者提供了丰富的功能,使得开发者能够构建复杂的软件系统。Java API_5.0中文版是Sun Microsystems(后被Oracle收购)官方发布的文档,是...
使用 System.getProperty() 函数可以获取当前路径,该函数可以获取 Java 运行时环境的各种属性,其中包括当前路径。下面是一个示例代码: ```java System.out.println(System.getProperty("user.dir")); ``` 这段...
### Java基础知识概述 #### 1. 前言 Java是一种广泛使用的面向对象的编程语言,因其跨...Java是一门功能强大且灵活的编程语言,适用于各种应用场景。掌握这些核心概念和技术将有助于开发者更好地利用Java来解决问题。