1.Java中是如何区分重载方法的?

通过重载方法的参数类型和顺序来进行区分的。

注意:若参数类型和顺序均相同时,不管参数名是否相同,编译器均会报错,提示方法已经被定义。且不能根据返回值类型来区分,如果根据返回值来区分的话,有时程序里调用方法时并不需要返回值,那么程序都无法确定该调用那个重载方法。

2.阅读以下程序,解释其中的错误。

public static void testLong(long i) {

System.out.println("test long");

}

public static void testFloat(float i) {

System.out.println("test float");

}

public static void main(String[] args) {

testLong(50);

testFloat(1.5);

}

testLong没有问题,因为传递的参数50是int型的,而接收方参数是long型的,小范围可以自动转型为大范围的数据类型;testFloat不会通过编译,因为传递的参数1.5是double类型的,而接收方参数是float类型的,大范围转型为小范围数据类型需要显式转换,即改为testFloat(1.5f)。

3.阅读以下程序,解释其中的错误。

public static class A {

A(int i) {

System.out.println("A(int i)");

}

}

public static void main(String[] args) {

A a = new A();

}

在定义了自定义构造器后,若要使用默认构造器,则需要显式指定默认构造器,否则A a = new A();不能编译通过。

4.阅读以下程序,解释其中的错误。

public static class A {

A() {

System.out.println("A()");

}

A(int i) {

System.out.println("A(int i)");

}

A(int i, int j) {

A();

A(i);

System.out.println("A(int i, int j)");

}

}

在一个构造器中调用其它构造器时,需要使用this关键字进行调用,如this();在一个构造器中可调用仅一个其它构造器,并且调用其它构造器的语句需放在调用者(即发出调用行为的构造器)语句块的第一行。

5.阅读以下程序,写出执行结果。

public static class A {

private int i;

private String j;

int getI() {

return i;

}

String getJ() {

return j;

}

A(int i) {

i = i;

}

A(String j) {

this.j = j;

}

}

public static void main(String[] args) {

System.out.println(new A(5).getI());

System.out.println(new A("hello").getJ());

}

执行结果为:

0

hello

对于i = i;这个语句而言,它并未改变实例变量i的值,且i的默认值为0,因此结果也为0,若需要改变实例变量i的值,需要改为this.i = i;

6.在一个类中,声明了若干个static方法和非static方法,请谈谈声明的static方法是否能访问声明的非static方法,说明理由?

static方法不能访问非static方法,因为static方法是属于这个类本身的一个方法,在编译期间就已经确定了;而非static方法是属于这个类的对象的方法,需要在实例化之后才能访问到。若在static方法中访问非static方法,将不能通过编译。

7.static关键字为何不能修饰局部变量?

static关键字修饰的变量或方法是属于类的,在编译时就已经确定了;而普通变量或方法是属于该由类生成的对象,需要在实例化后才能确定。因此,若static关键字修饰了方法的局部变量,一方面方法需要在实例化之后才能确定,另一方面static修饰的变量需要在编译时确定,这就会导致矛盾。

8.finalize()有何用途?什么情况下需要调用这个函数?

在需要释放内存的地方调用finalize(),则在下一轮垃圾回收时会回收占用的内存,一般情况下不需要显式调用此函数。

垃圾回收器只能回收那些由new关键字创建的对象所占用的内存,那么有些不是通过这种方式(比如调用C++本地方法)所占用的内存如何回收呢?那么就需要使用finalize()了。由于C++中需要使用free()函数来释放内存,所以Java程序在调用C++时需要调用finalize()方法来释放内存。

9.列出并简要解释几种常见垃圾回收技术。

引用计数:每个对象都包含了一个引用计数器,每被引用一次,计数器都加1,引用者被置为null或者销毁,计数器就减1。垃圾收集器进行轮询,一旦发现计数器的值小于1,就回收该对象占用的内存。

停止复制:在垃圾回收机制运行时,程序需要停止运行,将每个活动的对象由一个堆转移到另一个堆,留下的垃圾会被回收。

标记清除:从堆栈和静态存储区域开始,寻找到活的对象就对其进行标记,所有的标记过程完成后,就对垃圾进行回收。

