1.JDK,JRE,JVM三者关系
- 、jdk是JAVA程序开发时用的开发工具包,其内部也有JRE运行环境JRE。
- 、JRE是JAVA程序运行时需要的运行环境,就是说如果你光是运行JAVA程序而不是去搞开发的话,只安装JRE就 能运行已经存在的JAVA程序了。
- 、JDk、JRE内部都包含JAVA虚拟机JVM,JAVA虚拟机内部包含许多应用程序的类的解释器和类加载器等等。
2.面向过程和面向对象的区别
a.、两者都是软件开发思想,先有面向过程,后有面向对象。在大型项目中,针对面向过程的不足推出了面向对象开发思想。 b.、编程思路不同:面向过程以实现功能的函数开发为主,而面向对象要首先抽象出类、属性及其方法,然后通过实例化类、 执行方法来完成功能。
c.、封装性:都具有封装性,但是面向过程是封装的是功能,而面向对象封装的是数据和功能。面向对象具有继承性和多态性, 而面向过程没有继承性和多态 性,所以面向对象优势是明显。
3.Java有哪些基本数据类型
定义:Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间。
a.、数值型:整数类型(byte,short,int,long)
b、浮点类型(float,double) c、字符型(char)
d、布尔型(boolean)
4.Java 有没有 goto
goto 是 Java 中的保留字,在目前版本的 Java 中没有使用。
5.final 有什么用?
用于修饰类、属性和方法;
a、被final修饰的类不可以被继承
b、被final修饰的方法不可以被重写
c、被final修饰的变量不可以被改变,被final修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变 的
6.final finally finalize区别
a、final可以修饰类、变量、方法,修饰类表示该类不能被继承、修饰方法表示该方法不能被重写、修饰变量表示该变量是一个 常量不能被重新赋值。
b、finally一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码方法finally代码块中,表示不管是 否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。
c、finalize是一个方法,属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾回收器来调用,当我们调 用System.gc() 方法的时候,由垃圾回收器调用finalize(),回收垃圾,一个对象是否可回收的最后判断。
7.面向对象三大特性
a、封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。
b、继承:继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的 功能,但不能选择性地继承父类。通过使用继承可以提高代码复用性。继承是多态的前提。
c、所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序 运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必 须在由程序运行期间才能决定。
8.== 和 equals 的区别是什么
== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。(基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址)
equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。
情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来两个对象的内容相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。
9.String 类的常用方法都有那些?
a、indexOf():返回指定字符的索引。b、charAt():返回指定索引处的字符。 c、replace():字符串替换。
d、trim():去除字符串两端空白。
e、split():分割字符串,返回一个分割后的字符串数组。 f、getBytes():返回字符串的 byte 类型数组。
g、length():返回字符串长度。
h、toLowerCase():将字符串转成小写字母。 i、toUpperCase():将字符串转成大写字符。g、substring():截取字符串。
k、equals():字符串比较。
10.String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的
a、可变性:String类中使用字符数组保存字符串,private final char value[],所以string对象是不可变的。StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串, char[] value,这两种对象都是可变的。
b、线程安全性:String中的对象是不可变的,也就可以理解为常量,线程安全。AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder并没有对方法进行加同步 锁,所以是非线程安全的。
c、性能:每次对String 类型进行改变的时候,都会生成一个新的String对象,然后将指针指向新的String 对象。StringBuffer 每次都会对StringBuffer对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用StirngBuilder 相比使用
StringBuffer 仅能获得10%~15% 左右的性能提升,但却要冒多线程不安全的风险。
对于三者使用的总结:如果要操作少量的数据用 = String,单线程操作字符串缓冲区 下操作大量数据 = StringBuilder,多线程操作字符串缓冲区 下操作大量数据 = StringBuffer