一、成员变量与局部变量的区别
1、在类中位置不同:
成员变量:在类中方法外定义。
局部变量:在方法声明上或在方法定义中。
2、在内存中位置不同:
成员变量:堆内存。
局部变量:栈内存。
3、生存周期不同:
成员变量:随着类的加载而加载,随着类的消失而消失。
局部变量:随着方法调用而存在,随着方法调用完毕而消失。
4、初始化值不同:
成员变量:由系统默认初始化。对于成员变量,可以不给初始化值,由系统给,然后显示初始化。
局部变量:局部变量在使用之前必须初始化,否则无法使用。
二、有一个学生类Student,里面有一些属性,在测试类中创建学生类对象,经历了那些过程?
Student s=new Student();
1、通过测试类里面main主程序进行加载,加载Student类(Student.class);
2、Student s先在栈内存开辟栈内存空间,创建一个学生对象,需要在堆内存申请堆内存空间;
3、通过无参构造方法给学生类对象进行默认初始化;
4、通过给成员变量赋值的方式,给对象进行显示初始化;
5、显示初始化完毕,整个对象创建完毕之后,给对象进行内存空间地址值分配;
6、通过地址值找到对应对象。
三、如果catch里面有return 语句,finally中的代码还会执行,是在return语句之前执行还是return后执行?
finally中代码一定会执行,是在return前执行。
四、throws和throw的区别?
throws:表示抛出异常,后跟的异常类名,并且可以多个异常类名中间逗号隔开,在方法上抛出,由调用者处理,表示抛出异常的可能性。
throw:表示抛出异常,抛出的是一个异常对象,在语句体中抛出的,由语句体进行处理,表示抛出异常的肯定性。
五、final、finally、finalize三者区别?
final:可修饰类,该类不能被继承;修饰变量,该变量为常量;修饰成员方法,给成员方法不能被重写。
finally:释放资源。
finalize:与垃圾回收器有关的方法。gc(),运行垃圾回收器,实际是调用finalize()方法。
六、字节缓冲流的构造方法为什么不能直接传递路径/文件?
解:缓冲流只是在底层内部提供一个缓冲区的数组,底层实现文件的复制/读取/写入这些操作都依赖于基本流对象。
七、flush和close方法的区别:
(1)close关闭该流,关闭该流对象以及和它关联的资源文件,关闭之后,不能再对流对象进行操作了,否则会有异常。
(2)flush刷新该流,为了防止一些文件(图片文件/音频文件)缺失或者没有加载到流对象中。刷新了该流,还是可以流对象进行操作。
八、JVM是多线程程序吗?至少有几条线程?
解:JVM,Java虚拟机,识别main(主线程)。 jvm是多线程的,至少有2条线程。
九、如何实现多线程程序?
解:A、方法一:要实现多线程程序,需要开启进程,开启进程,需要创建系统资源,但是Java语言不能创建系统资源,只有C/C++可以创建系统资源, 利用c语言创建好的系统资源实现。
B、方法二:a、自定义一个类,实现Runnable接口;b、实现接口中的run方法,对耗时的代码进行操作;c、然后在主线程中创建该了对象,将该类对象做为一个资源类,创建Threadd类的对象,将刚才的资源类作为参数进行传递。
十、stop()与interrupt()区别:
stop():强迫线程停止执行,程序不会再执行了(此方法已过时,但仍可使用)。
interrupt():中断线程,表示中断线程的一种状态。
十一、wait()与sleep()区别:
wait():wait()调用时,立即释放锁 (同步锁/Lock锁)。
sleep():线程睡眠,调用时不会释放锁。