java 不用new变量_java里对象声明new和不new的区别?,没new的类变量能不能调用该类的属性和方法?...
时间: 2024-01-13 11:05:29 浏览: 29
在 Java 中,对象的创建需要使用 `new` 关键字,如:
```java
MyClass myObj = new MyClass();
```
这行代码会创建一个名为 `myObj` 的 `MyClass` 类型的对象,并分配内存空间。如果没有使用 `new` 关键字,那么就只是声明了一个变量,但没有创建对象。例如:
```java
MyClass myObj;
```
这行代码只是声明了一个名为 `myObj` 的 `MyClass` 类型的变量,但并没有创建对象。此时如果直接访问 `myObj` 的属性或方法,会导致编译错误。
因此,在 Java 中,如果希望调用类的属性和方法,必须先创建对象。如果没有创建对象,那么就不能调用该类的属性和方法。
相关问题
Java中静态方法不能访问非静态成员变量和非静态成员方法,那为什么可以new一个对象
Java中的静态方法确实不能直接访问非静态成员变量和非静态成员方法,因为非静态成员变量和非静态成员方法是与对象实例相关联的,需要通过对象实例才能访问。而静态方法不属于任何一个特定的对象实例,它属于整个类,所以无法直接访问非静态成员。
但是,静态方法可以通过创建对象实例来访问非静态成员变量和非静态成员方法。这是因为在创建对象实例时,非静态成员变量和非静态成员方法会被分配内存,成为该对象实例的一部分,因此静态方法就可以通过对象实例访问它们。
同时,在Java中,可以使用静态方法来创建对象实例,即使用静态方法返回一个新的对象实例。这也就是为什么在静态方法中可以使用new操作符创建新的对象实例。
需要注意的是,静态方法可以被类直接调用,不需要先创建对象实例。但是在静态方法中使用new操作符动态分配内存时,生成的对象实例依然是非静态成员,需要通过对象实例来访问。例如:
```java
public class Example {
private int x;
private static int y;
public static void foo() {
Example obj = new Example(); // 可以在静态方法中使用new操作符创建对象实例
obj.x = 10; // 通过对象实例访问非静态成员变量
obj.bar(); // 通过对象实例调用非静态成员方法
Example.y = 20; // 可以直接访问静态成员变量
baz(); // 可以直接调用另一个静态方法
}
private void bar() {
// ...
}
private static void baz() {
// ...
}
}
```
Java的new 对象如何内部类初始化
在Java中,内部类的初始化可以通过外部类的实例来完成。具体来说,可以在外部类中创建内部类的实例,然后调用该实例的构造方法来初始化内部类。
假设有一个外部类Outer和一个内部类Inner,那么可以通过以下代码来初始化内部类:
```
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
```
这里首先创建了一个Outer类的实例outer,然后通过outer实例来创建Inner类的实例inner。注意,在创建内部类实例时,需要使用outer.new Inner()的语法。这是因为内部类实例需要与外部类实例关联起来,以便可以访问外部类的成员变量和方法。