Java面试题及解析

2021/6/1 12:24:11

本文主要是介绍Java面试题及解析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

  • 面试题
  • 解析
    • 1
    • 2
    • 3
      • Join
      • Sleep-线程睡眠
      • Yiedld-线程让步
      • sleep与yield方法区别
      • isAlive
      • 终止线程


面试题

1.下列单词属于java访问修饰符的有(A,B, C
A.public
B.private
C.friendly
D.transient
E.String
2.下列命令中,属于java命令的是(A,B , C
A.javac
B.java
C.Javadoc
D.Jar
E.Dir
3.下列方法哪一个属于Thread类(B
A.main()
B.sleep(long mesc)
C.go()
D.finally()


解析:

1:

Java的访问修饰符有:

Public 可以从所有类继续进行访问
Protected 可以被同包中的类访问,可以被子类进行访问,子类不在同包也可访问。
Private 只能够被当前类进行访问
Friendly 可以被同包中的所有类访问,若子类不在同包,则无法访问。

Java的修饰符有:

Static 静态方法,无需创建类的实例就可使用。
Final 防止任何子类重载该方法,可以同static一起使用,避免对类的每个实例维护一个拷贝. 可以来修饰变量(包括类属性、对象属性、局部变量和形参)、方法(包括类方法和对象方法)和类。
Abstract 抽象类或方法。 抽象方法:类中已声明而没有实现的方法,不能将static方法、final方法或者类的构造器方法声明为abstract。
Native 方法修饰符,Native方法是由另外一种语言(如c/c++,FORTRAN,汇编)实现的本地方法。因为在外部实现了方法,所以在java代码中,就不需要声明了,有点类似于接口方法。Native可以和其他一些修饰符连用,但是abstract方法和Interface方法不能用native来修饰。
Synchronized 多线程的支持,当一个此方法被调用时,没有其它线程能够调用该方法,其它的synchronized方法也不能调用该方法,直到该方法返回。

2:

Java
Javac.exe 编译Java程序,生成.class文件。 Javadoc 功能说明JavaAPI文档生成器从Java源文件生成API文档HTML页。Javadoc解析Java源文件中的声明和文档注释,并产生相应的HTML页缺省),描述公有类、保护类、内部类、接口、构造函数、方法和域。在实现时,Javadoc要求且依赖于java编译器完成其工作。Javadoc调用部分
javac 编译声明部分,忽略成员实现。它建立类的内容丰富的内部表示,包括类层次和”使用”关系,然后从中生成HTML。Javadoc还从源代码的文
档注释中获得用户提供的文档。当Javadoc建立其内部文档结构时,它将加载所有引用的类。
Javaw 用来执行图形界面的java程序运行java命令时,会出现并保持一个console窗口,程序中的信息可以通过System.out在console内输出,而运行javaw,开始时会出现console,当主程序调用之后,console就会消失; javaw 大多用来运行GUI程序 Javah C 头文件和 Stub 文件生成器。
javah 从 Java 类生成 C 头文件和C 源文件。这些文件提供了连接胶合,使 Java 和 C 代码可进行交互。 Javap Java 类文件解析器。

3:

Java线程:Thread类的方法 常用方法:

static Thread currentThread() 返回对当前正在执行的线程对象的引用。
long getId()返回该线程的标识符。
String getName()返回该线程的名称。
int getPriority() 返回线程的优先级。
void interrupt() 中断线程。
boolean isAlive()测试线程是否处于活动状态。
void join()等待该线程终止。
void join(long millis)等待该线程终止的时间最长为 millis 毫秒。
void join(long millis, int
nanos)等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒。
void setDaemon(boolean on)将该线程标记为守护线程或用户线程。
void setPriority(int newPriority)更改线程的优先级。
static void sleep(long millis)在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。
static void sleep(long millis, int nanos)在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。
void start() 使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
static void yield()暂停当前正在执行的线程对象,并执行其他线程。

其中:

Join:

当某个程序执行流中调用其他线程的join()方法时,调用线程将被阻塞,直到被join()方法加入的join线程执行完为止。
这里写图片描述

Sleep-线程睡眠

如果需要让当前正在执行的线程暂停一段时间,并进入阻塞状态,则可以通过调用Thread类的静态sleep()方法来实现。

当当前线程调用sleep()方法进入阻塞状态后,在其睡眠时间内,该线程不会获得执行机会,即使系统中没有其他可执行线程,处于sleep()中的线程也不会执行,因此sleep()方法常用来暂停程序的执行。

Yiedld-线程让步

yield()方法和sleep()方法有点相似,它也是Thread类提供的一个静态方法,它也可以让当前正在执行的线程暂停,但它不会阻塞该线程,它只是将该线程转入到就绪状态。即让当前线程暂停一下,让系统的线程调度器重新调度一次,完全可能的情况是:当某个线程调用了yield()方法暂停之后,线程调度器又将其调度出来重新执行。

实际上,当某个线程调用了yield()方法之后,只有优先级与当前线程相同或者比当前线程更高的处于就绪状态的线程才会获得执行机会。

sleep()与yield()方法区别:

1、sleep()方法暂停当前线程后,会给其他线程执行机会,不会理会其他线程的优先级;但yield()方法只会给优先级高或者相同的线程机会

2、sleep()方法会将线程转入到阻塞状态,知道经过阻塞时间才会转入就绪状态;而yield()不会将线程转入阻塞状态,它只是强制当前线程进入就绪状态。因此完全有可能某个线程调用了yield()方法暂停之后,立即再次获取处理器资源被执行。

3、sleep()方法声明抛出InterruptedException异常,所以嗲用sleep()方法时要么捕捉该异常,要么显示声明抛出该异常;而yield()方法则没有声明抛出任何异常。

4、sleep()方法比yield()方法更好的可移植性,通常不建议使用yield()方法来控制并发线程执行。

isAlive

判断线程是否处于活动状态。

线程的优先级:

线程的优先级用数字表示,范围从1到10,默认的是为5 。

终止线程:

有三种方法可以使终止线程。

  1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。
  2. 使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。
  3. 使用interrupt方法中断线程。


这篇关于Java面试题及解析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程