java基础测试2

一、简答题(每题3分,共计60分)

  1. 请至少写出五个常用的java命令。
  • javac
  • Java
  • javadoc
  • jar
  • javap //Java class文件分解器,可以反编译,也可以查看
    java 编译器生成的字节码等
  1. package 是关键字吗?并简述它的作用。

    是关键字

    避免命名冲突

  2. Throwable定义的关键字是什么?这个类型的作用是什么?

    定义关键字 class

    是产生所有异常的类

  3. 请简述this关键字的作用
    指代当前类的对象

    区别成员变量和局部变量

    调用类中的其他方法

    调用类中的其他构造器

  4. 那些关键字不能和abstract关键字连用。

    private、static、final

  5. 现在有类A,类A内有一个静态内部类B,类C继承类A,且类C内也有一个
    静态内部类B,那么这样两个静态内部类是否够构成了重写?
    如果是请说明理由,如果不是也请说明理由。

    不是 类就不能存在重写的概念而且内部类的命名空间是外部类,
    也就是说类A的静态内部类类名应该是A B 而 类 C 的 内 部 类 的 类 名 应 该 是 C B而类C的内部类的类名应该是C BCCB

  6. 在子类中能否重写父类构造器,如果能请说明理由;如果不能也请说明理由。

    不能 因为重写的前提是继承 但是构造器并不能被继承。
    super(a) 调用父类有参构造器

  7. 为什么List集合和Set集合可以使用迭代器遍历而Map集合不行。

    因为List和Set继承接口Collection 而接口Collection继承Iterable
    在该接口中定义了获取迭代器的方法,
    但是Map集合并没有继承接口Iterable

  8. 请声明一个静态的最终的泛型方法

    public static final void tt(T t){

    }

  9. 有一个枚举类型Color 能不能写一个SubColor类型去继承枚举类型Color,
    如果能请说明理由,如果不能也请说明理由。

    不能因为枚举类型本质上是一个final修饰的类 所以不能写子类去继承

  10. 请简述泛型擦除的概念。
    List list=new ArrayList<>();
    泛型类型仅存在于编译期间,编译后的字节码和运行时不包含泛型信息,
    所有的泛型类型映射到同一份字节码。
    (创建一个集合,定义泛型,映射的就是集合的字节码)

  11. HashSet集合的特点是不可重复且无序的,这里的无序指的是什么?
    又是如何实现不可重复功能的。
    传入的顺序和取出的顺序不一致
    不可重复的功能是依靠equals方法实现的。

  12. 获取Class对象的方式有几种?分别用于什么场景。

    三种

    1. 类型.class 适用于任何类型的class对象获取
    2. Class.forName()适用于接口和类类型的Class对象的获取,传一个类名或接口名
    3. 对象.getClass() 只适用于类类型
  13. 创建一个线程之后调用run()方法和调用start()方法的区别。

    调用run()方法只是简单的方法调用并不会有新的线程创建,
    是有执行方法调用的线程去执行run()里边的代码。start()方法则是启动一个新的线程。

  14. 什么是精灵线程?setDaemon(true);

    这种线程是用来给前台线程服务的,给前台线程提供一个良好的运行环境,
    地位比较低,JVM是否停止 运行,根本不关心后台线程的运行情况和状态。

  15. 请简述sleep()方法和wait()的区别?

    sleep()方法是Thread类里边的方法

    wait()方法是Object类的方法

    sleep()方法不释放锁,wait()方法会释放锁
    sleep()可以设置睡眠时间,wait()方法可以设置时间,也可以调用notify方法唤醒

  16. 静态方法上加上synchronized关键字修饰是保证线程同步的前提,
    那么这里是以那个对象来当锁的?

    *当前类的Class对象

  17. InputSreamReader属于字节流还是字符流?它的作用是什么?
    转换流,属于字符流,作用是字节流转换成字符流

  18. 简述序列化与反序列化?
    序列化:对象转换为字节
    反序列化,字节重构为对象

  19. 简述TCP和UDP协议的区别?
    Tcp 面向连接,效率稍低,安全性高,三次握手:建立连接,形成传输通道,传输数据
    UDP 面向无连接,效率高,安全性低

二、程序分析题(每题4分,共计40分)

  1. 分析以下代码的运行结果
public enum Color extends Thread{

 public void  run(){
  System.out.println(Thread.currentThread().getName());
 }
 public static void main(String [] args)
 {
  Color c= new Color("java");
  c.run();
 }
 public Color(String name){
  super(name);
 }

}

