1. JDK、JRE、JVM的区别
jdk Java开发工具包
jre Java运行环境
jvm Java虚拟机
2.环境变量的解释
目的: 在任意路径下都可以执行相关命令
原理: 要执行命令,先在当前目录下查找,如果没有就去环境变量里PATH挨个查找。
3.Java的访问修饰符
public > protected > (default) > private
4.Java关键字有哪些
package,class,public,interface,instanceof,abstract等
特点:都是小写,在编译器中是蓝色
5.Java的基本数据类型?
short、int、double、float、long、byte、char,boolean
这8个基本数据类型每个对应一个包装类
6.类,方法,常量,包名的命名规则
1.不能以数字开头
2.不能使用保留字
3.大小写敏感
4.类名建议首字母大写,如果有多个单词可以用_或者让第二个单词首字母大写
5.方法名首字母小写多个单词第二个单词首字母大写
6.包名用小写
7.常量名:全部大写,多个单词之间使用下划线连接
7.static 可修饰什么? static 修饰的 跟非static修饰的区别?
- static可以修饰属性,方法,代码块
- static随着类加载而加载
- static归类所用,非static归实例所有
8.final可以修饰什么?
- 类、变量、方法
- final修饰的类不能继承
- final修饰的方法不能重写
- final修饰的变量只能被赋值一次
9.为什么String 是 final 的 ?
- 从安全角度讲,使用final修饰可以保证共享变量安全性,就是禁止修改共享对象
- 从性能角度讲,使用final修饰字符串不可变,字符串池才可能实现。字符串池可以节约很多堆空间,因为不同的字符串变量都指向池中的同一个字符串。
10.String 和 StringBuffer,StringBuilder 的区别是什么?
- 安全角度:String > StringBuffer > StringBuilder
- String被final修饰不可变,线程安全
- StringBuffer对方法加了同步锁,线程安全
- StringBuilder没有对方法加同步锁,线程不安全
- 速度角度:StringBulider > StringBufffer > String
- 可变性: String被final修饰不可变,StringBuffer和StringBuilder都可变
- 性能角度:对String对象改变时都会生成一个新的String对象,然后指针指向新的对象。 StringBuffer每次操作的都是对象本身。StringBuilder相比较StringBuffer会更快一些,因为StringBuffer加了同步的关键字性能有所下降。
11.==和equals的区别
- ==在比较对象时它比较的是对象的地址值,看是否是同一个对象。比较基本数据类型或者他们的包装类对象时比较的是他们的值。
- equals在没有被重写时比较的是地址值,重写equals后比较的是值
12.自动拆箱、装箱介绍?
自动拆装箱就是基本数据类型与他的包装类间相互转换
自动装箱: Integer num = 1;
手动装箱:Integer num = new Integer(1);
自动拆箱:int num2 = num;
手动拆箱:int num2 = num.intValue();
13.值传递 和 引用传递
- 值传递就是将变量的值传给方法,方法执行结束后变量值不变
- 引用传递就是将变量的地址传给方法,方法执行过程中会对变量进行改变。
14.重载重写的区别
- 重载:重载发生在一个类中,同名不同参,其他(修饰符和返回类型)都无关
- 重写:重写发生在父子类中,方法和参数列表必须相同,返回值类型小于等于父类(父类返回A类,子类不能返回Object类),抛出异常小于等于父类,访问修饰符大于等于父类。
15.JVM中类加载的过程
java 类加载过程包括:加载–>验证–>准备–>解析–>初始化
16.介绍下反射
-
反射是指在运行状态中,可以获取任意一个类或对象的所有信息(类中声明的方法、属性、构造器)以及动态调用对象中方法。 -
反射的作用:可以增加程序的灵活性,避免将代码写死; ? 反射可以让程序进行自我检查自身信息。
17.接口和抽象类的区别
-
相同点:都不能被实例化,都可以定义抽象方法 -
不同点 ? 接口使用interface声明,抽象类使用abstract class 声明,一个类可以实现多个接口,但只能继承一个抽象类 ? 接口中不能声明构造器,抽象类中可以声明构造器(用于被子类调用) ? 抽象类中可以有带方法体的默认方法的。
18.介绍一些异常
异常顶级父类:Throwable它下面分为Error和Exception
编译期异常:写代码时编译器爆红
运行期异常:编译期不爆红,运行时出现非正常情况导致JVM停止
Throwable:
? |–Error: 重大的问题,我们处理不了。也不需要编写代码处理。比如说内存溢出。
? |–Exception: 一般性的错误,是需要我们编写代码进行处理的。
? |–RuntimeException: 运行时异常,这个我们也不需要处理。
? 其实就是为了让他在运行时出问题,然后我们回来修改代码。
? |-- NullPointerException 空指针异常,最常遇到
? |-- ArrayIndexOutOfBoundsException 下标越界异常
? |-- IndexOutOfBoundsException 索引越界异常。当访问某个序列的索引值小于0或大于等于序列大小时,抛出该异常。
? |-- SQLException sql异常 非常熟悉的错误信息就是Unknown column xxx ,这种错误的话,就是列名错了,还有就是 You have an error in your SQL syntax,check xxxx near xxx ,这个错误就是sql语法错误,异常信息会指出来错误的具体地方
? |-检查异常/编译异常 : 对于检查的异常必须处理,可以采用捕获或抛出式解决
? |-- ClassNotFoundException 类找不到异常
? |-- FileNotFound 文件找不到异常,在文件操作的时候,一不小心路径写错了,或者是windows切换linux的时候,因为路径格式不一致,经常会有这个错误
? |–ParseException 解析异常,一般当日期字符串解析时与指定格式不一致就是出现这个问题
19.Java中的异常处理
? 一共有三种: 抛出式,捕获式,声明式
-
throw 在指定方法中抛出指定异常
例 if(a==b){
? throw new ClassNotFoundExecption();
}
2.throws
? 自己解决不了往上抛
public static void get() throws Exception{
}
- try…catch常用不多赘述
|