一、
public class Test{
public static void main(String[] args){
foo obj1=new Foo();
}
}
class Foo{
int value;
public Foo(int initValue){
value=initValue;
}
}
知识兔错误的原因是foo()里面没参数 因为函数定义了一个带有一个参数的构造函数 ,当调用函数是如果自己定义了必须使用这个方法.
二、
public class InitializeBlockDemo {
/**
* @param args
*/
public static void main(String[] args) {
InitializeBlockClass obj=new InitializeBlockClass();
System.out.println(obj.field);
obj=new InitializeBlockClass(300);
System.out.println(obj.field);
}
}
class InitializeBlockClass{
//下面这句在初始化块之前与之后,会影响到field字段的初始值
//public int field=100;
{
field=200;
}
public int field=100;
public InitializeBlockClass(int value){
this.field=value;
}
public InitializeBlockClass(){
}
}
知识兔静态初始化生成实例(new之后)变成你赋给他的值,先执行静态初始化,如果没有实例化,按照初始化和构造方法在程序中出现的顺序执行。
三、
class Root
{
static{
System.out.println("Root的静态初始化块");
}
{
System.out.println("Root的普通初始化块");
}
public Root()
{
System.out.println("Root的无参数的构造器");
}
}
class Mid extends Root
{
static{
System.out.println("Mid的静态初始化块");
}
{
System.out.println("Mid的普通初始化块");
}
public Mid()
{
System.out.println("Mid的无参数的构造器");
}
public Mid(String msg)
{
//通过this调用同一类中重载的构造器
this();
System.out.println("Mid的带参数构造器,其参数值:" + msg);
}
}
class Leaf extends Mid
{
static{
System.out.println("Leaf的静态初始化块");
}
{
System.out.println("Leaf的普通初始化块");
}
public Leaf()
{
//通过super调用父类中有一个字符串参数的构造器
super("Java初始化顺序演示");
System.out.println("执行Leaf的构造器");
}
}
public class TestStaticInitializeBlock
{
public static void main(String[] args)
{
new Leaf();
}
}
知识兔首先执行的是父类静态初始化模块,然后是子类静态初始化模块,然后再是由父类到子类依次执行普通、无参、有参的构造器。
四、在静态方法中访问类的实例成员
public class Test
{
int x=1;
static int y=2;
public static void method()//静态方法
{
System.out.println("实例变量x = " + new Test().x);//在静态方法中访问类的实例变量需首先进行类的实例化
System.out.println("静态变量y = " + y);//在静态方法中可直接访问类的静态变量
}
public static void main(String[] args)
{
Test.method();
Test t = new Test();
System.out.println("x = " + t.x);
}
}
知识兔先实例化类,得到一个实例变量,将要使用的类作为参数传给静态方法
五、使用类的静态字段和构造函数,可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?“。
public class Test {
private static int n = 0;
public Test() {
n++;
}
public static int getNum() {
return n;
}
public static void main(String[] args) {
Test t1 = new Test();
Test t2 = new Test();
Test t3 = new Test();
System.out.println("已生成对象个数为:" + Test.getNum());
}
}
知识兔