//编译报错,因为枚举已经继承了java.lang.Enum类
//枚举类默认final修饰,不能被继承
  1. 分析以下代码的运行结果
public static void main(String [] args)
 {
  System.out.println(1&2);
  System.out.println(1|2);
  System.out.println(~2);
  System.out.println(~-2);

 }

//0
//3
//-3

//0001&0010  0
//0001|0010  3


//0000 0010
//1111 1101
//-1
//1111 1100
//1000 0011  -3


//1000 0010
//1111 1101
//+1
//1111 1110
//0000 0001  1




   
  1. 分析以下代码的运行结果
 public static void main(String [] args)
 {
  int a=20;
  
  a=(new Integer(127)==new Integer(127)&&((13>>2)>3|a++==20))==(a>>>2>3)?~a:1^a;
  System.out.println(a);

 }

//0000 0001
//0001 0101				1^a
//0001 0100				相同为0,不同为1;
  
//21
//>>>是无符号右移和>>有符号右移
  1. 分析以下代码的运行结果

     public static void main(String [] args)
     {
      ArrayList<String> list = new ArrayList<>();
      list.add("tom");
      list.add("lily");
      list.add("Maggie");
      list.add("admin");
      list.sort((o1,o2)->o1.length()-o2.length());
      for (int i = 0; i < list.size(); i++) {
       System.out.println(list.get(i));
      }
     }
    //tom
    //lily
    //admin
    //Maggie
    
  2. 分析以下代码的运行结果

     public static void main(String [] args)
     {
      String [] str={"23","abc",null};
      for (int i=0;i<str.length;i++){
       try {
        int j = Integer.parseInt(str[i]);
        System.out.println(j);
    
       }
       catch (NullPointerException e){
        System.out.println("NullPointerException:"+str[i]);
    
       }catch (NumberFormatException e1){
        System.out.println("NumberFormatException:"+str[i]);
       }
      }
     }
    
    
    //23
    //NumberFormatException:abc
    //NumberFormatException:null
    
    
    1. 分析以下代码运行结果
    public static void main(String [] args)
     {
       String s=new String("abc"){};
       String s1=new String("abc"){};
       System.out.println(s==s1);
     }
    
    //编译报错   因为String为final修饰的类,{}为匿名内部类,final修饰的类不能被继承
    
    1. 在以下代码的注释处为下面一行的代码添加合适的注释
     public static void main(String [] args) throws Exception {
            Class<?> class1 = Object.class;
            //注释处
            Constructor<?> constructor = class1.getDeclaredConstructor();
            //注释处
            constructor.newInstance();
            //注释处
            Field[] fields = class1.getDeclaredFields();
            //注释处
            Method[] methods = class1.getDeclaredMethods();
        }
    
      //反射通过对象获得所有构造器,包括私有构造器
      //反射通过构造器创建对象
      //反射通过对象获得所有属性包括私有属性
      //反射通过对象获得所有方法包括私有方法 
    
    
    1. 分析以下代码的运行结果

      public class Color<T>{
      
          public static void main(String [] args)  {
             Color.mathod(new String());
          }
          static  void mathod(T t){
              System.out.println(t.getClass());
          }
      }
      //编译报错   静态方法不能引用类的泛型
      
      //   要引用必须自己声明
      //   可改为  static <T> void mathod(T t){
      
      
  3. java中的方法调用有一种情况称为递归,就是一个方法内部再调用自己,
    同时提供一个退出方法条件即可.有如下代码
    Test.java中:
    main:
    Test t = new Test();
    int sum = t.go(100);
    System.out.println(sum);


    ​ public int go(int i){

    ​ }

    要求:
    1.在go方法内部完成代码
    2.实现从1累加到100的和
    3.go方法内部的所写的代码不能超过俩句,注意一个分号就是一句代码。

         if(i==1) return  i;
    
    ​     return  i+go(i-1);
    
    //go方法里每次都调用go方法 
    
  4. 分析以下代码的运行结果:

package com.briup.test;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

class Father{
    static {
        System.out.println("html");
    }
    void show(){
        System.out.println("css");
    }

    public static void main(String [] args)  {
        Father f= new Son();
        f.method();
        f.show();
    }
    static  void method( ){
        System.out.println("oracle");
    }
}
class Son extends  Father{
    static  void method( ){
        System.out.println("java");
    }
    {
        System.out.println("xml");
    }
    Son(){
        System.out.println("Jquery");
    }
    void show(){
        System.out.println("js");
    }
}

//html
//xml
//Jquery
//oracle		静态的不能重写,能继承 
//js			重写了show方法


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值