2019.10.14动手动脚


1、
public
class a1 { 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 a1 
{
    {
        filed=200;
    }
    public int filed=100;
    public a1(int value)
    {
        this.filed=value;
    }
    
    public a1()
    {
        
    }
    
    
    
    public static void main(String[] args)
    {
        a1 obj1=new a1();
        System.out.println(obj1.filed);
        
        obj1=new a1(300);
        System.out.println(obj1.filed);
    }
}

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

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

Java字段初始化的规律

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

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

class a1
{
    

    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/1234yyf/p/11686822.html