1、JVM、JRE和JDK的区别:
JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性。java语言是跨平台,jvm不是跨平台的。
JRE(Java Runtime Environment):java的运行环境,包括jvm+java的核心类库。
JDK(Java Development Kit):java的开发工具,包括jre+开发工具。
2、 环境变量path和classpath的作用:
path:是配置Windows可执行文件的搜索路径,即扩展名为.exe的程序文件所在的目录,用于指定DOS窗口命令的路径。
classpath:是配置class文件所在的目录,用于指定类搜索路径,JVM就是通过它来寻找该类的class类文件的。
3、数据类型
基本数据类型(4类8种):
整数类型:byte、short、int、long
浮点数类型:float、double
字符类型:char
布尔类型:boolean
引用数据类型:
类
接口
数组类型
4、&和&&的区别
&&:会出现短路,如果可以通过第一个表达式判断出整个表达式的结果,则不继续后面表达式的运算;只能操作boolean类型数据;
&:不会出现短路,将整个表达式都运算。既可以操作boolean数据还可以操作数(判断数的二进制两个位,赋值0或1)。
5、java语言的三种技术架构
J2EE:企业版
J2SE:标准版
J2ME:小型版
6、重载
概念:在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。
特点:与返回值类型无关,只看参数列表——参数类型以及参数个数。
好处:方便于阅读,优化了程序设计。
7、构造方法
特点:方法名与类名相同;没有返回类型没有返回值。
作用:构造函数是用于创建对象,并对其进行初始化赋值,对象一建立就自动调用相对应的构造函数。
构造方法的注意事项:
①如果一个自定义类没有构造方法,系统会默认给出一个无参构造方法;
②如果一个自定义类提供了构造方法,那么系统将不再给出无参构造方法(必须手动给出无参构造方法)。
构造方法和成员方法的区别:
①格式区别:构造方法和类名相同,并且没有返回类型,也没有返回值;普通成员方法可以任意起名,必须有返回类型,可以没有返回值。
②作用区别:构造方法用于创建对象,并进行初始化值;普通成员方法是用于完成特定功能的。
③调用区别:构造方法是在创建对象时被调用的,一个对象建立,只调用一次相应构造函数;普通成员方法是由创建好的对象调用,可以调用多次。
8、构造代码块
作用:给对象进行初始化,对象一建立就执行,而且优先于构造函数执行。
构造代码块和构造函数的区别:构造代码块是给所有不同对象的共性进行统一初始化;构造函数是给对应的对象进行初始化。
9、静态代码块、构造代码、构造方法执行顺序
静态代码块--->构造代码块--->构造方法
10、 单例设计模式
①设计模式:解决某类问题行之有效的方法,是一种思想,是规律的总结。
②特点:用来保证某个类在内存中只有一个对象。
③保证唯一性的思想及步骤:
为了避免其他程序建立该类对象,先禁止其他程序建立该类对象,即将构造函数私有化;
为了其他程序访问到该类对象,在本类中创建一个该类私有对象;
为了方便其他程序访问到该类对象,对外提供一个公共访问方式;
比如API中的Runtime类就是单例设计模式。
④单例设计模式的两种方式:
饿汉式:当类加载的时候,就创建对象。
懒汉式:当使用的使用,才去创建对象。
饿汉式和懒汉式的区别:
饿汉式是类一加载进内存就创建好了对象;懒汉式则是类加载进内存的时候,对象还没有存在,只有调用了getInstance()方法时,对象才开始创建。
注:开发常用饿汉式,因为饿汉式简单安全。懒汉式多线程的时候容易发生问题。
最佳单例模式:DCL双检查锁机制(DCL:double checked locking)
public class Singleton {
// volatile保证了uniqueInstance的修改对各个线程的可见性
// 将自身实例化对象设置为一个属性,并用static修饰
private volatile static Singleton uniqueInstance;
// 构造方法私有化
private Singleton() {}
// 静态方法返回该实例
public static Singleton getInstance() {
// 第一次检查instance是否被实例化出来,如果没有进入if块
if (uniqueInstance == null) {
// 某个线程取得了类锁,实例化对象前第二次检查instance是否已经被实例化出来,如果没有,才最终实例出对象
synchronized (Singleton.class) {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}
11、final关键字
最终的意思,可以用于修饰类,方法,变量。
①final修饰的类不能被继承。
②final修饰的方法不能被重写。
③final修饰的变量是一个常量。
final、finally、finalize的区别:
finally:是异常处理里面的关键字。它其中的代码永远被执行。特殊情况:在执行它之前jvm退出。System.exit(0)。
finalize:是Object类中的一个方法。它是于垃圾回收器调用的方式。
12、instanceof关键字
用于判断某个对象是否是某种类型。
使用:对象名 instanceof 子类(实现)名。
13、throws和throw的区别
①有throws的时候可以没有throw;
有throw的时候,如果throw抛的异常是Exception体系,那么必须有throws在方法上声明。②throws用于方法的声明上,其后跟的是异常类名,后面可以跟多个异常类,之间用逗号隔开;
throw用于方法体中,其后跟的是一个异常对象名。