Java面试题一

什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
Java虚拟机是一个可以执行Java字节码的虚拟机进程
Java虚拟机知道底层硬件平台的指令长度和其他特性
JDK和JRE的区别是什么?
JDK( Java Development Kit ) Java的开发工具--编译器、调试器、其他工具
JRE( Java Runtime Environment )     Java运行时环境,包含虚拟机
”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?
通过static解决两点情形:
1、只想为某特定域分配单一的存储空间,而不去考虑创建了多少对象,甚至不创建任何对象
2、希望某个方法不会与包含他的类的任何对象关联再一起,即就算没有创建对象也可以调用这个方法

是否可以在static环境中访问非static变量?
使用static方法前不需要创建任何对象,所以不可以在static环境中访问非static方法或者变量

方法(对应于运行时数据区中的Java虚拟机栈中的栈祯)的覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的
private方法、变量类私有,其他类继承当前类不可访问到private方法或者变量
Java支持的数据类型有哪些?什么是自动拆装箱?
byte
short
int
long
float
double
boolean
char
自动装箱:
I nteger a=3; => Integer a=Integer.valueOf(3);
发生在赋值时: Integer i = 10;   // 装箱   int t = i;       运算时: Integer i = 10 ; System.out.println(i++);
自动拆箱:
int i =   new Integer(2); -> int i = new Integer(2).intValue();
// 在-128~127 之外的数 Integer i1 =200 ; Integer i2 =200 ; System.out.println("i1==i2: "+(i1== i2));   //   在-128~127 之内的数 Integer i3 =100 ; Integer i4 =100 ; System.out.println("i3==i4: "+(i3==i4));输出的结果 i1==i2:   false   i3==i4:   true

说明 : 
public   static Integer valueOf( int   i) {   if(i >= -128 &;&; i <= IntegerCache.high)   //   没有设置的话,IngegerCache.high 默认是127   return IntegerCache.cache[i + 128 ];   else   return   new   Integer(i);}
对于 –128到127(默认是127)之间的值 ,Integer.valueOf(int i) 返回的 是缓存的 Integer对象(并不是新建对象)
所以范例中,i3 与 i4实际上是指向同一个对象。
其他值 ,执行Integer.valueOf(int i)   返回的是一个新建的 Integer对象 ,所以范例中,i1与i2 指向的是不同的对象

自动装箱是基本数据类型向对应是对象类型转换,反之就是自动拆箱
自动装箱和拆箱是由编译器来完成的,编译器会在编译期根据语法决定是否进行装箱和拆箱动作
Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
覆盖的另一种说法是重写,即参数列表,返回值函数名必须全部一样,发生在子类重新定义父类方法
重载:参数不同,方法名相同(与返回值类型无关),发生在同一个类中
Java中,什么是构造方法?什么是构造方法重载?什么是复制构造方法?
构造方法:对象被创建的时候调用的方法
构造方法重载:参数不同的构造方法
Java不支持像c++中的拷贝构造函数
什么是值传递和引用传递?
值传递是对基本数据类型而言,改变的是副本,不改变原值
引用传递对于对象而言,传递的是该对象的地址的一个副本,并不是源对象本身
进程和线程的区别是什么?
进程是一个程序在其自身的地址空间中的一次执行活动。进程是资源申请、调度和独立运行的单位,
线程:进程中的一个单一的连续控制流程。一个进程可以拥有多个线程。线程又称轻量级进程
区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单
系统会为每个线程分配一个时间片
java运行时系统实现了一个用于调度线程执行的线程调度器,用于确定某一时刻由哪个线程在CPU上运行
在java中,线程通常是抢占式, 但其本身不支持相同优先级线程的时间片轮换
创建线程有几种不同的方式?你喜欢哪一种?为什么?
继承Thread类
实现Runnable接口
应用程序可以使用Executor框架来创建线程池
还有一种方式是实现Callable接口
同步方法和同步代码块的区别是什么?
同步方法默认用this或者当前类class对象作为锁;
同步代码块可以选择用任何对象作为锁
在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?
监视器和锁在 Java 虚拟机中是一块使用的。
监视器监视一块同步代码块,确保一次只有一个线程执行同步代码块。
每一个监视器都和一个对象引用相关联。线程在获取锁之前不允许执行同步代码。
什么是迭代器(Iterator)?
Iterator 接口提供了很多对集合元素进行迭代的方法。每一个集合类都包含了可以返回迭代器实例的 迭代方法。迭代器可以在迭代的过程中删除底层集合的元素。

猜你喜欢

转载自blog.csdn.net/aj1101/article/details/79420935
今日推荐