// That doesn't work: 

import java.io.File;

public class Test {
    File file1;
    file1 = new File("path");
}

//--------------------------------------

// The following works:

import java.io.File;

public class Test {
    File file1 = new File("path");
}

I don't understand why the first version is not possible. I also tried it with an int-value (which is not an object - I think):

//Also doesn't work:

public class Test {
    int number;
    number = 4;
} 

Thank you! I tried it and it works (without implementing a non-default constructor or a method):

import java.io.File;

public class Test {
    int number;
    {
        number = 4;
    }
    File file1;
    {
        file1 = new File("path");
    }
    public static void main(String[] args) {
        Test test = new Test();
        System.out.print(test.number + " , " + test.file1.getName());
// Output: 4 , path
    }
}
2

There are 2 best solutions below

1
On

You can do it with a block statement :

public class Test {
    File file1 ;
     {
        file1 = new File("path");
     }
}
1
On

It's because you cannot have executable code in the class definition outside a method. So the line

file1 = new File("path");

(which is a statement), is illegal. It never gets executed. The class definition is processed at compile time, but the compiler is not a virtual machine, it doesn't execute your code. Statements are executed at runtime.

You can, as B.M noted, create a static piece of code which is executed when the class is loaded. But, I believe it is equivalent to your second example:

File file1 = new File("path");

(but I admit not to have checked the bytecode for that).