1.进行试验以下代码输出结果是什么?
package test;
class InitializeBlockClass{
{
field=200;
}
public int field=100;
public InitializeBlockClass(int value)
{
this.field=value;
}
public InitializeBlockClass(){}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
InitializeBlockClass obj=new InitializeBlockClass();
System.out.println(obj.field);
obj=new InitializeBlockClass(300);
}
}
运行结果:
Java字段初始化的规律:所有类的变量都默认初始化null,数字类的原始数据类型默认初始化为0,执行类的成员定义的默认值或类的初始化块,到底执行哪个要看哪一个排在前面。类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。
2. 当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行,请自行编写示例代码验证以上结论。
代码:
class A
{
static
{
System.out.println("A的静态初始化块");
}
}
class B extends A
{
static
{
System.out.println("B的静态初始化块");
}
}
class C extends B
{
static
{
System.out.println("C的静态初始化块");
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
new C();
}
}
运行截图:
3.静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?
package test;
public class news {
private String name;
public news(String name)
{
this.name=name;
}
public static void main(String args[])
{
news s=new news("xiao ");
news s2=new news("li");
s.ask(s);
s.ask(s2);
}
public static void ask(news s)
{
s.say();
}
public void say()
{
System.out.println(name);
}
}
截图:
4.使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?
代码:
package test;
class Number
{
static int count;
public Number()
{
count++;
}
int GetCount()
{
return count;
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Number n1=new Number();
Number n2=new Number();
Number n3=new Number();
System.out.println("你已经创建了"+Number.count+"对象");
}
}
结果截图: