作题总结(三)

1.

下列整型常量 i 的定义中,正确的是(  )java

A.final i;
B.static int i;
C.static final int  i=234;
D.final float i=3.14f;

解析:关于final关键字,final能够修饰类,修饰类的以后,该类就不能再被继承了。(能够出于安全角度考虑,可是尽可能不把   类设为final)。final能够修饰方法,被修饰的方法就不会被该类的子类的方法覆盖,也就是将这个方法锁定。final能够修饰变量,可是变量的值一经赋值便不能改变,也就是说被final修饰的变量是常量。正则表达式

2. 数据库

public static void main (String[] args) { 

String classFile = "com. jd. ". replaceA11(".", "/") + "MyClass.class";

System.out.println(classFile);

}

输出:安全

///////MyClass.class
解析:replaceAll这个方法的参数是正则表达式,在正则表达式中“.”表明任何字符
 
3.
 
 
 
 
byte b1=1,b2=2,b3,b6; 
final byte b4=4,b5=6; 
b6=b4+b5; 
b3=(b1+b2); 
System.out.println(b3+b6);

该代码编译出错的缘由?app

b1和b2是byte型,在计算的时候java将其上转成int型进行计算,也就是b1+b2的和是int型,而b3是byte型,因此b3=(b1+b2)这一步编译出错。优化

表达式的数据类型自动提高, 关于类型的自动提高,注意下面的规则。 this

①全部的byte,short,char型的值将被提高为int型; spa

②若是有一个操做数是long型,计算结果是long型; .net

③若是有一个操做数是float型,计算结果是float型; code

④若是有一个操做数是double型,计算结果是double型;

而声明为final的变量会被JVM优化,第3行至关于 b6 = 10.

 

4.String str = new String(“abc”),“abc”在内存中是怎么分配的?

堆,字符串常量区。

解析:什么是字符串常量池

JVM为了减小字符串对象的重复建立,其维护了一个特殊的内存,这段内存被成为字符串常量池或者字符串字面量池

工做原理

当代码中出现字面量形式建立字符串对象时,JVM首先会对这个字面量进行检查,若是字符串常量池中存在相同内容的字符串对象的引用,则将这个引用返回,不然新的字符串对象被建立,而后将这个引用放入字符串常量池,并返回该引用。

 

5.该段代码的输出:

public class test02{
public static void main(String[] args){
   Integer var1=new Integer(1);
   Integer var2=var1;
   doSomething(var2);
   System.out.print(var1.intValue());
   System.out.print(var1==var2);
}
public static void doSomething(Integer integer){
    integer=new Integer(2);
    }
}

结果: 1true

解析:只有对引用对象的内部作了修改,才会影响原对象,若是直接将引用修改了,则对原对象没有影响,惟一的影响就是:这个被修改的引用,如今不是原来对象的引用,而是新对象的引用。

也就是说doSomething这个方法其实do了nothing!

class likeInteger{
    int value;

    public  likeInteger(int value){
        this.value=value;
    }
}
public class test02{
    public static void change1(likeInteger n){
        n=new likeInteger(2);
    }
    public static void change2(likeInteger n){
        n.value=3;
    }
    public static void main(String[] args) {
        likeInteger num=new likeInteger(1);
        System.out.print(num.value);
        change1(num);
        System.out.print(num.value);
        change2(num);
        System.out.print(num.value);
    }
}

这段代码的输出是:113

 

6.下列选项中关于Java中super关键字的说法正确的是()

A.super关键字是在子类对象内部指代其父类对象的引用
B.super关键字不只能够指代子类的直接父类,还能够指代父类的父类
C.子类经过super关键字只能调用父类的方法,而不能调用父类的属性
D.子类经过super关键字只能调用父类的属性,而不能调用父类的方法
解析:看代码:
class animals{
    String move="slow";
    public void f(){
        System.out.println("this is fatherclass f");
    }
}
class tiger extends animals {
    String move="fast";
    public void f(){
        System.out.println(super.move);
        super.f();
        System.out.println(this.move);
    }
}
public class test03{
    public static void main(String[] args) {
        tiger t=new tiger();
        t.f();
    }
}

输出:

image

C,D都是错误的。

7.String和StringBuffer的区别?

解析:String的长度是不可变的,StringBuffer的长度是可变的。若是对于一个常常须要修改内容的字符串来讲,用StringBuffer比价好,由于StringBuffer的append方法相对于String的+不须要每次都分配新的内存。

使用StringBuffer的append方法进行字符串的链接,将比String更加节约内容,例如应用于数据库SQL语句的链接,例如:StringBuffer sb = new StringBuffer();String user = “test”;String pwd = “123”;sb.append(“select * from userInfo where username=“).append(user).append(“ and pwd=”).append(pwd);这样对象sb的值就是字符串“select * from userInfo where username=test and pwd=123”。

相关文章
相关标签/搜索