1.什么是java虚拟机?为什么Java被称作是“平台无关的编程语言”?
它是可以执行java字节码的虚拟机进程; 因为java源文件经编译后生成的是jvm可执行的字节码文件!
2“static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?
static是静态的意思,当它修饰变量就是类变量,修饰方法时就是类方法,它随着类的加载而加载.
无法覆盖static修饰的方法,因为被修饰的父类方法在子类中是不可见的!
static的方法是编译时的静态绑定,而覆盖是运行时的动态绑定,所以不能被覆盖!
3.是否可以在static环境中访问非static变量?
不可以!,当jvm载入的时候,会先对static变量进行初始化,如果尝试去访问其他非static变量,编译器会报错,因为那些变量还没有被创建出来!
4.Java支持的数据类型有哪些?什么是自动拆装箱?
整数类型:byte,short,long,int 小数类型:float,double 字符类型:char 布尔类型:boolean
int a= 1;
Integer b = Integer.valueOf(a); //自动装箱
int c =b.intValue(); //自动拆箱
5.Overload(重载)和Override(重写)的区别。Overloaded的方法是否可以改变返回值的类型?
他们都是java多态的一种表现,重载是一个类中的一种多态表现,而重写是父类和子类之间多态的一种表现.
如果子类定义的某个方法和父类的方法名及参数相同,我们称该方法被重写,如果调用子类的方法,那么它会屏蔽父类的方法去执行子类所重写的方法.
如果在一个类中,有相同的方法名但是有不同的参数列表,我们称之为重载.参数列表中:(参数个数, 参数顺序, 参数类型)! 有一个不同就是方法重载.
当然重载是可以改变返回值的类型
6.Java支持多继承么?
java不支持多继承,每个类只能继承一个类,但是可以实现多个接口!
7.接口和抽象类的区别是什么?
①:当一个类实现某个接口必须实现接口的所有方法,而一个类可以不实现抽象类的所有接口,前提是这个类是抽象类.
②:类可以实现多个接口,而只能继承一个抽象类!
③接口中所有隐含的方法都是抽象的,而抽象类则可以同时包含抽象方法和非抽象的方法
④java接口中声明的变量默认都是final,抽象类可以包含非final的变量
⑤抽象类可以在不提供接口方法实现的情况下实现接口.
⑥java接口中成员函数默认是public,抽象类的成员函数可以使private,protected或者是public.
⑦接口可以使抽象化的,不可以被实例化,抽象类也不可以实例化,但它包含main方法的话是可以被调用的.
8.什么是值传递和引用传递?
当方法参数传递基本数据类型时,是值传递,传递的是个副本,就算改变副本也不会改变源值.
如果是引用类型就是引用传递,会在堆空间生成一个堆地址,传递的是引用的地址,外部引用对象所做的改变会反映到所有对象.
9.创建线程有几种不同的方式?你喜欢哪一种?为什么?
基础Thread类 实现Runable接口
推荐实现Runable接口,因为有可能某个类已经继承了别的类,那么就不能基础Thread类,java不支持多继承,可以实现多个接口.
10.同步方法和同步代码块的区别是什么?
在java中每个对象都有一把锁,线程可以使用synchronized关键字来获取对象上的锁。放在代码块上叫同步代码块,放在方法上叫同步方法.
因为同步代码块(细粒度锁)的作用域比同步方法(粗粒度锁)小,相比较之下推荐用同步代码块!
11.什么是死锁(deadlock)?
两个进程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁。结果就是两个进程都陷入了无限的等待中。
12.如何确保N个线程可以访问N个资源同时又不导致死锁?
使用多线程的时候:指定获取锁的顺序,并强制线程按照指定的顺序获取锁。因此,如果所有的线程都是以同样的顺序加锁和释放锁,就不会出现死锁了。