2017.10.20作业
1.以下代码为何无法通过编译?哪儿出错了?
如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。Test类在进行调用下面类方法的时候,没有加上参数。
2.如果一个类中既有初始化块,又有构造方法,同时还设定了字段的初始值,谁说了算?
class Test3 {
public int field=100;
{
field=200;
}
public Test3(int value)
{
this.field=value;//如果一个类中既有初始化块,又有构造方法,同时还设定了字段的初始值,还要看两者的
//先后顺序,谁在后,创建对象的的时候,就会使用谁。
}
public Test3()
{
}
public static void main(String []args)
{
Test3 obj= new Test3();
System.out.println(obj.field);
//类的初始化块,只要一被创建,就会被执行;
//如果有构造参数,就会执行构造参数。
obj=new Test3(300);
System.out.println(obj.field);
// TODO 自动生成的方法存根
}}
运行以上代码,调换构造方法和类的初始化块的顺序,就会有不一样的结果。
- 静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?
答: 设置参数
package 第四次上课;
public class Static {
public static void main(String[] args)
{
F t=new F();
int a=t.getnum();
F.input(a);
t.input(a);
}
}
//静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?
//可以通过设置参数访问
class F
{
int a = 100;
public int getnum()
{
return a;
}
public static void input(int c)
{
System.out.println("静态方法调用实例成员"+c);
}
}
运行以上代码,在F类中,有实例化成员,正型变量100,还有静态方法,静态方法中设置了int类型参数,然后就可以访问类中的实例化成员了。
4.两对整数明明完全一样,为何一个输出true,一个输出false?
答:JDK1.5中对整形数据采用了缓存,使用该种方法定义整形的包装类对象时,
* 会自动进行装箱,装箱的时候编译器实际上调用的是Integer的valueOf方法。
- 使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?
代码如下:package 第四次上课;
public class Sum {
public static int a=0;
int c;
public Sum(int cc)
{
c=cc;
a++;
} //上面静态定义一个a,每次执行一次构造函数,就加一,用来计数。
//最后随便输出一个对象加点get(),就可以输出计数结果
public int get()
{
return a;
}
}
package 第四次上课;
public class Shiyan {
public static void main(String[] args)
{
Sum one=new Sum(2);
Sum three=new Sum(3);
Sum a=new Sum(7);
Sum b=new Sum(2);
//输出
System.out.println("你已经创建对象的个数是:"+three.get());
}
}
运行结果: