牛客网做题5.27

(1)Java中没有 +++j这种格式

(2)这题是来论证return和finally语句的先后顺序的,详细看下面的代码和解析

public abstract class Test {

    public static void main(String[] args) {

        System.out.println(beforeFinally());

    }

     

    public static int beforeFinally(){

        int a = 0;

        try{

            a = 1;

            return a;

        }finally{

            a = 2;

        }

    }

}

/**output:

1

*/

从结果上看,貌似`finally` 里的语句是在`return` 之后执行的,其实不然,实际上`finally` 里的语句是在在`return` 之前执行的。那么问题来了,既然是在之前执行,那为什么`a` 的值没有被覆盖了?
实际过程是这样的:当程序执行到try{}语句中的return方法时,它会干这么一件事,将要返回的结果存储到一个临时栈中,然后程序不会立即返回,而是去执行finally{}中的程序, 在执行`a = 2`时,程序仅仅是覆盖了a的值,但不会去更新临时栈中的那个要返回的值 。执行完之后,就会通知主程序“finally的程序执行完毕,可以请求返回了”,这时,就会将临时栈中的值取出来返回。这下应该清楚了,要返回的值是保存至临时栈中的。

再来看一个例子,稍微改下上面的程序:

public abstract class Test {

    public static void main(String[] args) {

        System.out.println(beforeFinally());

    }

     

    public static int beforeFinally(){

        int a = 0;

        try{

            a = 1;

            return a;

        }finally{

            a = 2;

            return a;

        }

    }

}

/**output:

2

*/

在这里,finally{}里也有一个return,那么在执行这个return时,就会更新临时栈中的值。同样,在执行完finally之后,就会通知主程序请求返回了,即将临时栈中的值取出来返回。故返回值是2.

(3)子类重写父类方法时,方法的访问权限不能小于原访问权限,在接口中,方法的默认权限就是public,所以子类重写后只能是public

(4)

1、子类构造函数调用父类构造函数用super

2、子类重写父类方法后,若想调用父类中被重写的方法,用super

3、未被重写的方法可以直接调用。

(5)

ava object默认的基本方法中没有copy(),含有如下方法:
getClass(), hashCode(), equals(), clone(), toString(), notify(), notifyAll(),  wait(), finalize()

(6)

Web service顾名思义是基于web的服务,它是一种跨平台,跨语言的服务。

我们可以这样理解它,比如说我们可以调用互联网上查询天气信息的web服务,把它嵌入到我们的B/S程序中,当用户从我们的网点看到天气信息时,会认为我们为他提供很多的服务,但其实我们什么也没做,只是简单的调用了一下服务器上的一端代码而已。Web service 可以将你的服务发布到互联网上让别人去调用,也可以调用别人发布的web service,和使用自己的代码一样。

它是采用XML传输格式化的数据,它的通信协议是SOAP(简单对象访问协议).

(7)

对于线程局部存储TLS(thread local storage)的理解

同一全局变量或者静态变量每个线程访问的是同一变量,多个线程同时访存同一全局变量或者静态变量时会导致冲突,尤其是多个线程同时需要修改这一变量时,通过TLS机制,为每一个使用该全局变量的线程都提供一个变量值的副本,每一个线程均可以独立地改变自己的副本,而不会和其它线程的副本冲突。

(8)类成员变量在实例方法中能用this去调用,而在静态方法中不能用this去调用

(9)内部类的理解

(10)jre 判断程序是否执行结束的标准是

所有的前台线程执行完毕

解析:

 main()函数即主函数,是一个前台线程,前台进程是程序中必须执行完成的,而后台线程则是java中所有前台结束后结束,不管有没有完成,后台线程主要用与内存分配等方面。                                                                                           
前台线程和后台线程的区别和联系:

1、后台线程不会阻止进程的终止。属于某个进程的所有前台线程都终止后,该进程就会被终止。所有剩余的后台线程都会停止且不会完成。
2、可以在任何时候将前台线程修改为后台线程,方式是设置Thread.IsBackground 属性。
3、不管是前台线程还是后台线程,如果线程内出现了异常,都会导致进程的终止。

4、托管线程池中的线程都是后台线程,使用new Thread方式创建的线程默认都是前台线程。
说明:   

        应用程序的主线程以及使用Thread构造的线程都默认为前台线程                       
    使用Thread建立的线程默认情况下是前台线程,在进程中,只要有一个前台线程未退出,进程就不会终止。主线程就是一个前台线程。而后台线程不管线程是否结束,只要所有的前台线程都退出(包括正常退出和异常退出)后,进程就会自动终止。一般后台线程用于处理时间较短的任务,如在一个Web服务器中可以利用后台线程来处理客户端发过来的请求信息。而前台线程一般用于处理需要长时间等待的任务,如在Web服务器中的监听客户端请求的程序,或是定时对某些系统资源进行扫描的程序

(11)
 

DBMS:数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。
DBMS对数据库的保护通过4个方面来实现:

  1. 数据库的恢复
  2. 数据库的并发控制
  3. 数据库的完整性控制
  4. 数据库安全性控制

DBMS中实现事务持久性的子系统是恢复管理子系统。

猜你喜欢

转载自blog.csdn.net/weixin_41673515/article/details/90601236
今日推荐