软件开发----Java基础每日刷题(转载于牛客)

1.        在JAVA中, 下列标识符合法的是()

A        3kyou

B        @163

C        name

D        while

正确答案:C

解析:

标识符由数字、字母、下划线三部分组成,不能由数字开头、不能包含除_和$之外的字符、严格区分大小写、不能包含关键字。


2.        可以把任何一种数据类型的变量赋给Object类型的变量。

       对

B        错

正确答案:A

解析:还是老话,Java中一切都是对象,Object是所有类的根类!


3.        要使某个类能被同一个包中的其他类访问,但不能被这个包以外的类访问,可以( )

A        让该类不使用任何关键字

       使用private关键字

C        使用protected关键字

D        使用void关键字

正确答案:A

解析:


4.        下列Java代码中的变量a、b、c分别在内存的____存储区存放。

class A {
    private String a = “aa”;
    public boolean methodB() {
        String b = “bb”;
        final String c = “cc”;
    }
}

A        堆区、堆区、堆区

       堆区、栈区、堆区

C        堆区、栈区、栈区

D        堆区、堆区、栈区

       静态区、栈区、堆区

F        静态区、栈区、栈区

正确答案:C

解析:

成员变量和局部变量的区别

       成员变量:

          ①成员变量定义在类中,在整个类中都可以被访问。

          ②成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。

          ③成员变量有默认初始化值。

      局部变量:

          ①局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。

          ②局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。

          ③局部变量没有默认初始化值 

      在使用变量时需要遵循的原则为:就近原则

      首先在局部范围找,有就使用;接着在成员位置找。

成员变量和静态变量的区别

      1、两个变量的生命周期不同

            成员变量随着对象的创建而存在,随着对象被回收而释放。

            静态变量随着类的加载而存在,随着类的消失而消失。

      2、调用方式不同

            成员变量只能被对象调用。

            静态变量可以被对象调用,还可以被类名调用。

      3、别名不同

            成员变量也称为实例变量。

            静态变量也称为类变量。

      4、数据存储位置不同

            成员变量存储在堆内存的对象中,所以也叫对象的特有数据。

            静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。

     成员变量、局部变量、静态变量的区别 

成员变量

局部变量

静态变量

定义位置

  在类中 , 方法外

方法中 , 或者方法的形式参数

在类中 , 方法外

初始化值

有默认初始化值

无 , 先定义 , 赋值后才能使用

有默认初始化值

调用方式

对象调用

---

对象调用,类名调用

存储位置

堆中

栈中

方法区

生命周期

与对象共存亡

与方法共存亡

与类共存亡

别名

实例变量

---

类变量


5.        执行如下代码段后,变量s1引用的字符串值是(    )。

String s1 = "ABCD";

String s2 = "1234";

System.out.println(s1 + s2);

A        ABCD

       1234

C        ABCD1234

D        1234ABCD

正确答案:A

解析:

运行完是ABCD1234,但是这是重新创建一个新的字符串,而不是直接在s1上的操作

所以s1仍然是ABCD


6.        指出下列程序运行的结果:

public class Example{
    String str=new String("tarena");
    char[]ch={'a','b','c'};
    public static void main(String args[]){
        Example ex=new Example();
        ex.change(ex.str,ex.ch);
        System.out.print(ex.str+" and ");
        System.out.print(ex.ch);
    }
    public void change(String str,char ch[]){
   //引用类型变量,传递的是地址,属于引用传递。
        str="test ok";
        ch[0]='g';
    }
}

       tarena and abc

       tarena and gbc

C        test ok and abc

       test ok and gbc

正确答案:B

解析:

1.为什么string字符串的值是不可变的?当我们new一个字符串,给它赋值之后,那么当前对象的值就固定了,永远不会改变。比如String str=new String("test"),那么str的值就是test,这是因为在String源码当中是用char数组来按顺序存储字符串中的每一个字符的,并且这个char数组是用final修饰的,这意味着一旦我们给字符串赋值之后,这个对象的值就永远不会改变。

2.可是当我们在一个类当中的某个方法里面,给这个对象str赋值了一个新的字符串,它这时候的值是多少呢?比如这时str="good",str的值就是good,(你可以在这个方法里面写输出语句,输出这个引用,就知道怎么回事了)可不是说引用的值不可以改变么?这里改变的不是引用的值,而是引用str指向的常量不一样了而已,而这个引用的生命周期和当前方法的一样的,也就是方法结束,引用被杀死,也结束了,那么它刚才指向good的这个引用,就结束了,所以在这个方法结束之后,再输出引用str的值,自然就是引用str之前指向的值了,也就是test。


7.        下面有关java object默认的基本方法,说法错误的是?

       equals(Object obj) 指示某个其他对象是否与此对象“相等”

B        copy() 创建并返回此对象的一个副本

C        wait() 导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法

D        toString() 返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成

正确答案:B

解析:

protected Object clone ()                             //创建并返回此对象的一个副本。 

boolean equals (Object obj)                        //指示某个其他对象是否与此对象“相等”。 

protected void finalize ()                              //当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。 

Class<? extends Object> getClass ()         //返回一个对象的运行时类。 

int hashCode ()                                             //返回该对象的哈希码值。 

void notify ()                                                  //唤醒在此对象监视器上等待的单个线程。 

void notifyAll ()                                             //唤醒在此对象监视器上等待的所有线程。 

String toString ()                                           //返回该对象的字符串表示。 

void wait ()                                                     //导致当前的线程等待,直到其他线程调用此对象的 notify () 方法或 notifyAll () 方法。 

void wait ( long timeout)                               //导致当前的线程等待,直到其他线程调用此对象的 notify () 方法或 notifyAll () 方法,或者超过指定的时间量。 

void wait ( long timeout, int nanos)             //导致当前的线程等待,直到其他线程调用此对象的 notify () 方法或 notifyAll () 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量。


8.        下面是java语言的基本特性是?()

A        封装

       多态

C        继承

D        高效

正确答案:ABC


9.        关于ThreadLocal类 以下说法正确的是

A        ThreadLocal继承自Thread

B        ThreadLocal实现了Runnable接口

C        ThreadLocal重要作用在于多线程间的数据共享

       ThreadLocal是采用哈希表的方式来为每个线程都提供一个变量的副本

       ThreadLocal保证各个线程间数据安全,每个线程的数据不会被另外线程访问和破坏

正确答案:DE

解析:

1、ThreadLocal的类声明: public class ThreadLocal<T> 可以看出ThreadLocal并没有继承自Thread,也没有实现Runnable接口。所以AB都不对。

2、ThreadLocal类为每一个线程都维护了自己独有的变量拷贝。每个线程都拥有了自己独立的一个变量。 所以ThreadLocal重要作用并不在于多线程间的数据共享,而是数据的独立,C选项错。

由于每个线程在访问该变量时,读取和修改的,都是自己独有的那一份变量拷贝,不会被其他线程访问, 变量被彻底封闭在每个访问的线程中。所以E对。

3、ThreadLocal中定义了一个哈希表用于为每个线程都提供一个变量的副本:

 static class ThreadLocalMap {
         static class Entry extends WeakReference<ThreadLocal> {
             /** The value associated with this ThreadLocal. */
             Object value;
             Entry(ThreadLocal k, Object v) {
                 super(k);
                 value = v;
             }
         }
         /**
          * The table, resized as necessary.
          * table.length MUST always be a power of two.
          */
         private Entry[] table;
 } 

所以D对。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值