9个Java初始化和回收的面试题的更多相关文章

  1. java学习笔记4--对象的初始化与回收

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note4.html,转载请注明源地址. 1.对象初始化和回收 对象初始化 系统在生成对象时,会 ...

  2. 浅析JAVA的垃圾回收机制(GC)

    1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制. 注意:垃圾回 ...

  3. Java初始化过程

    这篇文章主要讲解Java在创建对象的时候,初始化的顺序.主要从以下几个例子中讲解: 继承关系中初始化顺序 初始化块与构造器的顺序 已经加载过的类的初始化顺序 加载父类,会不会加载子类 创建子类对象会不 ...

  4. Java初始化顺序

    package com.helei.init; class Log { public static String fatherStaticString(){System.out.println(&qu ...

  5. JAVA的垃圾回收机制

    1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象:而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾.JVM的 ...

  6. 全面分析Java的垃圾回收机制

    Java的堆是一个运行时数据区,类的实例(对象)从中分配空间.Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通过new.newarray.anewarray和mult ...

  7. (原)Java初始化过程

    先看一个demo,然后进行归纳. class X{ static M m=new M(); Y y=new Y(); public X(){ System.out.print("X" ...

  8. Java初始化生命周期

    package com.init; abstract class Glyph { void draw() { System.out.println("Glyph.draw()"); ...

  9. java初始化构造函数调用顺序

    类初始化时构造函数调用顺序: (1)初始化对象的存储空间为零或null值:  (2)调用父类构造函数:  (3)按顺序分别调用类成员变量和实例成员变量的初始化表达式:  (4)调用本身构造函数. 例子 ...

随机推荐

  1. 最终版-perl工具解析数据库的报告文件0120

    ********************需要根据自己的实际环境修改哦**************************** ******************** 1. 收集awr报告样本   a ...

  2. 多线程 - 线程同步锁(lock、Monitor)

    1. 前言 多线程编程的时候,我们不光希望两个线程间能够实现逻辑上的先后顺序运行,还希望两个不相关的线程在访问同一个资源的时候,同时只能有一个线程对资源进行操作,否则就会出现无法预知的结果. 比如,有 ...

  3. 请教如何实现UITextField值变化的实时监视

    上网搜索以后发现基本的处理方法大概有三种1.KVO方式[textField addObserver:self forKeyPath:@"text" options:0 contex ...

  4. OC - 30.如何封装自定义布局

    概述 对于经常使用的控件或类,通常将其分装为一个单独的类来供外界使用,以此达到事半功倍的效果 由于分装的类不依赖于其他的类,所以若要使用该类,可直接将该类拖进项目文件即可 在进行分装的时候,通常需要用 ...

  5. iOS自动布局之autoresizingi

    对于iOS的app开发者来说,不会像Android开发者一样为很多的屏幕尺寸来做界面适配,因此硬编码的坐标也能工作良好,但是从设计模式上来说这不是好的做法.而且也还有一些问题,如iPhone5的适配, ...

  6. JavaScript Date(日期) 对象

    日期对象用于处理日期和时间. 如何使用 Date() 方法获得当日的日期. getFullYear()使用 getFullYear() 获取年份. getTime()getTime() 返回从 197 ...

  7. 1.dubbo的安装 quickstart

    按照官网给定的指导,执行下面的步骤即可 1.Import the dubbo source code to eclipse project 在eclipse中安装git插件 egit 直接可以从git ...

  8. Visual Studio 2013 在使用 MVC5 无智能提示

    关于 Visual Studio 2013 在使用 MVC5 无智能提示的问题,类库无法正常识别,连最基本的关键字提示都没有了,类变色也没有了,所有的关键字代码,类名,方法成员名都要全部手动敲 原因: ...

  9. jQuery Tools:Web开发必备的 jQuery UI 库

    基本介绍 jQuery Tools 是基于 jQuery 开发的网站界面库,包含网站最常用的Tabs(选项卡).Tooltip(信息提示).Overlay(遮罩.弹窗).Scrollable(滚动控制 ...

  10. Vim及VimScript资料总结《转载》

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   Vim教程 入门 Vim 实用技术 Learning the vi and Vim Editors A Byte of ...