zoukankan      html  css  js  c++  java
  • java 面试题

    1.run start

     public static void main(String args[]) {
    
            Thread t = new Thread() {
    
                public void run() {
                    pong();
                }
            };
    
            t.run();
            System.out.print("ping");
    
        }
    
        static void pong() {
    
            System.out.print("pong");
    
        }
    复制代码

    A pingpong        B pongping       C pingpong和pongping都有可能       D 都不输出

    答案:B

    解析:这里考的是Thread类中start()和run()方法的区别了。start()用来启动一个线程,当调用start方法后,系统才会开启一个新的线程,进而调用run()方法来执行任务,而单独的调用run()就跟调用普通方法是一样的,已经失去线程的特性了。因此在启动一个线程的时候一定要使用start()而不是run()。

    2.

    . 下面哪个流类属于面向字符的输入流(  )

    A  BufferedWriter           B  FileInputStream          C  ObjectInputStream          D  InputStreamReader

     答案:D

     解析:Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式。
    面向字节的操作为以8位为单位对二进制的数据进行操作,对数据不进行转换,这些类都是InputStream和OutputStream的子类。
    面向字符的操作为以字符为单位对数据进行操作,在读的时候将二进制数据转为字符,在写的时候将字符转为二进制数据,这些类都是Reader和Writer的子类。

    总结:以InputStream(输入)/OutputStream(输出)为后缀的是字节流;

              以Reader(输入)/Writer(输出)为后缀的是字符流。

    扩展:Java流类图结构,一目了然,解决大部分选择题:

    3.不通过构造函数也能创建对象吗()

    A 是     B 否

    答案:A

    解析:Java创建对象的几种方式(重要):

    (1) 用new语句创建对象,这是最常见的创建对象的方法。
    (2) 运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。
    (3) 调用对象的clone()方法。
    (4) 运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。

    (1)和(2)都会明确的显式的调用构造函数 ;(3)是在内存上对已有对象的影印,所以不会调用构造函数 ;(4)是从文件中还原类的对象,也不会调用构造函数。

    4.

    17. 下面哪些是对称加密算法()

    A DES   B AES   C DSA   D RSA

    答案:AB

    解析:常用的对称加密算法有:DES、3DES、RC2、RC4、AES

    常用的非对称加密算法有:RSA、DSA、ECC

    使用单向散列函数的加密算法:MD5、SHA

    5.

    class HelloA {
    
        public HelloA() {
            System.out.println("HelloA");
        }
        
        { System.out.println("I'm A class"); }
        
        static { System.out.println("static A"); }
    
    }
    
    public class HelloB extends HelloA {
        public HelloB() {
            System.out.println("HelloB");
        }
        
        { System.out.println("I'm B class"); }
        
        static { System.out.println("static B"); }
        
        public static void main(String[] args) { 
         new HelloB(); 
       }
    
    }
    复制代码

    答案:

    static A
    static B
    I'm A class
    HelloA
    I'm B class
    HelloB

    解析:说实话我觉得这题很好,考查静态语句块、构造语句块(就是只有大括号的那块)以及构造函数的执行顺序。

    对象的初始化顺序:(1)类加载之后,按从上到下(从父类到子类)执行被static修饰的语句;(2)当static语句执行完之后,再执行main方法;(3)如果有语句new了自身的对象,将从上到下执行构造代码块、构造器(两者可以说绑定在一起)。

    下面稍微修改下上面的代码,以便更清晰的说明情况:

    复制代码
    class HelloA {
    
        public HelloA() {
            System.out.println("HelloA");
        }
        
        { System.out.println("I'm A class"); }
        
        static { System.out.println("static A"); }
    
    }
    
    public class HelloB extends HelloA {
        public HelloB() {
            System.out.println("HelloB");
        }
        
        { System.out.println("I'm B class"); }
        
        static { System.out.println("static B"); }
        
        public static void main(String[] args) {
    
            System.out.println("-------main start-------");
            new HelloB();
            new HelloB();
            System.out.println("-------main end-------");
        }
    }
    复制代码

    此时输出结果为:

    复制代码
    static A
    static B
    -------main start-------
    I'm A class
    HelloA
    I'm B class
    HelloB
    I'm A class
    HelloA
    I'm B class
    HelloB
    -------main end-------
  • 相关阅读:
    完数
    自定义的allocator
    成绩的处理
    R语言-线性回归(1)
    R语言-朴素贝叶斯分类器(1)
    R语言控制流
    leetcode Two sum
    数据库环境搭建
    表单验证制作注册页面
    表单验证
  • 原文地址:https://www.cnblogs.com/yelongsan/p/6289721.html
Copyright © 2011-2022 走看看