Java 程序员经典面试题集大全 (六)
垃圾回收前执行的方法
(6)protected native Object clone() throws java.lang.CloneNotSupportedException
克隆
(7)public final void wait() throws java.lang.InterruptedException
多线程中等待功能
(8)public final native void notify()
多线程中唤醒功能
(9)public final native void notifyAll()
多线程中唤醒所有等待线程的功能
28、private/默认/protected/public 权限修饰符的区别
<table border="1" cellpadding="1" cellspacing="1" style="width:600px;"><tbody><tr><td style="text-align:center;"></td><td style="text-align:center;"><strong>同一个类</strong></td><td style="text-align:center;"><strong>同一个包</strong></td><td style="text-align:center;"><strong>子类</strong></td><td style="text-align:center;"><strong>所有类</strong></td></tr><tr><td style="text-align:center;"><strong>private</strong></td><td style="text-align:center;">?</td><td style="text-align:center;"></td><td style="text-align:center;"></td><td style="text-align:center;"></td></tr><tr><td style="text-align:center;"><strong>defailt</strong></td><td style="text-align:center;">?</td><td style="text-align:center;">?</td><td style="text-align:center;"></td><td style="text-align:center;"></td></tr><tr><td style="text-align:center;"><strong>protected</strong></td><td style="text-align:center;">?</td><td style
="text-align:center;">?</td><td style="text-align:center;">?</td><td style="text-align:center;"></td></tr><tr><td style="text-align:center;"><strong>public</strong></td><td style="text-align:center;">?</td><td style="text-align:center;">?</td><td style="text-align:center;">?</td><td style="text-align:center;">?</td></tr></tbody></table>
类的访问权限只有两种
public 公共的:可被同一项目中所有的类访问。 (必须与文件名同名)
**default 默认的:**可被同一个包中的类访问。
成员(成员变量或成员方法)访问权限共有四种:
**public?公共的:**可以被项目中所有的类访问。(项目可见性)
**protected?受保护的:**可以被这个类本身访问;同一个包中的所有其他的类访问;被它的子类(同一个包以及不同包中的子类)访问。(子类可见性)
**default?默认的:**被这个类本身访问;被同一个包中的类访问。(包可见性)
**private?私有的:**只能被这个类本身访问。(类可见性)
29、继承条件下构造方法的执行过程
继承条件下构造方法的调用规则如下:
**情况 1:**如果子类的构造方法中没有通过 super 显式调用父类的有参构造方法,也没有通过 this 显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。在这种情况下,写不写“super();”语句,效果是一样的。
**情况 2:**如果子类的构造方法中通过 super 显式调用父类的有参构造方法,那将执行父类相应构造方法,而不执行父类无参构造方法。
**情况 3:**如果子类的构造方法中通过 this 显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则。
**特别注意的是,**如果存在多级继承关系,在创建一个子类对象时,以上规则会多次向更高一级父类应用,一直到执行顶级父类 Object 类的无参构造方法为止。
30、==和 equals 的区别和联系
“==”是关系运算符,equals()是方法,同时他们的结果都返回布尔值;
“==”使用情况如下:
a) 基本类型,比较的是值
b) 引用类型,比较的是地址
c) 不能比较没有父子关系的两个对象
equals()方法使用如下:
a) 系统类一般已经覆盖了 equals(),比较的是内容。
b) 用户自定义类如果没有覆盖 equals(),将调用父类的 equals (比如是 Object),而 Object 的 equals 的比较是地址(return (this == obj);)
c) 用户自定义类需要覆盖父类的 equals()
注意:Object 的==和 equals 比较的都是地址,作用相同。
Java 基础不扎实的同学,再好好学一下哦~
评论