重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
应该是B,
目前创新互联已为成百上千的企业提供了网站建设、域名、网页空间、网站托管、服务器租用、企业网站设计、嘉鱼网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
在java世界中,所有的对象都直接或间接是Object的子类.
选D ,打印结果为3
public class Test {
static {
int x = 5;//形参x 赋值为5,没有调用
}
static int x, y;//本类属性,x,y默认为0
public static void main(String args[]) {
x--;// 本类属性x-- this.x=-1
myMethod();
System.out.println(x + y + ++x);//x = this.x = 1 ,y = 0, ++x = 2
//打印结果为 3 x + y + ++x = 1+0+2 = 3
}
public static void myMethod() {
y = x++ + ++x;
// x++ = -1 , this.x = 0
// ++x = 1 , this.x = 1
//y = -1 + 1 = 0
}
}
答案 是 -1。。
例如
5%3=2
5%-3=2
-5%3=-2
-5%-3=-2
可以认为被除数决定了余数的正负
程序入口 Stem stem=new Stem(3);执行Stem的有参数构造函数;
而Stem继承了Root,构造函数中有super(1);所以进入执行Root的有参数构造函数;
执行完后返回Stem继续执行;
所以,最简单的理解:先执行父类构造,再执行本类构造;声明先于构造先执行;
运行结果:
Component1 construct
Component2 construct
Component3 construct
Root constructor
Component1 construct
Component2 construct
Component3 construct
Stem constructor
第一行输出结果是abc:
原因是:
s.substring(1);
s.replace("bc", "xyz");
这两句话没有任何作用 ~因为String是属于值传递~
第二行 输出结果是false:
原因是:
用==比较字符串,是比较两个变量本身的值,即两个对象在内存中的首地址。用equals比较就会为true,equals比较的是内容是否相同。
附:
1、值传递、引用传递的区别:
值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。
引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数
2、用==比较和用equals比较的区别:
对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同.
“==”比较两个变量本身的值,即两个对象在内存中的首地址.
“equals()”比较字符串中所包含的内容是否相同.
这有啥不理解的
首先注意static int i= 47; 是静态的,说明类对象共享
第一步:t2.i=60 输出是60 这个好理解
第二步:t1.call() 之后 i的值变成3 输出就是3
第三步:又调了一次t2.call() 如果再输出i的值 还是3
要明白当你定义i为static的时候,不管你是t1还是t2去修改i的值,都是同一个i,这个和i归类所有,所有这个类的对象都使用这一份,所以不管你输出t1.i 还是t2.i 都是Test::i