java基础部分-《第二部分》

来源:互联网 发布:起点数据查询 编辑:程序博客网 时间:2024/03/28 20:36

二、第二小部分

 

1、请说出作用域publicprivateprotected,以及不写时的区别

这四个作用域的可见范围如下表所示。

说明:如果在修饰的元素上面没有写任何访问修饰符,则表示friendly

作用域  当前类  同一package     子孙类  其他package

public                                

protected                             ×

friendly                       ×       ×

private            ×            ×       ×

 

2OverloadOverride的区别。

Overload是重载的意思,Override是覆盖的意思,也就是重写。

重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。

重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现子类覆盖父类的方法时,只能比父类抛出更少的异常子类方法的访问权限只能比父类的更大,不能更小

 

3.ClassLoader如何加载class 

jvm里有多个类加载,每个类加载可以负责加载特定位置的类,例如,

bootstrap类加载负责加载jre/lib/rt.jar中的类, 我们平时用的jdk中的类都位于rt.jar中。

extclassloader负责加载jar/lib/ext

    publicstatic void main(String[] args) {

           //TODO Auto-generated method stub

           System.out.println(newTest().test());;

    }

 

    staticint test()

    {

           intx = 1;

           try

           {

                  returnx;

           }

           finally

           {

                  ++x;

           }

    }

   

}

 

---------执行结果 ---------

1

 

运行结果是1,为什么呢?主函数调用子函数并得到结果的过程,好比主函数准备一个空罐子,当子函数要返回结果时,先把结果放在罐子里,然后再将程序逻辑返回到主函数。所谓返回,就是子函数说,我不运行了,你主函数继续运行吧,这没什么结果可言,结果是在说这话之前放进罐子里的。

 

32、下面的程序代码输出的结果是多少?

publicclass  smallT

{

    publicstatic void  main(Stringargs[])

    {

           smallTt  =new  smallT();

           int    t.get();

           System.out.println(b);

    }

   

    publicint  get()

    {

           try

           {

                  return1 ;

           }

           finally

           {

                  return2 ;

           }

    }

}

 

返回的结果是2

我可以通过下面一个例子程序来帮助我解释这个答案,从下面例子的运行结果中可以发现,try中的return语句调用的函数先于finally中调用的函数执行,也就是说return语句先执行,finally语句后执行,所以,返回的结果是2Return并不是让函数马上返回,而是return语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行finally语句后才真正开始返回。

在讲解答案时可以用下面的程序来帮助分析:

public  class Test{

 

    

    publicstatic void main(String[] args) {

           //TODO Auto-generated method stub

           System.out.println(newTest().test());;

    }

 

    inttest()

    {

           try

           {

                  returnfunc1();

           }

           finally

           {

                  returnfunc2();

           }

    }

   

    intfunc1()

    {

           System.out.println("func1");

           return1;

    }

    intfunc2()

    {

           System.out.println("func2");

           return2;

       

}

-----------执行结果-----------------

 

func1

func2

2

 

结论:finally中的代码比return break语句后执行

 

33final, finally, finalize的区别。

final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

finally是异常处理语句结构的一部分,表示总是执行。

finalizeObject类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用

原创粉丝点击