每日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();
    }
}

运行结果:

内部类无法实例化吗 java java内部类说法错误的是_java

为什么叫?

看上去和上面一个题差不多,经过我一翻研究,发现,问题出在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)

在初次标记,重新标志的时候,要求我们暂停其它应用程序,那么这两个阶段用户线程是不会参与的