做题总结(三)

1.

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

A.final i;
B.static int i;
 
 
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);

该代码编译出错的原因?

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

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

①所有的byte,short,char型的值将被提升为int型;

②如果有一个操作数是long型,计算结果是long型;

③如果有一个操作数是float型,计算结果是float型;

④如果有一个操作数是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”。

转载于:https://www.cnblogs.com/Rui-Jia/p/5505940.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值