10.3
![](https://img2022.cnblogs.com/blog/2913340/202210/2913340-20221003174505129-509979683.png)
自定义类:ClassAndObjectTest.java
这两种方式定义变量不同,前一种数据为基本类型integer,变量可以用数值去赋值,即显式初始化,而MyClass为自定义类,必须使用构造函数去定义和初始化。
输出结果为:
说明比较的是地址,不是类里的变量是否相等。
输出结果:
动手动脑1
出错原因:Foo()函数未定义,不能初始化。如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。
结论:类中初始化是根据类的语句顺序赋值的,当把大括号中的field=200移到field=100的后面时 输出为:
说明类的变量初始化在类内部是顺序进行的,但是当调用类中初始化函数对类中变量赋值时则优先按照函数对类内部变量赋值。
static初始化块是在构造函数之前执行的,初始化块中静态初始化块只会执行一次,无论new多少次,只执行一次。而非静态初始化块不是这样的,每次new都会执行一次,执行顺序先静态再非静态,无论是静态或者是非静态,它们的执行顺序都会在构造方法之前,在存在父子类的情况下,在执行完非静态代码块后会立即执行其构造函数然后执行子类的非静态代码块然后执行子类的构造方法
把静态方法的参数设置为类的实例,这样通过参数传递的方式就可以访问实例的成员。
class exe{
int n=100;
static void shuchu(exe x) {
System.out.println(x.n);
}
}
public class wq
{
public static void main(String[] args)
{
exe e=new exe();
e.shuchu(e);
}
}
在通过valueOf方法创建Integer对象的时候,如果数值在[-128,127]之间,便返回指向IntegerCache.cache中已经存在的对象的引用;否则创建一个新的Integer对象。