标签:演示 比较 main ext block 引用类型 value lock 静态
一、
public class Test {
public static void main(String[] args) {
Foo obj1=new Foo();
Foo obj2=new Foo();
System.out.println(obj1==obj2);
}
}
class Foo{
int value=100;
}

当“==”施加于原始数据类型变量时,是比较变量所保存的数据是否相等
当“==”施加于引用类型变量时,是比较这两个变量是否引用同一对象。
引用代表地址,所以“==”实际上相当于比较两个引用类型变量中保存的对象地址是否相同
二、
出现错误
public class Test {
public static void main(String[] args) {
Foo obj1=new Foo();
}
}
class Foo{
int value;
public Foo(int initValue) {
value=initValue;
}
}
没有初始化
三、
public class InitializeBlockClass {
{
field=200;
}
public int field=100;
public InitializeBlockClass(int value) {
this.field=value;
}
public InitializeBlockClass() {
}
public static void main(String[] args) {
InitializeBlockClass obj=new InitializeBlockClass();
System.out.println(obj.field);
obj=new InitializeBlockClass(300);
System.out.println(obj.field);
}
}

按顺序依次执行
四、
class Root
{
static{
System.out.println("Root的静态初始化块");
}
{
System.out.println("Root的普通初始化块");
}
public Root()
{
System.out.println("Root的无参数的构造器");
}
}
class Mid extends Root
{
static{
System.out.println("Mid的静态初始化块");
}
{
System.out.println("Mid的普通初始化块");
}
public Mid()
{
System.out.println("Mid的无参数的构造器");
}
public Mid(String msg)
{
//通过this调用同一类中重载的构造器
this();
System.out.println("Mid的带参数构造器,其参数值:" + msg);
}
}
class Leaf extends Mid
{
static{
System.out.println("Leaf的静态初始化块");
}
{
System.out.println("Leaf的普通初始化块");
}
public Leaf()
{
//通过super调用父类中有一个字符串参数的构造器
super("Java初始化顺序演示");
System.out.println("执行Leaf的构造器");
}
}
public class TestStaticInitializeBlock
{
public static void main(String[] args)
{
new Leaf();
}
}

由父类到子类先输出静态初始化块,然后是普通初始化块,无参数和有参构造器。
五、
public class Stac {
public int num;
static void change(Stac a)
{
a.num=10;
}
public static void main(String[] args)
{
Stac b=new Stac();
b.num=100;
b.change(b);
System.out.println(b.num);
}
}

如果先要在静态成原函数中调用非静态中的变量或方法,可以在静态成员函数中声明一个类的对象,然后再调用类的非静态成员或方法。
标签:演示 比较 main ext block 引用类型 value lock 静态
原文地址:https://www.cnblogs.com/sonofdemon/p/9825401.html