day_03 刷题日记

迷惑的一天…太迷了…还是我基础太烂了…一早上醒了咋我家这么多人呢…等感冒好了我再出去浪…冲!多选题依然杀我…/(ㄒoㄒ)/~~

1.以下不属于构造方法特征的是(D)

构造方法名与类名相同
构造方法不返回任何值,也没有返回类型
构造方法在创建对象时调用,其他地方不能显式地直接调用
每一个类只能有一个构造方法

想说一下C选项,子类在构造方法里面调用父类的构造方法时,会在第一行使用super(参数列表)显示调用父类的构造方法。这里是显示地直接调用,而且没有创建新对象。D选项里面,和.java文件同名的public类可以有多个构造方法,构造方法也可以重载,内部类也能有多个构造方法,但是匿名内部类一个构造方法都没有啊!

2.局部变量和成员变量重名是可以的,用this指向成员变量即可。

3.下述代码返回的结果是什么?

Integer a = 1;
Integer b = 1;
Integer c = 500;
Integer d = 500;
System.out.print(a == b);
System.out.print(c == d);

true、true
true、false
false、true
false、false

答案应该选B,我选的D…==和equals的区别没用对系列,此外这个题主要考的还不是这个点。强调一下,如果用 ==比较基本数据类型(byte,short,char,int,long,float,double,boolean ),那么比较的是值,但如果是复合数据类型,那么比较的是在内存中的存放地址。

另外的另外,JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了,而是比较数值
对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(== )进行比较的,所以比较后的结果跟双等号(==)的结果相同。

再回到这个题上,Interger的范围是[-128,127],在这个范围内比较大小,相等为true,超过范围为false。

4.JVM内存五大区域

img

5.如下代码,执行test()函数后,屏幕打印结果为(D)

public class Test2
{
    public void add(Byte b)
    {
        b = b++;
    }
    public void test()
    {
        Byte a = 127;
        Byte b = 127;
        add(++a);
        System.out.print(a + " ");
        add(b);
        System.out.print(b + "");
    }
}

127 127
128 127
129 128
以上都不对

不知道做题的时候,大家有没有发现add()方法根本形同虚设,没啥卵用。我被迷惑住了…b++是后起作用的,然鹅它又赋值给b了,所以相当于++没起作用啊,也就是说add(b)输出的还是b=127,但是Byte的类型是-128-127,++a之后127溢出了,就是-128。输出答案应该是-128 127,木的这个答案,选D。

6.关于java传值https://blog.csdn.net/scholar_man/article/details/80900212

7.问这个程序的输出结果。

package Wangyi;
class Base
{
    public void method()
    {
        System.out.println("Base");
    } 
}
class Son extends Base
{
    public void method()
    {
        System.out.println("Son");
    }
     
    public void methodB()
    {
        System.out.println("SonB");
    }
}
public class Test01
{
    public static void main(String[] args)
    {
        Base base = new Son();
        base.method();
        base.methodB();
    }
}

Base SonB
Son SonB
Base Son SonB
编译不通过

答案D,我选的B…编译看左,运行看右。编译的时候检查Base类method方法和methodB方法是否都存在,然后发现没有methodB方法,编译不通过。

8.还有一个题是关于String类型和StringBuffer类型的对象创建之后能不能再修改和变动的问题。StringBuffer是可以的,但是String对象不可变。String str = “aa”; str = “aa”+“bb”; 此时str的值为"aabb",但是"aabb"不是在开始的字符串"aa"后面直接连接的"bb",而是又新生成了字符串"aabb",字符串"aa"一旦被初始化,那么它的值不可能再改变了。 StringBuffer strb = StringBuffer(“aa”); strb.append(“bb”); 此时的strb的值也为"aabb",但是"aabb"是直接在开始的字符串"aa"后面连接的“bb”,并没有生成新的字符串。StringBuffer可以通过append、insert、remove方法改变长度。

9.哪些描述是正确的??B

public class While {
	public void loop() {
		int x= 10;
		while ( x )  {
			System.out.print("x minus one is " + (x - 1));
			x -= 1;
		}
	}
}


行1有语法错误
行4有语法错误
行5有语法错误
行6有语法错误
行2有语法错误,loop是关键字
程序能够正常编译和运行

挺容易混的这个题,在C语言中while()表达式的判断,大于0的int值都会被认为是true,而java中while的表达式必须得是布尔类型的。

发布了58 篇原创文章 · 获赞 5 · 访问量 6280

猜你喜欢

转载自blog.csdn.net/weixin_40992982/article/details/103944352
今日推荐