zoukankan      html  css  js  c++  java
  • 牛客网java基础知识

    1.java把表示范围大的数转换为表示范围小的数,需要强制类型转换。

    Java中,数据类型分为基本数据类型(或叫做原生类、内置类型)和引用数据类型。
    原生类型为基本数据类型
    int和布尔值可以相互转换吗???不可以,这里是Java,不是C,boolean不能和其他类型互换

    2.另外,JVM运行程序主要的时间耗费是在创建对象和回收对象上。

    String对String  类型进行改变的时候其实都等同于生成了一个新的  String  对象,然后将指针指向新的  String  对象,而不是StringBuffer;StringBuffer每次结果都会对  StringBuffer  对象本身进行操作,而不是生成新的对象,再改变对象引用。

     String S1 = “This is only a” + “ simple” + “ test” ;
    在编译的时候S1就是常量了可以理解为  String S1 = “This is only a simple test” ; ,不存在运行时对字符串的处理,所以效率最高。
    java中,StringBuilder和StringBuffer的区别,下面说法错误的是?

    正确答案: C   你的答案: C (正确)

    StringBuffer是线程安全的
    StringBuilder是非线程安全的
    StringBuffer对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象。
    效率比较String<StringBuffer<StringBuilder,但是在 String S1 = “This is only a” + “ simple” + “ test”时,String效率最高。

    4.
    HashMap和HashTable的描述,错误的是?

    正确答案: D   你的答案: D (正确)

    他们都实现了Map接口。
    HashMap非线程安全,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供额外同步。
    HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
    通过contains方法可以判断一个对象是否存在于HashMap或者Hashtable中。
    我贴一下关于两者相关的源码供大伙参考一下:
    
    //HashMap的源码
    public class HashMap<K,V>
        extends AbstractMap<K,V>
        implements Map<K,V>, Cloneable, Serializable
    -----------------------------------
    //Hashtable的源码
    public class Hashtable<K,V>
        extends Dictionary<K,V>
        implements Map<K,V>, Cloneable, java.io.Serializable
    ----------------------------------
    很明显,都实现了Map接口,所以,A正确
    ----------------------------------------------------------------------------------------------
    
    public V put(K key, V value) //HashMap的put方法,没有同步
     
    public synchronized V put(K key, V value) //Hashtable的put方法
    //当然,Hashtable的其他方法,如get,size,remove等方法,
    //都加了synchronized关键词同步操作
    ------------------------------------------------------------------------------------------------
    
    //Hashtable的put方法有以下语句块,大伙看了都知道
    // Make sure the value is not null
    if (value == null) {
        throw new NullPointerException();
    }
     
    //那么,我们再来看下HashMap的put方法中,有如下语句
    //调用某个方法直接把key为null,值为value的键值对插入进去。
    if (key == null)
        return putForNullKey(value);
    --------------------------------------------------------------------------------------
    
    //以下是Hashtable的方法
    public synchronized boolean contains(Object value)
    public synchronized boolean containsKey(Object key)
    public boolean containsValue(Object value)
     
    //以下是HashMap中的方法,注意,没有contains方法,所以,D错误
    public boolean containsKey(Object key)
    public boolean containsValue(Object value)

    HashMap 把 Hashtable 的 contains 方法去掉了 ,改成 containsvalue 和 containsKey 。因为 contains 方法容易让人引起误解。

    10.

    执行以下程序后的输出结果是()
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Test {
    public static void main(String[] args) {
        StringBuffer a = new StringBuffer("A"); 
        StringBuffer b = new StringBuffer("B"); 
        operator(a, b); 
        System.out.println(a + "," + b); 
    public static void operator(StringBuffer x, StringBuffer y) { 
        x.append(y); y = x; 
    }
    }

    正确答案: D   你的答案: D (正确)

    A,A
    A,B
    B,B
    AB,B

    答:a,b是对象的引用,指向堆内存,将a,b两个引用传给x,y,执行x.append(y),改变了x引用指向的堆内存的存储内容,变为AB, y = x,表示引用y,指向引用x指向的存储区域,没有改变引用b,指向的存储空间的内容。

    11.ConcurrentHashMap使用segment来分段和管理锁,segment继承自ReentrantLock,因此ConcurrentHashMap使用ReentrantLock来保证线程安全。

    12.
    以下代码在编译和运行过程中会出现什么情况
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class TestDemo{
        private int count;
        public static void main(String[] args) {
            TestDemo test=new TestDemo(88);
            System.out.println(test.count);
        }
         TestDemo(int a) {
             count=a;
        }
    }

     

    正确答案: A   你的答案: B (错误)

    编译运行通过,输出结果是88
    编译时错误,count变量定义的是私有变量
    编译时错误,System.out.println方法被调用时test没有被初始化
    编译和执行时没有输出结果

    private是私有变量,只能用于当前类中,题目中的main方法也位于当前类,所以可以正确输出


    20.
    下面有关 JAVA 异常类的描述,说法正确的有()

    正确答案: A C   你的答案: A B C (错误)

    异常的继承结构:基类为 Throwable,Error 和 Exception 继承 Throwable,RuntimeException 和 IOException 等继承 Exception
    非 RuntimeException 一般是外部错误,其必须被 try{}catch 语句块所捕获
    Error 类体系描述了 Java 运行系统中的内部错误以及资源耗尽的情形,Error 不需要捕捉
    RuntimeException 体系包括错误的类型转换、数组越界访问和试图访问空指针等等,必须 被 try{}catch 语句块所捕获
    ABC
     
    都是Throwable的子类: 
    1.Exception(异常) :是程序本身可以处理的异常。 
    2.Error(错误): 是程序无法处理的错误。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,一般不需要程序处理。

    3.检查异常(编译器要求必须处置的异常) :  除了Error,RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。

    4.非检查异常(编译器不要求处置的异常): 包括运行时异常(RuntimeException与其子类)和错误(Error)。
  • 相关阅读:
    查看mysql版本的四种方法及常用命令
    newInstance和new的区别(good)
    Citrix 服务器虚拟化之六 Xenserver虚拟机创建与快照
    Java实现 蓝桥杯 算法训练 排序
    Java实现 蓝桥杯 算法训练 排序
    Java实现 蓝桥杯 算法训练 排序
    Java实现 蓝桥杯 算法训练 2的次幂表示
    Java实现 蓝桥杯 算法训练 2的次幂表示
    Java实现 蓝桥杯 算法训练 前缀表达式
    Java实现 蓝桥杯 算法训练 前缀表达式
  • 原文地址:https://www.cnblogs.com/panxuejun/p/5942278.html
Copyright © 2011-2022 走看看