每日java笔试五小题-2020-9-16
/…/中可以嵌套//注释,也能嵌套/…/注释。
正确答案: B 你的答案: B (正确)
正确
错误
内部类(也叫成员内部类)可以有4种访问权限。( )
正确答案: A 你的答案: B (错误)
正确
错误
解析:
你就把内部类理解成类的成员,成员有4种访问权限吧,内部类也是!分别为private、protected、public以及默认的访问权限
- 内部类中不能定义静态成员
- 内部类可以直接访问外部类中的成员变量,
- 内部类可以定义在外部类的方法外面,也可以定义在外部类的方法体中
- 在方法体外面定义的内部类的访问类型可以是public,protecte,默认的,private等4种类型,- 创建内部类的实例对象时,一定要先创建外部类的实例对象,然后用这个外部类的实例对象去创建内部类的实例对象
- 方法内部定义的内部类前面不能有访问类型修饰符,就好像方法中定义的局部变量一样,但这种内部类的前面可以使用final或abstract修饰符。这种内部类对其他类是不可见的,其他类无法引用这种内部类,但是这种内部类创建的实例对象可以传递给其他类访问。
- 在方法外部定义的内部类前面可以加上static关键字,从而成为Static Nested Class,它不再具有内部类的特性,所有,从狭义上讲,它不是内部类
以下代码执行的结果显示是多少( )?
public class Demo {
class Super {
int flag = 1;
Super() {
test();
}
void test() {
System.out.println("Super.test() flag=" + flag);
}
}
class Sub extends Super {
Sub(int i) {
flag = i;
System.out.println("Sub.Sub()flag=" + flag);
}
void test() {
System.out.println("Sub.test()flag=" + flag);
}
}
public static void main(String[] args) {
new Demo().new Sub(5);
}
}
正确答案: A 你的答案: C (错误)
Sub.test() flag=1
Sub.Sub() flag=5
Sub.Sub() flag=5
Sub.test() flag=5
Sub.test() flag=0
Sub.Sub() flag=5
Super.test() flag=1
Sub.Sub() flag=5
解析:
在继承中代码的执行顺序为:
1.父类静态对象,父类静态代码块
2.子类静态对象,子类静态代码块
3.父类非静态对象,父类非静态代码块
4.父类构造函数
5.子类非静态对象,子类非静态代码块
6.子类构造函数
对于本题来说:在只想new Sub(5)的时候,父类先初始化了 int flag = 1,然后执行父类的构造函数Super(),父类构造函数中执行的test()方法,因子类是重写了test()方法的,因此父类构造函数中的test()方法实际执行的是子类的test()方法,所以输出为Sub.test() flag=1,接着执行子类构造函数Sub(5) 将flag赋值为5,因此输出结果Sub.Sub() flag=5。最终选择了A。
由上一题,我展开,想到了上次写的一个类似的题目:
package com.lbl.bstTest;
public class Base {
private String baseName = "base";
public Base() {
callName();
}
public void callName() {
System.out.println(baseName);
}
static class Sub extends Base {
private String baseName = "sub";
public void callName() {
System.out.println(baseName);
}
}
public static void main(String[] args) {
Base b = new Sub();
}
}
运行结果:
为什么叫?
看上去和上面一个题差不多,经过我一翻研究,发现,问题出在private
//下面一题定义baseName是private私有的,所以子类无法继承,所以得到结果是null
private String baseName = "base";
//上面定义是的default类型,所以子类可以使用,所以结果是1
int flag = 1;
下列哪个选项是正确计算42度(角度)的余弦值?
正确答案: C 你的答案: D (错误)
double d=Math.cos(42)
double d=Math.cosine(42)
double d=Math.cos(Math.toRadians(42))
double d=Math.cos(Math.toDegrees(42))
解析:
计算余弦值使用Math类的cos()方法
因为Math.cos中的参数的单位是弧度
- toRadians()是将角度转换为弧度
- toDegrees()是将弧度转换为角度
CMS垃圾回收器在那些阶段是没有用户线程参与的
正确答案: A C 你的答案: A (错误)
初始标记
并发标记
重新标记
并发清理
解析:
**用户线程(user-level threads)**指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。
CMS的GC过程有6个阶段(4个并发,2个暂停其它应用程序)
1. 初次标记(STW initial mark)
2. 并发标记(Concurrent marking)
3. 并发可中断预清理(Concurrent precleaning)
4. 最终重新标记(STW remark)
5. 并发清理(Concurrent sweeping)
6. 并发重置(Concurrent reset)
在初次标记,重新标志的时候,要求我们暂停其它应用程序,那么这两个阶段用户线程是不会参与的