类与对象动手动脑

1.总结这个方法的与众不同

public Mytextclass(int initvalue)

    {

        value=initvalue;

    }

(1)   方法名与类名相同

(2)       方法名的第一个字母大写了

2.为什么以下代码会出现错误,分析原因

public class Text {

public static void main(String[] args)

{

     Foo obj1=new Foo();

}

}

class Foo

{

int value;

public Foo(int initvalue)

{

     value=initvalue;

}

}

此代码出现错误的原因:如果类中提供了一个自定义的构造方法,将导致系统不再提供默认构造函数的方法。在类class中创建了一个含一个参数的构造函数,而在主函数中却调用了无参的构造函数。

3.

public class Text {
    public static void main(String[] args) 
    {
        InitializeBlockClass obj=new InitializeBlockClass();
        System.out.println(obj.filed);
        obj=new InitializeBlockClass(300);
        System.out.println(obj.filed);
    }
}
class InitializeBlockClass
{
    {
        filed=200;
    }
    public int filed=100;
    public InitializeBlockClass(int value)
    {
        this.filed=value;
    }
    public InitializeBlockClass()
    {
        
    }
}

实验截图

java进行初始化的地方有两个,初始化块和构造函数。其中初始化块分为静态初始化块和实例初始化块,静态初始化块是类中由static修饰的初始化块,实例初始化块为类中没有任何关键字修饰的初始化语句。如果在主函数中创建对象时没有形参时,如果在类中定义了公共的变量并给与了赋值,那么就会把值赋给主函数中的变量,再调用类中的默认构造函数,如果在主函数中创建对象时有形参,则调用类中对应的构造函数。

4.

public class TestStaticInitializeBlock {
    public static void main(String[] args)
    {
        new Leaf();

    }
}
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的构造器");
    }


}

实验截图

总结“静态初始化块的执行顺序”:静态的初始化块都优先执行,其次才是非静态的初始化块和构造函数,它们的执行顺序是(1)父类的静态初始化块(2)子类的静态初始化块(3)父类的初始化块(4)父类的构造函数(5)子类的初始化块(6)子类的构造函数

5.在静态方法中访问类的实例首先进行类的实例化,在类的静态方法中可以直接访问类的静态变量

public class Exemple 
{
    int x=3;//类的实例变量初始化为3
    static int y=4;//类的静态变量初始化为4
    public static void main(String[] args)
    {
        Exemple.method();
        Exemple ex=new Exemple();
        System.out.println("x="+ex.x);
    }
    public static void method()//静态方法
    {
        System.out.println("实例变量x="+new Exemple().x);//在静态方法中访问类的实例需首先进行类的实例化
        System.out.println("静态变量y="+y);//在类的静态方法中可以直接访问类的静态变量
    }
}

实验截图

6.两个整数明明一样,为什么一个输出true,一个输出false?

public class text {
    public static void main(String[] args) 
    {
        Integer i1=100;
        Integer j1=100;
        System.out.println(i1==j1);
        Integer i2=129;
        Integer j2=129;
        System.out.println(i2==j2);
    }
}

输出结果表明i1和j1指的是同一个对象,而i2和j2指的是不同的对象。在通过valueOf方法创建Integer对象的时候,如果数值在[-128,127]之间,便返回指向IntegerCache.cache中已经存在的对象的引用;否则创建一个新的Integer对象。

原文地址:https://www.cnblogs.com/lijing925/p/7693729.html