前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java笔试题

Java笔试题

作者头像
chenchenchen
发布2022-11-29 21:01:40
3890
发布2022-11-29 21:01:40
举报
文章被收录于专栏:chenchenchen

推荐合集

https://blog.csdn.net/shakespeare001/article/details/51151650

牛客网

18-05-02

1、对属性使用getter和setter方法,体现的是注入性。

2、构造函数constructor

    A.构造函数可以省略,省略构造函数则new对象实例时,所有的数据类型赋值为0,bool类型赋值为FALSE,引用类型赋值为NULL。

    B.构造函数必须与类同名,而且不能有返回类型。而方法是可以与类同名的,但是必须声明返回数据类型,改变大小写即可。比如

    C. constructor在一个对象被new时执行,当new对象是首先调用静态初始数据块(可省略),然后调用父类构造函数(不是子类则不调用),最后调用自己的构造函数(一定调用),这样才能生成一个对象的实例。

    D. 一个类可以有多个重载的构造函数,重载的要求是参数不同。

3、Java初始化顺序:

代码语言:javascript
复制
class A{
    static {
        System.out.println("父类静态代码块");
    }
    public A(){
        System.out.println("父类构造方法");
    }
    {
        System.out.println("父类初始化块");
    }
}
public class B extends A{
    static{
        System.out.println("子类静态代码块");
    }
    public B(){
        System.out.println("子类构造方法");
    }
    {
        System.out.println("子类初始化块");
    }
    public static void main(String[] args){
        new B();
    }
}

静态块:用static申明,JVM加载类时执行,仅执行一次,且按声明顺序执行, 静态成员初始化-->静态代码块初始化-->静态方法初始化

构造块:类中直接用{}定义,每一次创建对象时执行

顺序:父类静态代码块-->子类静态代码块-->父类普通代码块-->父类构造方法-->子类代码块-->子类构造方法;

类实例销毁:首先销毁子类部分,再销毁父类部分

4、线程中run()和start()的区别

代码语言:javascript
复制
创建一个线程  Thread t1 = new Thread()

t1.run();  只是调用了一个普通方法,并没有启动另一个线程,程序还是会按照顺序执行相应的代码。

t1.start();  则表示,重新开启一个线程,不必等待其他线程运行完,只要得到cup就可以运行该线程。

比如下边的一个例子:

[java] view plain copy
<pre name="code" class="java">public class demo1 {  
    public static void main(String args[]) {    
        Thread t = new Thread() {    
            public void run() {    
                pong();    
            }    
        };    
        t.start();    //pingpong
//        t.run();  //pongping
        System.out.print("ping");    
    }    
    static void pong() {    
        System.out.print("pong");    
    }  
}  

5、父类Super,子类Sub extends Super

static修饰的静态成员被所有的成员所共享,静态方法不支持多态性,用那种类型声明,调用方法时就是哪种类型的方法,eg:父类变量指向子类对象时,父类变量调用的静态方法是其本身的静态方法

加载子类之前先加载父类。

Sub   sub =  new Sub( ); 直接调用子类

Super supsub= new Sub( ); 调用静态方法时则调用申明类型,父类。

Super supsub=   new Super( ); 对于Super supsub=  new Sub( )的访问特点:成员变量是编译看左,运行看左,所以用的是父类的成员变量;成员方法是编译看左,运行看右,运行的是子类的方法;静态方法同成员变量,编译看左运行看左

6、现在有以下语句:

Integer i01 =  59 ; int i02 =  59 ; Integer i03 =Integer.valueOf( 59 ); Integer i04 =  new Integer( 59 )。

Integer i01=59 的时候,会调用 Integer 的 valueOf 方法,

1 2 3 4 5

public static Integer valueOf( int i) {       assert IntegerCache.high>=  127 ;       if (i >= IntegerCache.low&& i <= IntegerCache.high)       return IntegerCache.cache[i+ (-IntegerCache.low)];       return new Integer(i); }

这个方法就是返回一个 Integer 对象,只是在返回之前,看作了一个判断,判断当前 i 的值是否在 [-128,127] 区别,且 IntegerCache 中是否存在此对象,如果存在,则直接返回引用,否则,创建一个新的对象。

在这里的话,因为程序初次运行,没有 59 ,所以,直接创建了一个新的对象。

int i02=59 ,这是一个基本类型,存储在栈中。

Integer i03 =Integer.valueOf(59); 因为 IntegerCache 中已经存在此对象,所以,直接返回引用。

Integer i04 = new Integer(59) ;直接创建一个新的对象。

System. out .println(i01== i02); i01 是 Integer 对象, i02 是 int ,这里比较的不是地址,而是值。 Integer 会自动拆箱成 int ,然后进行值的比较。所以,为真。

System. out .println(i01== i03); 因为 i03 返回的是 i01 的引用,所以,为真。

System. out .println(i03==i04); 因为 i04 是重新创建的对象,所以 i03,i04 是指向不同的对象,因此比较结果为假。

System. out .println(i02== i04); 因为 i02 是基本类型,所以此时 i04 会自动拆箱,进行值比较,所以,结果为真。

7、

SpringMVC的原理:

    SpringMVC是Spring中的模块,它实现了mvc设计模式的web框架,首先用户发出请求,请求到达SpringMVC的前端控制器(DispatcherServlet),前端控制器根据用户的url请求处理器映射器查找匹配该url的handler,并返回一个执行链,前端控制器再请求处理器适配器调用相应的handler进行处理并返回给前端控制器一个modelAndView,前端控制器再请求视图解析器对返回的逻辑视图进行解析,最后前端控制器将返回的视图进行渲染并把数据装入到request域,返回给用户。

DispatcherServlet作为springMVC的前端控制器,负责接收用户的请求并根据用户的请求返回相应的视图给用户。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-05-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档