Day3.JAVA练习总结——2020.03.06

近日在读书籍《JAVA程序员面试笔试宝典》,顺便记录一下知识点吧。

1.有关Servelt API的问题

原题:基于Servelt API ,如何实现转向时不在地址栏显示
转向后的地址?
A.redirect() B.sendRedirect C.forward() D.transform()
答案:C
sendRedirect ( )是重定向,forward ( )则是请求分派,是服务器的内部转发。
转发地址栏没有变化,重定向地址栏会变化。具体的区别见一下网页:https://zhidao.baidu.com/question/538384198.html

2.JAVA程序的初始化顺序

java实例化对象时,对象所在类的所有成员变量要完成初始化,之后才会调用构造函数创建对象。
(1)初始化遵循的3个原则(优先级依次递减)

  1. 静态对象(变量)优先于非静态对象(变量)初始化,其中,静态变量只能初始化一次,非静态对象变量可以优化多次。
  2. 父类优于子类初始化
  3. 按照成员变量的定义顺序进行初始化。即使变量定义散布在方法定义中,他们依然在任何方法(包括构造函数)被调用之前先初始化。
    (2)代码块的执行顺序
    java程序初始化工作可以在许多不同的代码块中完成,执行顺序如下:
    父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数。
class Base {
    // 1.父类静态代码块
    static {
        System.out.println("Base static block!");
    }
    // 3.父类非静态代码块
    {
        System.out.println("Base block");
    }
    // 4.父类构造器
    public Base() {
        System.out.println("Base constructor!");
    }
}
public class Derived extends Base {

    // 2.子类静态代码块
    static{
        System.out.println("Derived static block!");
    }
    // 5.子类非静态代码块
    {
        System.out.println("Derived block!");
    }
    // 6.子类构造器
    public Derived() {
        System.out.println("Derived constructor!");
    }
    public static void main(String[] args) {
        new Derived();
    }
}

结果是:
Base static block!
Derived static block!
Base block
Base constructor!
Derived block!
Derived constructor!

3.服务器编码

jsp要经过3次编码;
第一阶段:JSPC的jsp编译成.java,根据pageEncoding的设定读取jsp,由指定的编码方案翻译成统一的UTF-8的java源码,如果pageEncoding的设定值错了或者没有设定就出来,这时候就已经是中文乱码
第二阶段:JAVAC的java源码至java byteCode的编译,不论jsp编写时用何种方案,经过这个阶段的编码结果都是UTF-8的encoding的java源码;
JAVAC用utf-8的Encoding读取java源码,编译成utf-8 encoding的二进制码(.class),这是JVM对常数字串在二进制码(java encoding)内表达的规范。
第三阶段:Tomcat(或其的application container)载入和执行阶段二的来的JAVA二进制码,输出的结果,也就是在客户端见到的,这时隐藏在阶段一和阶段二的参数contentType就发挥了作用。
pageEncoding 和contentType的预设都是 ISO8859-1.

面试题

为了让浏览器以UTF-8编码来显示JSP页面,请问下列JSP代码正确的是?
A. <%@ page contentType=
B. <meta http-equiv=
C.把所有输出内容重新编码:new String(content. getBytes())
D.response. setContentType()

答案选D
B选项中meta是html中的元标签;
C里String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示,在此无作用

网上的争议大多是在A和D之间。以下图片里将说明为何是D

在这里插入图片描述
服务器编码
jsp页面编码

4.守护线程(Daemon Thread)

JAVA程序入口就是JVM启动main线程,而main线程又可以启动其他的线程,当所有的线程都运行结束后,JVM退出,进程结束。而有一种线程的目的就是无效循环,例如,一个定时触发任务的线程。所以这类线程没有负责人来结束他们,但是当其他线程结束时,JVM必须退出,因此使用了守护线程。

守护线程是指为其他线程服务的线程,在JVM中,所有的非守护线程都执行完毕后,无论有没有守护线程,JVM都会自动退出。
使用方法
在start前将该线程设为守护线程

Thread t = new MyThread();
t.setDaemon(true);
t.start();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值