2023年9月28日(动手动脑)

Public class Tese{
pulic static voif main(String[] args){
Foo obj1=new Foo();
}
class Foo{
int value;
public Foo(int initValue){
value=initValue;
}
}
}

以上代码在编译时会出现错误,原因是因为如果类提供了一个自定义的构造方法,将导致系统不再提高默认构造方法。而对于多构造函数,

同一个类可以有多个构造函数,多个构造函数之间通过参数来区分。这是方法重载的一个实例。构造函数之间可以相互调用。

class Fruit{
 int grams;
 int calsPerGram;
 Fruit(){
 this(55,10); 
}
Fruit(int g, int c){
 grams=g;
 calsPerGram=C;
}
}

而当一个类中如果既有初始化块又有构造方法,同时还设定了字段的初始值时,编译应该听谁的?

 

类字段的初始化顺序:
执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。·执行类的构造函数。
类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。

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

class MyClass {
private int number; // 实例字段

public static void main(String[] args) {
MyClass myObject = new MyClass();
myObject.setNumber(10); // 通过实例调用静态方法
System.out.println(myObject.getNumber()); // 通过实例调用非静态方法
}

public static void setNumber(MyClass instance, int value) {
instance.number = value; // 访问实例字段
}

public int getNumber() {
return number; // 返回实例字段的值
}
}

在上面的例子中,通过将实例作为参数传递给静态方法setNumber,我们可以在静态方法中访问类的实例成员number。然后,通过实例调用非静态方法getNumber来获取实例字段的值。

posted @ 2023-09-28 21:16  贾贾鱼  阅读(28)  评论(0)    收藏  举报