迷惑的一天…太迷了…还是我基础太烂了…一早上醒了咋我家这么多人呢…等感冒好了我再出去浪…冲!多选题依然杀我…/(ㄒ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内存五大区域
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的表达式必须得是布尔类型的。