10.14动手动脑


以下代码为何无法通过编译?哪儿出错了?

public class test 
{
    public static void main(String[] args)
    {
        Foo obj1=new Foo();
    }
}
class Foo
{
    int value;
    public Foo(int initValue)
    {
        value=initValue;
    }
}

这串代码,类Foo已经定义了构造函数,构造函数中有参数,当开辟新空间的时候需要进行初始化;

没有构造函数的时候,系统会自动出没有参数的构造函数;

2、public int field=100;在类初始化后面时

public class test 
{
    {
        filed=200;
    }
    public int filed=100;
    public test(int value)
    {
        this.filed=value;
    }
    
    public test()
    {
        
    }
    
    
    
    public static void main(String[] args)
    {
        a1 obj1=new test();
        System.out.println(obj1.filed);
        
        obj1=new test(300);
        System.out.println(obj1.filed);
    }
}

 public int field=100;在类初始化前面时

public class test 
{
    public int filed=100;
    {
        filed=200;
    }
    
    public test(int value)
    {
        this.filed=value;
    }
    
    public test()
    {
        
    }
    
    
    
    public static void main(String[] args)
    {
       test obj1=new test();
        System.out.println(obj1.filed);
        
        obj1=new test(300);
        System.out.println(obj1.filed);
    }
}

Java字段初始化的规律 

    执行类成员定义时指定的默认值或类的初始化块(类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。),到底执行哪一个要看哪一个“排在前面”。执行类的构造函数。

3、静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)

class test
{
    

    public static void main(String[] args)
    {
        Myclass m=new Myclass();
        m.output();
    }
    
}
class Myclass
{
int i=100;   
static public void output()
{
Myclass a=new Myclass();   
System.out.println(a.i);
}
}
原文地址:https://www.cnblogs.com/xjmm/p/11715912.html