Java基础知识《Java程序员面试笔试宝典》--基本概念

一、(p48)为什么需要public static void main(String[] args)这个方法?

    1、JVM加载类之后,可以直接运行

    2、public 和 static修饰符是必须的,但是顺序可以不确定,另外还可以用synchronized、 final来修饰main方法,但是注意不能用abstract修饰。

    3、同一个.java文件中可以包含多个main函数,但是只有名称与文件名相同的类中所包含的main函数才是入口。


二、如何实现在main()执行之前,打印“hello world”

    由于静态代码块会在类加载的时候被调用,所以可以这样实现:

public class Test{
    static{
        System.out.println("Hello world!");
    }
    public static void main(String[] args){
        System.out.println("main 函数执行");
    }
}


三、(p50)Java程序初始化的顺序是怎么样的

    Java实例化对象的时候,成员变量初始化完成之后,才会调用构造函数;

    三个原则:静态变量优先于非静态变量;父类优先于子类;其他成员变量按照定义的顺序进行初始化。

    执行顺序:父静态变量->父静态代码块->子静态变量->子静态代码块->父非静态变量->父非静态代码块->父构造函数->子非静态变量->子非静态代码块->子构造函数。


四、有关修饰符的总结

    default和protected:前者表示同包可见,后者表示同包或者子类可见。protected修饰的变量可访问性更高。

    用以修饰类的修饰符只有:public、abstract、final。protected以及private不能修饰类。


五、(p53)一个.java文件中如何定义多个类

    一个.java文件中可以写多个类,但是只有一个类可以用public修饰(或者没有public)并且该类的名称需要与文件名相同。其他类可以就此视作包类作用的类。


六、构造函数的注意事项

    1、构造函数总是伴随着new操作被调用;

    2、构造函数不可以被继承,因此亦不能被覆盖,但是可以被重载;

    3、当父类没有提供无参构造函数的时候,子类的构造函数中需要显示的调用父类的构造函数,并且需要首先调用;

    4、普通方法可以和构造函数同名。


七、java中的标志接口

    1、接口中的成员作用域修饰符都是public;

    2、接口中可以定义一些常量值,其修饰符默认为public static final,接口中的方法只能用public、abstract修饰(final、static、protected不能用);

    3、那些不包含任何方法的接口被称作标志接口,如Cloneable、Serializable;

    4、通常用instanceof来判断一个对象是否实现了一个标志接口。

    5、接口中的方法与抽象类中的抽象方法类似(实际就是抽象方法),都只能用public、abstract修饰。


八、(p60)Java中的clone方法

    1、clone的一般步骤(类中不包含对象):

class Obj implement Cloneable{//继承接口
...
    public Object clone(){//重写方法
        Object o = null;
        try{
            o = (Obj)super.clone();
        }catch(CloneNotSupportedException){
            e.printStackTrace();
        }
        return o;
    }
}

    2、类中包含对象,就需要进行深复制

class Obj implement Cloneable{//继承接口
    private Date birth = new Date();//包含对象
...
    public Object clone(){//重写方法
        Object o = null;
        try{
            o = (Obj)super.clone();
        }catch(CloneNotSupportedException){
            e.printStackTrace();
        }
        o.birth = (Date)this.getBirth().clone();//对每一个对象attr执行o.attr = (T)this.getAttr().clone();
        return o;
    }
}

    3、浅复制与深复制:前者仅仅考虑所复制对象的本身,而不复制它所引用的对象。


九、(p61)反射机制相关要点

    1、反射的主要功能:得到对象所属的类(Class)、获取类的成员变量和方法、运行时创建对象、运行时调用对象的方法。

    2、3种方法获取到Class类:

        1) Class.forName("...");

        2) 类名称.Class;

        3) 对象.getClass();

    3、Java中创建对象的4种方法:用过new语句实例化对象、通过反射创建对象、通过clone、通过反序列化。

Class c = Class.forName("Sub");
Base b = (Base) c.newInstance();
b.method();




你可能感兴趣的:(Java基础知识)